修改数据上传

This commit is contained in:
squallzhjch 2023-10-11 14:13:51 +08:00
parent 887ee7f2e4
commit f3ed4f3f72
18 changed files with 319 additions and 110 deletions

View File

@ -23,6 +23,9 @@ data class EvaluationInfo(
@SerializedName("markGeometry")
val markGeometry: String = "",//MARK_几何坐标
@SerializedName("linkGeometry")
val linkGeometry: String = "",//link_几何坐标
@SerializedName("featureName")
val featureName: String = "",//问题类型

View File

@ -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<RenderEntity> {
suspend fun queryLinkByLinkPid(realm: Realm, linkPid: String): MutableList<RenderEntity> {
val result = mutableListOf<RenderEntity>()
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() {

View File

@ -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销毁的时候同时销毁

View File

@ -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

View File

@ -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)
}
}

View File

@ -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()
}
}

View File

@ -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)
}
}

View File

@ -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<EvaluationInfo> = 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<ResponseBody> {
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 {
}
}

View File

@ -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)

View File

@ -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<TextView>(R.id.time_dialog_ok).setOnClickListener(this)
customFrame.findViewById<TextView>(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()
}
}
}
}

View File

@ -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

View File

@ -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) {

View File

@ -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()

View File

@ -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 {

View File

@ -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<List<QsRecordBean>>()
@ -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()

View File

@ -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)

View File

@ -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<TaskBean, Boolean> = HashMap<TaskBean, Boolean>()
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) {

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="请选择时间"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray"
android:gravity="center"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<DatePicker
android:id="@+id/time_dialog_data_picker"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TimePicker
android:id="@+id/time_dialog_time_picker"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/gray"
android:gravity="center"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/time_dialog_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_weight="1"
android:gravity="center"
android:text="取消"
android:textSize="18sp" />
<View
android:layout_width="1dp"
android:layout_height="20dp"
android:background="@color/gray"
android:gravity="center"
/>
<TextView
android:id="@+id/time_dialog_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_weight="1"
android:gravity="center"
android:textColor="@color/blue"
android:text="确定"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>