diff --git a/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt b/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt index c0c49de6..c04cbea0 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt @@ -23,6 +23,9 @@ data class EvaluationInfo( @SerializedName("markGeometry") val markGeometry: String = "",//MARK_几何坐标 + @SerializedName("linkGeometry") + val linkGeometry: String = "",//link_几何坐标 + @SerializedName("featureName") val featureName: String = "",//问题类型 diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index c8a93a34..30cfb6d6 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -166,6 +166,7 @@ class RealmOperateHelper() { suspend fun captureTaskLink( point: GeoPoint, + taskId: Int, buffer: Double = DEFAULT_BUFFER, bufferType: BUFFER_TYPE = DEFAULT_BUFFER_TYPE, ): HadLinkDvoBean? { @@ -177,7 +178,7 @@ class RealmOperateHelper() { ) val realm = getRealmDefaultInstance() try { - val realmList = getRealmTools(HadLinkDvoBean::class.java).findAll() + val realmList = realm.where(HadLinkDvoBean::class.java).equalTo("taskId", taskId).findAll() var linkBean: HadLinkDvoBean? = null var nearLast: Double = 99999.99 for (link in realmList) { @@ -328,7 +329,7 @@ class RealmOperateHelper() { * @param bufferType 点位外扩距离的单位: 米-Meter,像素-PIXEL * @param sort 是否需要排序 * */ - suspend fun queryLinkByLinkPid(realm: Realm,linkPid: String): MutableList { + suspend fun queryLinkByLinkPid(realm: Realm, linkPid: String): MutableList { val result = mutableListOf() val realmList = getSelectTaskRealmTools(realm, RenderEntity::class.java, false) .notEqualTo("table", DataCodeEnum.OMDB_RD_LINK.name) @@ -415,16 +416,17 @@ class RealmOperateHelper() { } fun getRealmDefaultInstance(): Realm { + val realm = Realm.getDefaultInstance() if (isUpdate) { Log.e("jingo", "数据库更新") - if (Realm.getDefaultInstance().isInTransaction) { - Realm.getDefaultInstance().cancelTransaction() + if (realm.isInTransaction) { + realm.cancelTransaction() Log.e("jingo", "数据库正在事物,需要退出当前事物") } - Realm.getDefaultInstance().refresh() + realm.refresh() isUpdate = false; } - return Realm.getDefaultInstance() + return realm } @@ -456,16 +458,17 @@ class RealmOperateHelper() { } fun getSelectTaskRealmInstance(): Realm { + val realm = Realm.getInstance(Constant.currentSelectTaskConfig) if (isUpdate) { Log.e("jingo", "数据库更新") - if (Realm.getInstance(Constant.currentSelectTaskConfig).isInTransaction) { - Realm.getInstance(Constant.currentSelectTaskConfig).cancelTransaction() + if (realm.isInTransaction) { + realm.cancelTransaction() Log.e("jingo", "数据库正在事物,需要退出当前事物") } - Realm.getInstance(Constant.currentSelectTaskConfig).refresh() + realm.refresh() isUpdate = false; } - return Realm.getInstance(Constant.currentSelectTaskConfig) + return realm } fun updateRealmDefaultInstance() { diff --git a/app/src/main/java/com/navinfo/omqs/hilt/ActivityModule.kt b/app/src/main/java/com/navinfo/omqs/hilt/ActivityModule.kt index 305d50a5..85996ad4 100644 --- a/app/src/main/java/com/navinfo/omqs/hilt/ActivityModule.kt +++ b/app/src/main/java/com/navinfo/omqs/hilt/ActivityModule.kt @@ -44,9 +44,10 @@ class ActivityModule { fun providesTaskListDownloadManager( networkServiceAPI: RetrofitNetworkServiceAPI, importFactory: ImportOMDBHiltFactory, - mapController: NIMapController + mapController: NIMapController, + realmOperateHelper: RealmOperateHelper, ): TaskDownloadManager = - TaskDownloadManager(importFactory, networkServiceAPI, mapController) + TaskDownloadManager(importFactory, networkServiceAPI, mapController, realmOperateHelper) /** * 注入任务下载 @@ -55,8 +56,9 @@ class ActivityModule { @Provides fun providesTaskListUploadManager( networkServiceAPI: RetrofitNetworkServiceAPI, + realmOperateHelper: RealmOperateHelper, ): TaskUploadManager = - TaskUploadManager(networkServiceAPI) + TaskUploadManager(networkServiceAPI, realmOperateHelper) /** * 实验失败,这样创建,viewmodel不会在activity销毁的时候同时销毁 diff --git a/app/src/main/java/com/navinfo/omqs/hilt/GlobalModule.kt b/app/src/main/java/com/navinfo/omqs/hilt/GlobalModule.kt index f1c356d5..69963b8b 100644 --- a/app/src/main/java/com/navinfo/omqs/hilt/GlobalModule.kt +++ b/app/src/main/java/com/navinfo/omqs/hilt/GlobalModule.kt @@ -163,11 +163,11 @@ class GlobalModule { // return RealmCoroutineScope(context) // } - @Singleton - @Provides - fun provideRealmDefaultInstance(): Realm { - return Realm.getDefaultInstance() - } +// @Singleton +// @Provides +// fun provideRealmDefaultInstance(): Realm { +// return Realm.getDefaultInstance() +// } @Singleton @Provides diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt index 0c90394a..a5d401fd 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadManager.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.Observer import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.data.entity.TaskBean +import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.hilt.ImportOMDBHiltFactory import com.navinfo.omqs.http.RetrofitNetworkServiceAPI import java.util.concurrent.ConcurrentHashMap @@ -18,7 +19,8 @@ import java.util.concurrent.ConcurrentHashMap class TaskDownloadManager constructor( val importFactory: ImportOMDBHiltFactory, val netApi: RetrofitNetworkServiceAPI, - val mapController: NIMapController + val mapController: NIMapController, + val realmOperateHelper: RealmOperateHelper, ) { lateinit var context: Context @@ -111,7 +113,7 @@ class TaskDownloadManager constructor( fun addTask(taskBean: TaskBean) { if (!scopeMap.containsKey(taskBean.id)) { - scopeMap[taskBean.id] = TaskDownloadScope(this, taskBean) + scopeMap[taskBean.id] = TaskDownloadScope(this, realmOperateHelper, taskBean) } } diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt index 42ac8798..05e5d01d 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt @@ -9,6 +9,7 @@ import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.utils.MapParamUtils import com.navinfo.omqs.Constant import com.navinfo.omqs.db.ImportOMDBHelper +import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.tools.FileManager.Companion.FileDownloadStatus import com.navinfo.omqs.util.DateTimeUtil @@ -22,7 +23,8 @@ import java.io.RandomAccessFile class TaskDownloadScope( private val downloadManager: TaskDownloadManager, - val taskBean: TaskBean, + private val realmOperateHelper: RealmOperateHelper, + var taskBean: TaskBean, ) : CoroutineScope by CoroutineScope(Dispatchers.IO + CoroutineName("TaskMapDownLoad")) { @@ -107,10 +109,21 @@ class TaskDownloadScope( taskBean.operationTime = DateTimeUtil.getNowDate().time downloadData.postValue(taskBean) if (status != FileDownloadStatus.LOADING && status != FileDownloadStatus.IMPORTING) { - val realm = Realm.getDefaultInstance() - realm.beginTransaction() - realm.insertOrUpdate(taskBean) - realm.commitTransaction() + val realm = realmOperateHelper.getRealmDefaultInstance() + Log.e("jingo", "数据下载更新状态 任务link数量:${taskBean.hadLinkDvoList.size}") + realm.executeTransaction { r -> +// realm.insertOrUpdate(taskBean) + val newTask = + realm.where(TaskBean::class.java).equalTo("id", taskBean.id).findFirst() + newTask?.let { + it.syncStatus = taskBean.syncStatus + it.errMsg = taskBean.errMsg + //赋值时间,用于查询过滤 + it.operationTime = taskBean.operationTime + r.copyToRealmOrUpdate(it) + taskBean = realm.copyFromRealm(it) + } + } realm.close() } } @@ -148,7 +161,7 @@ class TaskDownloadScope( Log.e("jingo", "数据安装结束") withContext(Dispatchers.Main) { //任务与当前一致,需要更新渲染图层 - if(MapParamUtils.getTaskId()==taskBean.id){ + if (MapParamUtils.getTaskId() == taskBean.id) { downloadManager.mapController.layerManagerHandler.updateOMDBVectorTileLayer() } } diff --git a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadManager.kt b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadManager.kt index e61ec83a..45f8c1ea 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadManager.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadManager.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.Observer import com.navinfo.collect.library.data.entity.TaskBean +import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.http.RetrofitNetworkServiceAPI import java.util.concurrent.ConcurrentHashMap @@ -13,6 +14,7 @@ import java.util.concurrent.ConcurrentHashMap class TaskUploadManager constructor( val netApi: RetrofitNetworkServiceAPI, + val realmOperateHelper: RealmOperateHelper, ) { lateinit var context: Context @@ -84,7 +86,7 @@ class TaskUploadManager constructor( fun addTask(taskBean: TaskBean) { if (!scopeMap.containsKey(taskBean.id)) { - scopeMap[taskBean.id] = TaskUploadScope( this, taskBean) + scopeMap[taskBean.id] = TaskUploadScope(this, realmOperateHelper, taskBean) } } diff --git a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt index 67be46d0..1a78f24d 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt @@ -10,7 +10,9 @@ import androidx.lifecycle.Observer import com.navinfo.collect.library.data.entity.QsRecordBean import com.navinfo.omqs.bean.EvaluationInfo import com.navinfo.collect.library.data.entity.TaskBean +import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.omqs.bean.SysUserBean +import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.http.DefaultResponse import com.navinfo.omqs.tools.FileManager.Companion.FileUploadStatus import com.navinfo.omqs.util.DateTimeUtil @@ -21,7 +23,8 @@ import java.util.* class TaskUploadScope( private val uploadManager: TaskUploadManager, - val taskBean: TaskBean, + private val realmOperateHelper: RealmOperateHelper, + var taskBean: TaskBean, ) : CoroutineScope by CoroutineScope(Dispatchers.IO + CoroutineName("OfflineMapUpLoad")) { @@ -71,22 +74,35 @@ class TaskUploadScope( * @param status [OfflineMapCityBean.Status] */ private fun change(status: Int, message: String = "") { - if (taskBean.syncStatus != status) { - taskBean.syncStatus = status - taskBean.errMsg = message - //赋值时间,用于查询过滤 - taskBean.operationTime = DateTimeUtil.getNowDate().time - uploadData.postValue(taskBean) - //同步中不进行状态记录,只做界面变更显示 - if (status != FileUploadStatus.UPLOADING) { - launch { - val realm = Realm.getDefaultInstance() - realm.executeTransaction { - it.copyToRealmOrUpdate(taskBean) + launch { + if (taskBean.syncStatus != status) { + taskBean.syncStatus = status + taskBean.errMsg = message + //赋值时间,用于查询过滤 + taskBean.operationTime = DateTimeUtil.getNowDate().time + //同步中不进行状态记录,只做界面变更显示 + if (status != FileUploadStatus.UPLOADING) { + val realm = realmOperateHelper.getRealmDefaultInstance() + Log.e( + "jingo", + "数据上传更新状态change status:${status} 任务link数量:${taskBean.hadLinkDvoList.size}" + ) + realm.executeTransaction { r -> + val newTask = + realm.where(TaskBean::class.java).equalTo("id", taskBean.id).findFirst() + newTask?.let { + it.syncStatus = taskBean.syncStatus + it.errMsg = taskBean.errMsg + //赋值时间,用于查询过滤 + it.operationTime = taskBean.operationTime + r.copyToRealmOrUpdate(it) + taskBean = realm.copyFromRealm(it) + } } realm.close() } } + uploadData.postValue(taskBean) } } @@ -116,21 +132,26 @@ class TaskUploadScope( return } - val realm = Realm.getDefaultInstance() - + val realm = realmOperateHelper.getRealmDefaultInstance() + realm.refresh() val bodyList: MutableList = ArrayList() if (taskBean.syncStatus == FileUploadStatus.WAITING) { change(FileUploadStatus.UPLOADING) } + Log.e("jingo", "上传link数量1 :${taskBean.hadLinkDvoList.size}") + val newTaskBean = + realm.where(TaskBean::class.java).equalTo("id", taskBean.id).findFirst() + if (newTaskBean != null) { + Log.e("jingo", "上传link数量2 :${newTaskBean.hadLinkDvoList.size}") + taskBean = realm.copyFromRealm(newTaskBean) + } - taskBean.hadLinkDvoList.forEach { hadLinkDvoBean -> - Log.e("jingo", "数据上传遍历开始") - + for (hadLinkDvoBean in taskBean.hadLinkDvoList) { + Log.e("jingo", "数据上传遍历开始0${hadLinkDvoBean.linkPid}") val linkStatus = 1 //存在原因标记未测评 if (hadLinkDvoBean.reason.isNotEmpty()) { - Log.e("jingo", "数据上传遍历开始0${hadLinkDvoBean.linkPid}") //未测评 val linkStatus = 0 @@ -142,6 +163,7 @@ class TaskUploadScope( markId = UUID.randomUUID().toString(),//"20065597" trackPhotoNumber = "", markGeometry = "", + linkGeometry = "", featureName = "", problemType = 0, problemPhenomenon = "", @@ -163,8 +185,6 @@ class TaskUploadScope( } else { - Log.e("jingo", "数据上传遍历开始1${hadLinkDvoBean.linkPid}") - val linkStatus = hadLinkDvoBean.linkStatus var s: String = "%.3f".format(hadLinkDvoBean.length)//保留一位小数(且支持四舍五入) @@ -175,14 +195,20 @@ class TaskUploadScope( if (objects != null && objects.size > 0) { val copyList = realm.copyFromRealm(objects) - copyList.forEach { - var problemType = 0 - if (it.problemType == "错误") { - problemType = 0 - } else if (it.problemType == "多余") { - problemType = 1 - } else if (it.problemType == "遗漏") { - problemType = 2 + for (it in copyList) { + val problemType = when (it.problemType) { +// "错误" -> { +// 0 +// } + "多余" -> { + 1 + } + "遗漏" -> { + 2 + } + else -> { + 0 + } } var roadClassfcation = 0 @@ -196,8 +222,10 @@ class TaskUploadScope( roadFunctionGrade = hadLinkDvoBean.linkInfo!!.functionLevel dataLevel = hadLinkDvoBean.linkInfo!!.dataLevel } - - var evaluationWay = 2 + var linkGeometry = "" + if(linkStatus == 3) + linkGeometry = hadLinkDvoBean.geometry + val evaluationWay = 2 val evaluationInfo = EvaluationInfo( evaluationTaskId = taskBean.id.toString(), linkPid = hadLinkDvoBean.linkPid,//"84207223282277331" @@ -205,6 +233,7 @@ class TaskUploadScope( markId = it.id, trackPhotoNumber = "", markGeometry = it.geometry, + linkGeometry = linkGeometry, featureName = it.classCode, problemType = problemType, problemPhenomenon = it.phenomenon, @@ -226,11 +255,11 @@ class TaskUploadScope( } } } - Log.e("jingo", "数据上传遍历结束") } realm.close() - + Log.e("jingo", "数据上传条数 ${bodyList.size}") if (bodyList.size > 0) { + val result = uploadManager.netApi.postRequest(bodyList)// .enqueue(object : // Callback { if (result.isSuccessful) { @@ -240,6 +269,7 @@ class TaskUploadScope( change(FileUploadStatus.DONE, "上传成功") } else { change(FileUploadStatus.ERROR, "${defaultUserResponse.msg}") + Log.e("jingo", "数据上传出错 ${defaultUserResponse.msg}") } } else { // handle the failure @@ -249,13 +279,12 @@ class TaskUploadScope( change(FileUploadStatus.ERROR) } } else { - change(FileUploadStatus.NONE,"无可上传数据") + change(FileUploadStatus.NONE, "无可上传数据") } } catch (e: Throwable) { change(FileUploadStatus.ERROR) Log.e("jingo", "数据上传出错 ${e.message}") } finally { - } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index 13195a8a..fb779647 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -366,7 +366,7 @@ class MainViewModel @Inject constructor( */ private suspend fun getTaskBean() { val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst() if (res != null) { currentTaskBean = realm.copyFromRealm(res) diff --git a/app/src/main/java/com/navinfo/omqs/ui/dialog/TimeDialog.kt b/app/src/main/java/com/navinfo/omqs/ui/dialog/TimeDialog.kt new file mode 100644 index 00000000..826367d5 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/dialog/TimeDialog.kt @@ -0,0 +1,42 @@ +package com.navinfo.omqs.ui.dialog + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.View +import android.widget.DatePicker +import android.widget.TextView +import android.widget.TimePicker +import com.navinfo.omqs.R + +interface OnTimeDialogListener { +} + +class TimeDialog(context: Context) : Dialog(context), View.OnClickListener { + + private lateinit var dataPicker: DatePicker + private lateinit var timePicker: TimePicker + private var timeText = "" + override fun onCreate(savedInstanceState: Bundle?) { + val customFrame = View.inflate(context, R.layout.dialog_time_layout, null) + dataPicker = customFrame.findViewById(R.id.time_dialog_data_picker) + timePicker = customFrame.findViewById(R.id.time_dialog_time_picker) + customFrame.findViewById(R.id.time_dialog_ok).setOnClickListener(this) + customFrame.findViewById(R.id.time_dialog_cancel).setOnClickListener(this) + setContentView(customFrame) + } + + override fun onClick(v: View) { + when (v.id) { + R.id.time_dialog_ok -> { +// dataPicker. + dismiss() + } + R.id.time_dialog_cancel -> { + dismiss() + } + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt index 41be9a3f..0c60ca30 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.navinfo.collect.library.data.entity.QsRecordBean import com.navinfo.collect.library.data.entity.TaskBean +import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.util.DateTimeUtil import dagger.hilt.android.lifecycle.HiltViewModel @@ -13,7 +14,9 @@ import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class ConsoleViewModel @Inject constructor() : ViewModel() { +class ConsoleViewModel @Inject constructor( + private val realmOperateHelper: RealmOperateHelper +) : ViewModel() { /** * 当前任务量统计 */ @@ -26,7 +29,7 @@ class ConsoleViewModel @Inject constructor() : ViewModel() { init { viewModelScope.launch { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() val nowTime: Long = DateTimeUtil.getNowDate().time val beginNowTime: Long = nowTime - 90 * 3600 * 24 * 1000L val syncUpload: Int = FileManager.Companion.FileUploadStatus.DONE diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt index 260884fb..b7281da4 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt @@ -129,8 +129,10 @@ class EvaluationResultViewModel @Inject constructor( liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(point).toText() mapController.markerHandle.addMarker(point, TAG) - viewModelScope.launch { - captureLink(point) + viewModelScope.launch(Dispatchers.IO) { + val realm = realmOperateHelper.getSelectTaskRealmInstance() + captureLink(realm, point) + realm.close() } } @@ -151,17 +153,20 @@ class EvaluationResultViewModel @Inject constructor( * 查询数据库,获取问题分类 */ fun initNewData(bean: SignBean?, filePath: String) { + //查询元数据 viewModelScope.launch(Dispatchers.IO) { /** * 获取当前所选的任务 */ val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() + val objects = realm.where(TaskBean::class.java).equalTo("id", taskId).findFirst() if (objects != null) { liveDataTaskBean.postValue(realm.copyFromRealm(objects)) } + realm.close() //获取当前定位点 val geoPoint = mapController.locationLayerHandler.getCurrentGeoPoint() //如果不是从面板进来的 @@ -171,11 +176,13 @@ class EvaluationResultViewModel @Inject constructor( GeometryTools.createGeometry(it).toText() withContext(Dispatchers.Main) { mapController.markerHandle.addMarker(geoPoint, TAG) - mapController.animationHandler.animationByLatLon( - geoPoint.latitude, geoPoint.longitude - ) +// mapController.animationHandler.animationByLatLon( +// geoPoint.latitude, geoPoint.longitude +// ) } - captureLink(geoPoint) + val realm = realmOperateHelper.getSelectTaskRealmInstance() + captureLink(realm, geoPoint) + realm.close() } } else { liveDataQsRecordBean.value?.run { @@ -184,7 +191,7 @@ class EvaluationResultViewModel @Inject constructor( if (linkId.isNotEmpty()) { viewModelScope.launch { val link = realmOperateHelper.queryLink(linkId) - if(link != null){ + if (link != null) { mapController.lineHandler.showLine(link.geometry) } } @@ -200,44 +207,46 @@ class EvaluationResultViewModel @Inject constructor( } } } - + } + viewModelScope.launch(Dispatchers.IO) { getClassTypeList(bean) getProblemLinkList() - realm.close() + addChatMsgEntity(filePath) } - addChatMsgEntity(filePath) } /** * 捕捉道路或新增评测link */ - private suspend fun captureLink(point: GeoPoint) { + private suspend fun captureLink(realm: Realm, point: GeoPoint) { + Log.e("jingo", "捕捉道路SSS") if (liveDataTaskBean.value == null) { liveDataToastMessage.postValue("请先选择所属任务!") return } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { liveDataQsRecordBean.value?.let { - val realm = realmOperateHelper.getSelectTaskRealmInstance() val taskLink = - realmOperateHelper.captureTaskLink(point) + realmOperateHelper.captureTaskLink(point, taskId = liveDataTaskBean.value!!.id) if (taskLink != null) { it.linkId = taskLink.linkPid mapController.lineHandler.showLine(taskLink.geometry) + Log.e("jingo", "捕捉道路EEE 1") return } else { - val linkList = realmOperateHelper.queryLink(realm,point = point) + val linkList = realmOperateHelper.queryLink(realm, point = point) if (linkList.isNotEmpty()) { it.linkId = linkList[0].properties[LinkTable.linkPid] ?: "" mapController.lineHandler.showLine(linkList[0].geometry) + Log.e("jingo", "捕捉道路EEE 2") return } } it.linkId = "" mapController.lineHandler.removeLine() - realm.close() } } + Log.e("jingo", "捕捉道路EEE 3") } /** @@ -245,6 +254,7 @@ class EvaluationResultViewModel @Inject constructor( */ fun getClassTypeList(bean: SignBean? = null) { viewModelScope.launch(Dispatchers.IO) { + Log.e("jingo", "获取问题分类列表 SSS") val list = roomAppDatabase.getScProblemTypeDao().findClassTypeList() list?.let { if (list.isNotEmpty()) { @@ -273,6 +283,7 @@ class EvaluationResultViewModel @Inject constructor( getProblemList(classType) } } + Log.e("jingo", "获取问题分类列表 EEE") } } @@ -281,6 +292,7 @@ class EvaluationResultViewModel @Inject constructor( */ fun getProblemLinkList() { viewModelScope.launch(Dispatchers.IO) { + Log.e("jingo", "获取问题环节列表 SSS") val list = roomAppDatabase.getScRootCauseAnalysisDao().findAllData() list?.let { tl -> if (tl.isNotEmpty()) { @@ -307,6 +319,7 @@ class EvaluationResultViewModel @Inject constructor( liveDataRightTypeList.postValue(rightList) } } + Log.e("jingo", "获取问题环节列表 EEE") } } @@ -314,6 +327,7 @@ class EvaluationResultViewModel @Inject constructor( * 获取问题类型列表和问题现象 */ private suspend fun getProblemList(classType: String) { + Log.e("jingo", "获取问题类型列表和问题现象 SSS") val typeList = roomAppDatabase.getScProblemTypeDao().findProblemTypeList(classType) typeList?.let { tl -> if (tl.isNotEmpty()) { @@ -340,6 +354,7 @@ class EvaluationResultViewModel @Inject constructor( liveDataRightTypeList.postValue(phenomenonRightList) } } + Log.e("jingo", "获取问题类型列表和问题现象 EEE") } /** @@ -404,7 +419,7 @@ class EvaluationResultViewModel @Inject constructor( return@launch } - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() liveDataQsRecordBean.value!!.taskId = liveDataTaskBean.value!!.id liveDataQsRecordBean.value!!.checkTime = DateTimeUtil.getDataTime() liveDataQsRecordBean.value!!.checkUserId = Constant.USER_REAL_NAME @@ -413,6 +428,7 @@ class EvaluationResultViewModel @Inject constructor( } mapController.markerHandle.addOrUpdateQsRecordMark(liveDataQsRecordBean.value!!) liveDataFinish.postValue(true) + realm.refresh() realm.close() } } @@ -428,7 +444,7 @@ class EvaluationResultViewModel @Inject constructor( override fun onClick(dialog: Dialog?, which: Int) { mDialog.dismiss() viewModelScope.launch(Dispatchers.IO) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { val objects = it.where(QsRecordBean::class.java) .equalTo("id", liveDataQsRecordBean.value?.id).findFirst() @@ -453,7 +469,7 @@ class EvaluationResultViewModel @Inject constructor( Log.e("jingo", "捕捉到的要素 id = $id") viewModelScope.launch(Dispatchers.Main) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() val objects = realm.where(QsRecordBean::class.java).equalTo("id", id).findFirst() Log.e("jingo", "查询数据 id= $id") @@ -666,7 +682,7 @@ class EvaluationResultViewModel @Inject constructor( if (oldBean == null) { viewModelScope.launch(Dispatchers.IO) { val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() val objects = realm.where(TaskBean::class.java).equalTo("id", taskId).findFirst() if (objects != null) { diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/note/NoteViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/note/NoteViewModel.kt index f44c1127..20e2dc97 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/note/NoteViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/note/NoteViewModel.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope import com.navinfo.collect.library.data.entity.NoteBean import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.utils.MapParamUtils +import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.ui.dialog.FirstDialog import dagger.hilt.android.lifecycle.HiltViewModel import io.realm.Realm @@ -16,7 +17,8 @@ import javax.inject.Inject @HiltViewModel class NoteViewModel @Inject constructor( - val mapController: NIMapController + private val mapController: NIMapController, + private val realmOperateHelper: RealmOperateHelper ) : ViewModel() { lateinit var canvasView: CanvasView @@ -111,7 +113,7 @@ class NoteViewModel @Inject constructor( } noteBean.taskId = MapParamUtils.getTaskId() mNoteBean = noteBean - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { it.copyToRealmOrUpdate(noteBean) } @@ -138,7 +140,7 @@ class NoteViewModel @Inject constructor( ) { dialog, _ -> dialog.dismiss() viewModelScope.launch(Dispatchers.IO) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { val objects = it.where(NoteBean::class.java) .equalTo("id", mNoteBean!!.id).findFirst() @@ -159,7 +161,7 @@ class NoteViewModel @Inject constructor( */ fun initData(id: String) { viewModelScope.launch(Dispatchers.IO) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { it -> val objects = it.where(NoteBean::class.java) .equalTo("id", id).findFirst() diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt index 9cd42673..7f47834c 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt @@ -1,6 +1,7 @@ package com.navinfo.omqs.ui.fragment.personalcenter import android.Manifest +import android.app.TimePickerDialog import android.content.Intent import android.net.Uri import android.os.Build @@ -8,6 +9,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.TimePicker import android.widget.Toast import androidx.annotation.RequiresApi import androidx.core.view.forEach @@ -19,6 +21,7 @@ import com.blankj.utilcode.util.UriUtils import com.github.k1rakishou.fsaf.FileChooser import com.github.k1rakishou.fsaf.callback.FSAFActivityCallbacks import com.github.k1rakishou.fsaf.callback.FileChooserCallback +import com.google.android.material.timepicker.MaterialTimePicker import com.navinfo.collect.library.enums.DataLayerEnum import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.utils.MapParamUtils @@ -30,6 +33,7 @@ import com.navinfo.omqs.hilt.ImportOMDBHiltFactory import com.navinfo.omqs.tools.CoroutineUtils import com.navinfo.omqs.ui.activity.map.MainViewModel import com.navinfo.omqs.ui.activity.scan.QrCodeActivity +import com.navinfo.omqs.ui.dialog.TimeDialog import com.navinfo.omqs.ui.fragment.BaseFragment import com.permissionx.guolindev.PermissionX import dagger.hilt.android.AndroidEntryPoint @@ -142,7 +146,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit? niMapController.mMapView.vtmMap.eventLayer.enableTilt(Constant.MapRotateEnable) niMapController.mMapView.vtmMap.eventLayer.enableRotation(Constant.MapRotateEnable) Constant.MapRotateEnable = !Constant.MapRotateEnable - if (Constant.MapRotateEnable) { + if (Constant.MapRotateEnable) { val mapPosition: MapPosition = niMapController.mMapView.vtmMap.getMapPosition() mapPosition.setBearing(0f) // 锁定角度,自动将地图旋转到正北方向 @@ -201,13 +205,18 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit? indoorDataListener?.invoke(true) } //导航定位测试 - R.id.personal_center_menu_location_test ->{ -// viewModel. + R.id.personal_center_menu_location_test -> { + val dialog = TimeDialog( + requireContext(), + ) + dialog.show() } } true } + + viewModel.liveDataMessage.observe(viewLifecycleOwner) { ToastUtils.showShort(it) } @@ -228,7 +237,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit? it.title = "锁定地图旋转及视角" } } - R.id.personal_center_menu_catch_all->{ + R.id.personal_center_menu_catch_all -> { if (Constant.CATCH_ALL) { it.title = "关闭全要素捕捉" } else { diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt index bc23fe65..9b5c2775 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/qsrecordlist/QsRecordListViewModel.kt @@ -12,6 +12,7 @@ import com.blankj.utilcode.util.ToastUtils import com.navinfo.collect.library.data.entity.QsRecordBean import com.navinfo.omqs.Constant import com.navinfo.omqs.R +import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.ui.activity.map.MainActivity import dagger.hilt.android.lifecycle.HiltViewModel import io.realm.Realm @@ -21,7 +22,8 @@ import javax.inject.Inject @HiltViewModel class QsRecordListViewModel @Inject constructor( - private val sharedPreferences: SharedPreferences + private val sharedPreferences: SharedPreferences, + private val realmOperateHelper: RealmOperateHelper ) : ViewModel() { val liveDataQSList = MutableLiveData>() @@ -29,7 +31,7 @@ class QsRecordListViewModel @Inject constructor( fun getList(context: Context) { viewModelScope.launch(Dispatchers.IO) { val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() val objects = realm.where(QsRecordBean::class.java).equalTo("taskId",taskId).findAll() liveDataQSList.postValue(realm.copyFromRealm(objects)) realm.close() diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklink/TaskLinkViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklink/TaskLinkViewModel.kt index 6fb382cc..9fabe741 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklink/TaskLinkViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklink/TaskLinkViewModel.kt @@ -2,6 +2,7 @@ package com.navinfo.omqs.ui.fragment.tasklink import android.content.Context import android.content.SharedPreferences +import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -13,6 +14,7 @@ import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.handler.MeasureLayerHandler import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.omqs.Constant +import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.ui.dialog.FirstDialog import dagger.hilt.android.lifecycle.HiltViewModel import io.realm.Realm @@ -25,7 +27,8 @@ import javax.inject.Inject @HiltViewModel class TaskLinkViewModel @Inject constructor( private val mapController: NIMapController, - private val sharedPreferences: SharedPreferences + private val sharedPreferences: SharedPreferences, + private val realmOperateHelper: RealmOperateHelper ) : ViewModel(), SharedPreferences.OnSharedPreferenceChangeListener { /** @@ -120,7 +123,7 @@ class TaskLinkViewModel @Inject constructor( private fun getTaskBean() { viewModelScope.launch(Dispatchers.IO) { val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst() liveDataTaskBean.postValue(res?.let { realm.copyFromRealm(it) }) realm.close() @@ -225,17 +228,19 @@ class TaskLinkViewModel @Inject constructor( } - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { it.copyToRealmOrUpdate(hadLinkDvoBean) it.copyToRealmOrUpdate(task) + Log.e("jingo", "当前任务link数量:${task.hadLinkDvoList.size}") } + realm.refresh() + realm.close() mapController.lineHandler.addTaskLink(hadLinkDvoBean!!) sharedPreferences.edit() .putString(Constant.SHARED_SYNC_TASK_LINK_ID, hadLinkDvoBean!!.linkPid) .apply() liveDataFinish.postValue(true) - realm.close() } } @@ -267,7 +272,7 @@ class TaskLinkViewModel @Inject constructor( */ fun initData(id: String) { viewModelScope.launch(Dispatchers.IO) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() val objects = realm.where(HadLinkDvoBean::class.java).equalTo("linkPid", id) .findFirst() @@ -298,7 +303,7 @@ class TaskLinkViewModel @Inject constructor( if (task != null) { liveDataTaskBean.postValue(realm.copyFromRealm(task)) } - if(objects != null) { + if (objects != null) { hadLinkDvoBean = realm.copyFromRealm(objects) withContext(Dispatchers.Main) { mapController.measureLayerHandler.initPathLine(hadLinkDvoBean?.geometry!!) @@ -324,7 +329,7 @@ class TaskLinkViewModel @Inject constructor( ) { _, _ -> mDialog.dismiss() viewModelScope.launch(Dispatchers.IO) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { //先找到对应的任务 val task = it.where(TaskBean::class.java).equalTo("id", hadLinkDvoBean!!.taskId) diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt index b019f26f..8160f065 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt @@ -166,7 +166,7 @@ class TaskViewModel @Inject constructor( when (val result = networkService.getTaskList(Constant.USER_ID)) { is NetResult.Success -> { if (result.data != null) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { result.data.obj?.let { list -> for (index in list.indices) { @@ -228,7 +228,7 @@ class TaskViewModel @Inject constructor( * 获取任务列表 */ private suspend fun getLocalTaskList() { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() //过滤掉已上传的超过90天的数据 val nowTime: Long = DateTimeUtil.getNowDate().time val beginNowTime: Long = nowTime - 90 * 3600 * 24 * 1000L @@ -365,7 +365,7 @@ class TaskViewModel @Inject constructor( item.reason = text } } - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { r -> r.copyToRealmOrUpdate(it) } @@ -382,7 +382,7 @@ class TaskViewModel @Inject constructor( if (filterTaskListJob != null) filterTaskListJob!!.cancel() filterTaskListJob = viewModelScope.launch(Dispatchers.IO) { delay(500) - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() val list = realm.where(TaskBean::class.java).contains("evaluationTaskName", key).or() .contains("dataVersion", key).or().contains("cityName", key).findAll() liveDataTaskList.postValue(realm.copyFromRealm(list)) @@ -419,7 +419,7 @@ class TaskViewModel @Inject constructor( ) { dialog, _ -> dialog.dismiss() viewModelScope.launch(Dispatchers.IO) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { val objects = it.where(TaskBean::class.java).equalTo("id", taskBean.id).findFirst() @@ -467,7 +467,7 @@ class TaskViewModel @Inject constructor( fun checkUploadTask(context: Context, taskBean: TaskBean) { viewModelScope.launch(Dispatchers.IO) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() var result = 0 val map: MutableMap = HashMap() taskBean.hadLinkDvoList.forEach { hadLinkDvoBean -> @@ -563,7 +563,7 @@ class TaskViewModel @Inject constructor( currentSelectTaskBean!!.hadLinkDvoList.add( hadLinkDvoBean ) - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() realm.executeTransaction { r -> r.copyToRealmOrUpdate(hadLinkDvoBean) r.copyToRealmOrUpdate(currentSelectTaskBean!!) @@ -621,7 +621,7 @@ class TaskViewModel @Inject constructor( dialog.dismiss() viewModelScope.launch(Dispatchers.IO) { - val realm = Realm.getDefaultInstance() + val realm = realmOperateHelper.getRealmDefaultInstance() //重置数据为隐藏 if (hadLinkDvoBean.linkStatus == 2) { diff --git a/app/src/main/res/layout/dialog_time_layout.xml b/app/src/main/res/layout/dialog_time_layout.xml new file mode 100644 index 00000000..96eebb57 --- /dev/null +++ b/app/src/main/res/layout/dialog_time_layout.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file