fix: 合并代码

This commit is contained in:
xiaoyan 2023-10-13 17:40:51 +08:00
commit dbf4108979
29 changed files with 533 additions and 143 deletions

View File

@ -154,6 +154,7 @@
"code": 2201, "code": 2201,
"name": "桥", "name": "桥",
"catch":true, "catch":true,
"existSubCode": true,
"zoomMin": 15, "zoomMin": 15,
"zoomMax": 20, "zoomMax": 20,
"transformer": [ "transformer": [

View File

@ -23,6 +23,9 @@ data class EvaluationInfo(
@SerializedName("markGeometry") @SerializedName("markGeometry")
val markGeometry: String = "",//MARK_几何坐标 val markGeometry: String = "",//MARK_几何坐标
@SerializedName("linkGeometry")
val linkGeometry: String = "",//link_几何坐标
@SerializedName("featureName") @SerializedName("featureName")
val featureName: String = "",//问题类型 val featureName: String = "",//问题类型
@ -50,8 +53,8 @@ data class EvaluationInfo(
@SerializedName("evaluationWay") @SerializedName("evaluationWay")
val evaluationWay: Int = 2,//测评方式 1生产测评 2现场测评 服务字段定义为Integer使用包装类对应无值情况为空 val evaluationWay: Int = 2,//测评方式 1生产测评 2现场测评 服务字段定义为Integer使用包装类对应无值情况为空
@SerializedName("roadClassfcation") @SerializedName("roadClassifcation")
val roadClassfcation: Int = 1,//道路种别 val roadClassifcation: Int = 1,//道路种别
@SerializedName("roadFunctionGrade") @SerializedName("roadFunctionGrade")
val roadFunctionGrade: Int = 1,//道路功能等级 val roadFunctionGrade: Int = 1,//道路功能等级

View File

@ -3,6 +3,7 @@ package com.navinfo.omqs.db
import android.content.Context import android.content.Context
import android.database.Cursor.* import android.database.Cursor.*
import android.os.Build import android.os.Build
import android.provider.ContactsContract.Data
import android.util.Log import android.util.Log
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import com.blankj.utilcode.util.FileIOUtils import com.blankj.utilcode.util.FileIOUtils
@ -234,7 +235,7 @@ class ImportOMDBHelper @AssistedInject constructor(
continue continue
} }
elementIndex += 1 elementIndex += 1
dataIndex +=1 dataIndex += 1
Log.d("ImportOMDBHelper", "解析第:${index + 1}") Log.d("ImportOMDBHelper", "解析第:${index + 1}")
val map = gson.fromJson<Map<String, Any>>( val map = gson.fromJson<Map<String, Any>>(
line, line,
@ -313,12 +314,13 @@ class ImportOMDBHelper @AssistedInject constructor(
Log.d("ImportOMDBHelper", "解析===2处理name") Log.d("ImportOMDBHelper", "解析===2处理name")
Log.d("ImportOMDBHelper", "解析===1处理杆状物") Log.d("ImportOMDBHelper", "解析===1处理杆状物")
if(currentConfig.filterData){ if (currentConfig.filterData) {
when (renderEntity.code.toInt()) { when (renderEntity.code.toInt()) {
DataCodeEnum.OMDB_POLE.code.toInt() -> { DataCodeEnum.OMDB_POLE.code.toInt() -> {
//过滤树类型的杆状物,无需导入到数据库中 //过滤树类型的杆状物,无需导入到数据库中
val poleType = renderEntity.properties["poleType"] val poleType =
renderEntity.properties["poleType"]
if (poleType != null && poleType.toInt() == 2) { if (poleType != null && poleType.toInt() == 2) {
continue continue
} }
@ -346,7 +348,7 @@ class ImportOMDBHelper @AssistedInject constructor(
renderEntity.properties["boundaryType"] renderEntity.properties["boundaryType"]
if (boundaryType != null) { if (boundaryType != null) {
when (boundaryType.toInt()) { when (boundaryType.toInt()) {
0, 1,3,4, 5, 7, 9 -> { 0, 1, 3, 4, 5, 7, 9 -> {
renderEntity.enable = 0 renderEntity.enable = 0
Log.e( Log.e(
"qj", "qj",
@ -380,8 +382,10 @@ class ImportOMDBHelper @AssistedInject constructor(
"linkOut" "linkOut"
) )
) { ) {
var linkIn = renderEntity.properties["linkIn"] var linkIn =
var linkOut = renderEntity.properties["linkOut"] renderEntity.properties["linkIn"]
var linkOut =
renderEntity.properties["linkOut"]
if (linkIn != null && linkOut != null) { if (linkIn != null && linkOut != null) {
var checkMsg = "$linkIn$linkOut" var checkMsg = "$linkIn$linkOut"
if (resHashMap.containsKey(checkMsg)) { if (resHashMap.containsKey(checkMsg)) {
@ -529,7 +533,7 @@ class ImportOMDBHelper @AssistedInject constructor(
Log.d("ImportOMDBHelper", "解析===1子code处理") Log.d("ImportOMDBHelper", "解析===1子code处理")
//对code编码需要特殊处理 存在多个属性值时渲染优先级SA>PA,存在多个属性值时渲染优先级FRONTAGE>MAIN_SIDE_A CCESS //对code编码需要特殊处理 存在多个属性值时渲染优先级SA>PA,存在多个属性值时渲染优先级FRONTAGE>MAIN_SIDE_A CCESS
if(currentConfig.existSubCode){ if (currentConfig.existSubCode) {
when (renderEntity.code.toInt()) { when (renderEntity.code.toInt()) {
DataCodeEnum.OMDB_LINK_ATTRIBUTE.code.toInt() -> { DataCodeEnum.OMDB_LINK_ATTRIBUTE.code.toInt() -> {
@ -580,6 +584,17 @@ class ImportOMDBHelper @AssistedInject constructor(
} }
} }
} }
//桥
DataCodeEnum.OMDB_BRIDGE.code.toInt() -> {
when (renderEntity.properties["bridgeType"]) {
"1" -> renderEntity.code =
DataCodeEnum.OMDB_BRIDGE_1.code
"2" -> renderEntity.code =
DataCodeEnum.OMDB_BRIDGE_2.code
// "3" -> renderEntity.code = DataCodeEnum.OMDB_BRIDGE_3.code
else -> DataCodeEnum.OMDB_BRIDGE.code
}
}
DataCodeEnum.OMDB_RAMP.code.toInt() -> { DataCodeEnum.OMDB_RAMP.code.toInt() -> {
/*匝道*/ /*匝道*/
@ -694,7 +709,8 @@ class ImportOMDBHelper @AssistedInject constructor(
if (renderEntity.table == DataCodeEnum.OMDB_NODE_FORM.name) {//特殊处理因为code相同使用表名判断 if (renderEntity.table == DataCodeEnum.OMDB_NODE_FORM.name) {//特殊处理因为code相同使用表名判断
//过滤不需要渲染的要素 //过滤不需要渲染的要素
var formOfWay = renderEntity.properties["formOfWay"] var formOfWay =
renderEntity.properties["formOfWay"]
if (formOfWay != null && formOfWay.toInt() == 30) { if (formOfWay != null && formOfWay.toInt() == 30) {
renderEntity.enable = 2 renderEntity.enable = 2
renderEntity.code = renderEntity.code =
@ -758,7 +774,7 @@ class ImportOMDBHelper @AssistedInject constructor(
) )
elementIndex = 0 elementIndex = 0
tableImportTime = System.currentTimeMillis() tableImportTime = System.currentTimeMillis()
if(insertIndex%20000==0){ if (insertIndex % 20000 == 0) {
Log.d( Log.d(
"ImportOMDBHelper", "ImportOMDBHelper",
"表解析===结束用时时间===事物开始" "表解析===结束用时时间===事物开始"
@ -768,12 +784,16 @@ class ImportOMDBHelper @AssistedInject constructor(
Log.d( Log.d(
"ImportOMDBHelper", "ImportOMDBHelper",
"表解析===结束用时时间===事物结束" "表解析===结束用时时间===事物结束"
) } )
}
} }
} }
Realm.getInstance(currentInstallTaskConfig).commitTransaction() Realm.getInstance(currentInstallTaskConfig).commitTransaction()
Realm.getInstance(currentInstallTaskConfig).close() Realm.getInstance(currentInstallTaskConfig).close()
Log.d("ImportOMDBHelper", "表解析===结束用时时间${(System.currentTimeMillis() - dataImportTime)}===$dataIndex===插入$insertIndex") Log.d(
"ImportOMDBHelper",
"表解析===结束用时时间${(System.currentTimeMillis() - dataImportTime)}===$dataIndex===插入$insertIndex"
)
Log.e("qj", "安装结束") Log.e("qj", "安装结束")
} catch (e: Exception) { } catch (e: Exception) {
if (Realm.getInstance(currentInstallTaskConfig).isInTransaction) { if (Realm.getInstance(currentInstallTaskConfig).isInTransaction) {

View File

@ -166,6 +166,7 @@ class RealmOperateHelper() {
suspend fun captureTaskLink( suspend fun captureTaskLink(
point: GeoPoint, point: GeoPoint,
taskId: Int,
buffer: Double = DEFAULT_BUFFER, buffer: Double = DEFAULT_BUFFER,
bufferType: BUFFER_TYPE = DEFAULT_BUFFER_TYPE, bufferType: BUFFER_TYPE = DEFAULT_BUFFER_TYPE,
): HadLinkDvoBean? { ): HadLinkDvoBean? {
@ -177,7 +178,7 @@ class RealmOperateHelper() {
) )
val realm = getRealmDefaultInstance() val realm = getRealmDefaultInstance()
try { try {
val realmList = getRealmTools(HadLinkDvoBean::class.java).findAll() val realmList = realm.where(HadLinkDvoBean::class.java).equalTo("taskId", taskId).findAll()
var linkBean: HadLinkDvoBean? = null var linkBean: HadLinkDvoBean? = null
var nearLast: Double = 99999.99 var nearLast: Double = 99999.99
for (link in realmList) { for (link in realmList) {
@ -328,7 +329,7 @@ class RealmOperateHelper() {
* @param bufferType 点位外扩距离的单位 -Meter像素-PIXEL * @param bufferType 点位外扩距离的单位 -Meter像素-PIXEL
* @param sort 是否需要排序 * @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 result = mutableListOf<RenderEntity>()
val realmList = getSelectTaskRealmTools(realm, RenderEntity::class.java, false) val realmList = getSelectTaskRealmTools(realm, RenderEntity::class.java, false)
.notEqualTo("table", DataCodeEnum.OMDB_RD_LINK.name) .notEqualTo("table", DataCodeEnum.OMDB_RD_LINK.name)
@ -415,16 +416,17 @@ class RealmOperateHelper() {
} }
fun getRealmDefaultInstance(): Realm { fun getRealmDefaultInstance(): Realm {
val realm = Realm.getDefaultInstance()
if (isUpdate) { if (isUpdate) {
Log.e("jingo", "数据库更新") Log.e("jingo", "数据库更新")
if (Realm.getDefaultInstance().isInTransaction) { if (realm.isInTransaction) {
Realm.getDefaultInstance().cancelTransaction() realm.cancelTransaction()
Log.e("jingo", "数据库正在事物,需要退出当前事物") Log.e("jingo", "数据库正在事物,需要退出当前事物")
} }
Realm.getDefaultInstance().refresh() realm.refresh()
isUpdate = false; isUpdate = false;
} }
return Realm.getDefaultInstance() return realm
} }
@ -436,7 +438,7 @@ class RealmOperateHelper() {
val realmQuery = realm.where(clazz) val realmQuery = realm.where(clazz)
if (MapParamUtils.getDataLayerEnum() != null) { if (MapParamUtils.getDataLayerEnum() != null) {
if (enableSql) { if (enableSql) {
var sql = val sql =
" enable${MapParamUtils.getDataLayerEnum().sql}" " enable${MapParamUtils.getDataLayerEnum().sql}"
realm.where(clazz).rawPredicate(sql) realm.where(clazz).rawPredicate(sql)
} }
@ -456,16 +458,17 @@ class RealmOperateHelper() {
} }
fun getSelectTaskRealmInstance(): Realm { fun getSelectTaskRealmInstance(): Realm {
val realm = Realm.getInstance(Constant.currentSelectTaskConfig)
if (isUpdate) { if (isUpdate) {
Log.e("jingo", "数据库更新") Log.e("jingo", "数据库更新")
if (Realm.getInstance(Constant.currentSelectTaskConfig).isInTransaction) { if (realm.isInTransaction) {
Realm.getInstance(Constant.currentSelectTaskConfig).cancelTransaction() realm.cancelTransaction()
Log.e("jingo", "数据库正在事物,需要退出当前事物") Log.e("jingo", "数据库正在事物,需要退出当前事物")
} }
Realm.getInstance(Constant.currentSelectTaskConfig).refresh() realm.refresh()
isUpdate = false; isUpdate = false;
} }
return Realm.getInstance(Constant.currentSelectTaskConfig) return realm
} }
fun updateRealmDefaultInstance() { fun updateRealmDefaultInstance() {

View File

@ -44,9 +44,10 @@ class ActivityModule {
fun providesTaskListDownloadManager( fun providesTaskListDownloadManager(
networkServiceAPI: RetrofitNetworkServiceAPI, networkServiceAPI: RetrofitNetworkServiceAPI,
importFactory: ImportOMDBHiltFactory, importFactory: ImportOMDBHiltFactory,
mapController: NIMapController mapController: NIMapController,
realmOperateHelper: RealmOperateHelper,
): TaskDownloadManager = ): TaskDownloadManager =
TaskDownloadManager(importFactory, networkServiceAPI, mapController) TaskDownloadManager(importFactory, networkServiceAPI, mapController, realmOperateHelper)
/** /**
* 注入任务下载 * 注入任务下载
@ -55,8 +56,9 @@ class ActivityModule {
@Provides @Provides
fun providesTaskListUploadManager( fun providesTaskListUploadManager(
networkServiceAPI: RetrofitNetworkServiceAPI, networkServiceAPI: RetrofitNetworkServiceAPI,
realmOperateHelper: RealmOperateHelper,
): TaskUploadManager = ): TaskUploadManager =
TaskUploadManager(networkServiceAPI) TaskUploadManager(networkServiceAPI, realmOperateHelper)
/** /**
* 实验失败这样创建viewmodel不会在activity销毁的时候同时销毁 * 实验失败这样创建viewmodel不会在activity销毁的时候同时销毁

View File

@ -163,11 +163,11 @@ class GlobalModule {
// return RealmCoroutineScope(context) // return RealmCoroutineScope(context)
// } // }
@Singleton // @Singleton
@Provides // @Provides
fun provideRealmDefaultInstance(): Realm { // fun provideRealmDefaultInstance(): Realm {
return Realm.getDefaultInstance() // return Realm.getDefaultInstance()
} // }
@Singleton @Singleton
@Provides @Provides

View File

@ -6,6 +6,7 @@ import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.data.entity.TaskBean
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.hilt.ImportOMDBHiltFactory import com.navinfo.omqs.hilt.ImportOMDBHiltFactory
import com.navinfo.omqs.http.RetrofitNetworkServiceAPI import com.navinfo.omqs.http.RetrofitNetworkServiceAPI
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
@ -18,7 +19,8 @@ import java.util.concurrent.ConcurrentHashMap
class TaskDownloadManager constructor( class TaskDownloadManager constructor(
val importFactory: ImportOMDBHiltFactory, val importFactory: ImportOMDBHiltFactory,
val netApi: RetrofitNetworkServiceAPI, val netApi: RetrofitNetworkServiceAPI,
val mapController: NIMapController val mapController: NIMapController,
val realmOperateHelper: RealmOperateHelper,
) { ) {
lateinit var context: Context lateinit var context: Context
@ -111,7 +113,7 @@ class TaskDownloadManager constructor(
fun addTask(taskBean: TaskBean) { fun addTask(taskBean: TaskBean) {
if (!scopeMap.containsKey(taskBean.id)) { 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.collect.library.utils.MapParamUtils
import com.navinfo.omqs.Constant import com.navinfo.omqs.Constant
import com.navinfo.omqs.db.ImportOMDBHelper import com.navinfo.omqs.db.ImportOMDBHelper
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.tools.FileManager
import com.navinfo.omqs.tools.FileManager.Companion.FileDownloadStatus import com.navinfo.omqs.tools.FileManager.Companion.FileDownloadStatus
import com.navinfo.omqs.util.DateTimeUtil import com.navinfo.omqs.util.DateTimeUtil
@ -22,7 +23,8 @@ import java.io.RandomAccessFile
class TaskDownloadScope( class TaskDownloadScope(
private val downloadManager: TaskDownloadManager, private val downloadManager: TaskDownloadManager,
val taskBean: TaskBean, private val realmOperateHelper: RealmOperateHelper,
var taskBean: TaskBean,
) : ) :
CoroutineScope by CoroutineScope(Dispatchers.IO + CoroutineName("TaskMapDownLoad")) { CoroutineScope by CoroutineScope(Dispatchers.IO + CoroutineName("TaskMapDownLoad")) {
@ -107,10 +109,22 @@ class TaskDownloadScope(
taskBean.operationTime = DateTimeUtil.getNowDate().time taskBean.operationTime = DateTimeUtil.getNowDate().time
downloadData.postValue(taskBean) downloadData.postValue(taskBean)
if (status != FileDownloadStatus.LOADING && status != FileDownloadStatus.IMPORTING) { if (status != FileDownloadStatus.LOADING && status != FileDownloadStatus.IMPORTING) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.beginTransaction() // Log.e("jingo", "数据下载更新状态 原${}")
realm.insertOrUpdate(taskBean) realm.executeTransaction { r ->
realm.commitTransaction() // realm.insertOrUpdate(taskBean)
val newTask =
realm.where(TaskBean::class.java).equalTo("id", taskBean.id).findFirst()
newTask?.let {
it.syncStatus = taskBean.syncStatus
it.status = taskBean.status
it.errMsg = taskBean.errMsg
//赋值时间,用于查询过滤
it.operationTime = taskBean.operationTime
r.copyToRealmOrUpdate(it)
taskBean = realm.copyFromRealm(it)
}
}
realm.close() realm.close()
} }
} }
@ -148,7 +162,7 @@ class TaskDownloadScope(
Log.e("jingo", "数据安装结束") Log.e("jingo", "数据安装结束")
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
//任务与当前一致,需要更新渲染图层 //任务与当前一致,需要更新渲染图层
if(MapParamUtils.getTaskId()==taskBean.id){ if (MapParamUtils.getTaskId() == taskBean.id) {
downloadManager.mapController.layerManagerHandler.updateOMDBVectorTileLayer() downloadManager.mapController.layerManagerHandler.updateOMDBVectorTileLayer()
} }
} }

View File

@ -4,6 +4,7 @@ import android.content.Context
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.data.entity.TaskBean
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.http.RetrofitNetworkServiceAPI import com.navinfo.omqs.http.RetrofitNetworkServiceAPI
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
@ -13,6 +14,7 @@ import java.util.concurrent.ConcurrentHashMap
class TaskUploadManager constructor( class TaskUploadManager constructor(
val netApi: RetrofitNetworkServiceAPI, val netApi: RetrofitNetworkServiceAPI,
val realmOperateHelper: RealmOperateHelper,
) { ) {
lateinit var context: Context lateinit var context: Context
@ -84,7 +86,7 @@ class TaskUploadManager constructor(
fun addTask(taskBean: TaskBean) { fun addTask(taskBean: TaskBean) {
if (!scopeMap.containsKey(taskBean.id)) { 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.collect.library.data.entity.QsRecordBean
import com.navinfo.omqs.bean.EvaluationInfo import com.navinfo.omqs.bean.EvaluationInfo
import com.navinfo.collect.library.data.entity.TaskBean 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.bean.SysUserBean
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.http.DefaultResponse import com.navinfo.omqs.http.DefaultResponse
import com.navinfo.omqs.tools.FileManager.Companion.FileUploadStatus import com.navinfo.omqs.tools.FileManager.Companion.FileUploadStatus
import com.navinfo.omqs.util.DateTimeUtil import com.navinfo.omqs.util.DateTimeUtil
@ -21,7 +23,8 @@ import java.util.*
class TaskUploadScope( class TaskUploadScope(
private val uploadManager: TaskUploadManager, private val uploadManager: TaskUploadManager,
val taskBean: TaskBean, private val realmOperateHelper: RealmOperateHelper,
var taskBean: TaskBean,
) : ) :
CoroutineScope by CoroutineScope(Dispatchers.IO + CoroutineName("OfflineMapUpLoad")) { CoroutineScope by CoroutineScope(Dispatchers.IO + CoroutineName("OfflineMapUpLoad")) {
@ -71,22 +74,35 @@ class TaskUploadScope(
* @param status [OfflineMapCityBean.Status] * @param status [OfflineMapCityBean.Status]
*/ */
private fun change(status: Int, message: String = "") { private fun change(status: Int, message: String = "") {
if (taskBean.syncStatus != status) { launch {
taskBean.syncStatus = status if (taskBean.syncStatus != status) {
taskBean.errMsg = message taskBean.syncStatus = status
//赋值时间,用于查询过滤 taskBean.errMsg = message
taskBean.operationTime = DateTimeUtil.getNowDate().time //赋值时间,用于查询过滤
uploadData.postValue(taskBean) taskBean.operationTime = DateTimeUtil.getNowDate().time
//同步中不进行状态记录,只做界面变更显示 //同步中不进行状态记录,只做界面变更显示
if (status != FileUploadStatus.UPLOADING) { if (status != FileUploadStatus.UPLOADING) {
launch { val realm = realmOperateHelper.getRealmDefaultInstance()
val realm = Realm.getDefaultInstance() Log.e(
realm.executeTransaction { "jingo",
it.copyToRealmOrUpdate(taskBean) "数据上传更新状态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() realm.close()
} }
} }
uploadData.postValue(taskBean)
} }
} }
@ -116,21 +132,26 @@ class TaskUploadScope(
return return
} }
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.refresh()
val bodyList: MutableList<EvaluationInfo> = ArrayList() val bodyList: MutableList<EvaluationInfo> = ArrayList()
if (taskBean.syncStatus == FileUploadStatus.WAITING) { if (taskBean.syncStatus == FileUploadStatus.WAITING) {
change(FileUploadStatus.UPLOADING) 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 -> for (hadLinkDvoBean in taskBean.hadLinkDvoList) {
Log.e("jingo", "数据上传遍历开始") Log.e("jingo", "数据上传遍历开始0${hadLinkDvoBean.linkPid}")
val linkStatus = 1 val linkStatus = 1
//存在原因标记未测评 //存在原因标记未测评
if (hadLinkDvoBean.reason.isNotEmpty()) { if (hadLinkDvoBean.reason.isNotEmpty()) {
Log.e("jingo", "数据上传遍历开始0${hadLinkDvoBean.linkPid}")
//未测评 //未测评
val linkStatus = 0 val linkStatus = 0
@ -142,6 +163,7 @@ class TaskUploadScope(
markId = UUID.randomUUID().toString(),//"20065597" markId = UUID.randomUUID().toString(),//"20065597"
trackPhotoNumber = "", trackPhotoNumber = "",
markGeometry = "", markGeometry = "",
linkGeometry = "",
featureName = "", featureName = "",
problemType = 0, problemType = 0,
problemPhenomenon = "", problemPhenomenon = "",
@ -151,7 +173,7 @@ class TaskUploadScope(
evaluatorName = "", evaluatorName = "",
evaluationDate = "", evaluationDate = "",
evaluationWay = 2, evaluationWay = 2,
roadClassfcation = 1, roadClassifcation = 1,
roadFunctionGrade = 0, roadFunctionGrade = 0,
noEvaluationreason = hadLinkDvoBean.reason, noEvaluationreason = hadLinkDvoBean.reason,
linkLength = 0.0, linkLength = 0.0,
@ -163,8 +185,6 @@ class TaskUploadScope(
} else { } else {
Log.e("jingo", "数据上传遍历开始1${hadLinkDvoBean.linkPid}")
val linkStatus = hadLinkDvoBean.linkStatus val linkStatus = hadLinkDvoBean.linkStatus
var s: String = "%.3f".format(hadLinkDvoBean.length)//保留一位小数(且支持四舍五入) var s: String = "%.3f".format(hadLinkDvoBean.length)//保留一位小数(且支持四舍五入)
@ -175,29 +195,37 @@ class TaskUploadScope(
if (objects != null && objects.size > 0) { if (objects != null && objects.size > 0) {
val copyList = realm.copyFromRealm(objects) val copyList = realm.copyFromRealm(objects)
copyList.forEach { for (it in copyList) {
var problemType = 0 val problemType = when (it.problemType) {
if (it.problemType == "错误") { // "错误" -> {
problemType = 0 // 0
} else if (it.problemType == "多余") { // }
problemType = 1 "多余" -> {
} else if (it.problemType == "遗漏") { 1
problemType = 2 }
"遗漏" -> {
2
}
else -> {
0
}
} }
var roadClassfcation = 0 var roadClassifcation = 0
var roadFunctionGrade = 0 var roadFunctionGrade = 0
var dataLevel = 0 var dataLevel = 0
if (hadLinkDvoBean.linkInfo != null) { if (hadLinkDvoBean.linkInfo != null) {
roadClassfcation = hadLinkDvoBean.linkInfo!!.kind roadClassifcation = hadLinkDvoBean.linkInfo!!.kind
roadFunctionGrade = hadLinkDvoBean.linkInfo!!.functionLevel roadFunctionGrade = hadLinkDvoBean.linkInfo!!.functionLevel
dataLevel = hadLinkDvoBean.linkInfo!!.dataLevel dataLevel = hadLinkDvoBean.linkInfo!!.dataLevel
} }
var linkGeometry = ""
var evaluationWay = 2 if(linkStatus == 3)
linkGeometry = hadLinkDvoBean.geometry
val evaluationWay = 2
val evaluationInfo = EvaluationInfo( val evaluationInfo = EvaluationInfo(
evaluationTaskId = taskBean.id.toString(), evaluationTaskId = taskBean.id.toString(),
linkPid = hadLinkDvoBean.linkPid,//"84207223282277331" linkPid = hadLinkDvoBean.linkPid,//"84207223282277331"
@ -205,6 +233,7 @@ class TaskUploadScope(
markId = it.id, markId = it.id,
trackPhotoNumber = "", trackPhotoNumber = "",
markGeometry = it.geometry, markGeometry = it.geometry,
linkGeometry = linkGeometry,
featureName = it.classCode, featureName = it.classCode,
problemType = problemType, problemType = problemType,
problemPhenomenon = it.phenomenon, problemPhenomenon = it.phenomenon,
@ -214,7 +243,7 @@ class TaskUploadScope(
evaluatorName = it.checkUserId, evaluatorName = it.checkUserId,
evaluationDate = it.checkTime, evaluationDate = it.checkTime,
evaluationWay = evaluationWay, evaluationWay = evaluationWay,
roadClassfcation = roadClassfcation, roadClassifcation = roadClassifcation,
roadFunctionGrade = roadFunctionGrade, roadFunctionGrade = roadFunctionGrade,
noEvaluationreason = "", noEvaluationreason = "",
linkLength = s.toDouble(), linkLength = s.toDouble(),
@ -226,11 +255,11 @@ class TaskUploadScope(
} }
} }
} }
Log.e("jingo", "数据上传遍历结束")
} }
realm.close() realm.close()
Log.e("jingo", "数据上传条数 ${bodyList.size}")
if (bodyList.size > 0) { if (bodyList.size > 0) {
val result = uploadManager.netApi.postRequest(bodyList)// .enqueue(object : val result = uploadManager.netApi.postRequest(bodyList)// .enqueue(object :
// Callback<ResponseBody> { // Callback<ResponseBody> {
if (result.isSuccessful) { if (result.isSuccessful) {
@ -240,6 +269,7 @@ class TaskUploadScope(
change(FileUploadStatus.DONE, "上传成功") change(FileUploadStatus.DONE, "上传成功")
} else { } else {
change(FileUploadStatus.ERROR, "${defaultUserResponse.msg}") change(FileUploadStatus.ERROR, "${defaultUserResponse.msg}")
Log.e("jingo", "数据上传出错 ${defaultUserResponse.msg}")
} }
} else { } else {
// handle the failure // handle the failure
@ -249,13 +279,12 @@ class TaskUploadScope(
change(FileUploadStatus.ERROR) change(FileUploadStatus.ERROR)
} }
} else { } else {
change(FileUploadStatus.NONE,"无可上传数据") change(FileUploadStatus.NONE, "无可上传数据")
} }
} catch (e: Throwable) { } catch (e: Throwable) {
change(FileUploadStatus.ERROR) change(FileUploadStatus.ERROR)
Log.e("jingo", "数据上传出错 ${e.message}") Log.e("jingo", "数据上传出错 ${e.message}")
} finally { } finally {
} }
} }

View File

@ -283,10 +283,13 @@ class LoginViewModel @Inject constructor(
task.status = item.status task.status = item.status
task.currentSize = item.currentSize task.currentSize = item.currentSize
task.hadLinkDvoList = item.hadLinkDvoList task.hadLinkDvoList = item.hadLinkDvoList
task.syncStatus = item.syncStatus
//已上传后不在更新操作时间 //已上传后不在更新操作时间
if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) { if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) {
//赋值时间,用于查询过滤 //赋值时间,用于查询过滤
task.operationTime = DateTimeUtil.getNowDate().time task.operationTime = DateTimeUtil.getNowDate().time
}else{
continue
} }
} else { } else {
for (hadLink in task.hadLinkDvoList) { for (hadLink in task.hadLinkDvoList) {

View File

@ -49,11 +49,9 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm import io.realm.Realm
import io.realm.RealmConfiguration import io.realm.RealmConfiguration
import io.realm.RealmSet import io.realm.RealmSet
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.*
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.withContext
import org.locationtech.jts.geom.Geometry import org.locationtech.jts.geom.Geometry
import org.oscim.core.GeoPoint import org.oscim.core.GeoPoint
import org.oscim.core.MapPosition import org.oscim.core.MapPosition
@ -234,6 +232,10 @@ class MainViewModel @Inject constructor(
private var currentMapZoomLevel: Int = 0 private var currentMapZoomLevel: Int = 0
//导航轨迹回顾
private var naviLocationTest = false
private var naviLocationTestJob: Job? = null
//导航信息 //导航信息
private var naviEngine: NaviEngine? = null private var naviEngine: NaviEngine? = null
@ -366,7 +368,7 @@ class MainViewModel @Inject constructor(
*/ */
private suspend fun getTaskBean() { private suspend fun getTaskBean() {
val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) 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() val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst()
if (res != null) { if (res != null) {
currentTaskBean = realm.copyFromRealm(res) currentTaskBean = realm.copyFromRealm(res)
@ -487,10 +489,9 @@ class MainViewModel @Inject constructor(
if (currentTaskBean != null) { if (currentTaskBean != null) {
var list = mutableListOf<QsRecordBean>() var list = mutableListOf<QsRecordBean>()
val realm = realmOperateHelper.getRealmDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)
val objects = realmOperateHelper.getRealmTools(QsRecordBean::class.java).findAll() val objects = realm.where(QsRecordBean::class.java).equalTo("taskId", id).findAll()
list = realm.copyFromRealm(objects) list = realm.copyFromRealm(objects)
}
realm.close() realm.close()
mapController.markerHandle.removeAllQsMarker() mapController.markerHandle.removeAllQsMarker()
for (item in list) { for (item in list) {
@ -541,7 +542,11 @@ class MainViewModel @Inject constructor(
mapController.locationLayerHandler.niLocationFlow.collect { location -> mapController.locationLayerHandler.niLocationFlow.collect { location ->
//过滤掉无效点 //过滤掉无效点
if (!GeometryTools.isCheckError(location.longitude, location.latitude)) { if (!naviLocationTest && !GeometryTools.isCheckError(
location.longitude,
location.latitude
)
) {
val geometry = GeometryTools.createGeometry( val geometry = GeometryTools.createGeometry(
GeoPoint( GeoPoint(
location.latitude, location.longitude location.latitude, location.longitude
@ -698,7 +703,16 @@ class MainViewModel @Inject constructor(
DataCodeEnum.OMDB_LINK_SPEEDLIMIT.code, //线限速, DataCodeEnum.OMDB_LINK_SPEEDLIMIT.code, //线限速,
DataCodeEnum.OMDB_LINK_DIRECT.code,//道路方向, DataCodeEnum.OMDB_LINK_DIRECT.code,//道路方向,
DataCodeEnum.OMDB_RAMP.code, //匝道 DataCodeEnum.OMDB_RAMP.code, //匝道
DataCodeEnum.OMDB_RAMP_1.code,
DataCodeEnum.OMDB_RAMP_2.code,
DataCodeEnum.OMDB_RAMP_3.code,
DataCodeEnum.OMDB_RAMP_4.code,
DataCodeEnum.OMDB_RAMP_5.code,
DataCodeEnum.OMDB_RAMP_6.code,
DataCodeEnum.OMDB_RAMP_7.code,
DataCodeEnum.OMDB_BRIDGE.code,//桥 DataCodeEnum.OMDB_BRIDGE.code,//桥
DataCodeEnum.OMDB_BRIDGE_1.code,
DataCodeEnum.OMDB_BRIDGE_2.code,
DataCodeEnum.OMDB_TUNNEL.code,//隧道 DataCodeEnum.OMDB_TUNNEL.code,//隧道
DataCodeEnum.OMDB_ROUNDABOUT.code,//环岛 DataCodeEnum.OMDB_ROUNDABOUT.code,//环岛
DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code,//出入口 DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code,//出入口
@ -842,7 +856,17 @@ class MainViewModel @Inject constructor(
DataCodeEnum.OMDB_LINK_SPEEDLIMIT_COND.code,//条件线限速 DataCodeEnum.OMDB_LINK_SPEEDLIMIT_COND.code,//条件线限速
DataCodeEnum.OMDB_LINK_DIRECT.code,//道路方向, DataCodeEnum.OMDB_LINK_DIRECT.code,//道路方向,
DataCodeEnum.OMDB_RAMP.code, //匝道 DataCodeEnum.OMDB_RAMP.code, //匝道
DataCodeEnum.OMDB_RAMP_1.code,
DataCodeEnum.OMDB_RAMP_2.code,
DataCodeEnum.OMDB_RAMP_3.code,
DataCodeEnum.OMDB_RAMP_4.code,
DataCodeEnum.OMDB_RAMP_5.code,
DataCodeEnum.OMDB_RAMP_6.code,
DataCodeEnum.OMDB_RAMP_7.code,
DataCodeEnum.OMDB_BRIDGE.code,//桥 DataCodeEnum.OMDB_BRIDGE.code,//桥
DataCodeEnum.OMDB_BRIDGE_1.code,//桥
DataCodeEnum.OMDB_BRIDGE_2.code,//桥
DataCodeEnum.OMDB_TUNNEL.code,//隧道 DataCodeEnum.OMDB_TUNNEL.code,//隧道
DataCodeEnum.OMDB_ROUNDABOUT.code,//环岛 DataCodeEnum.OMDB_ROUNDABOUT.code,//环岛
DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code,//出入口 DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code,//出入口
@ -1610,5 +1634,62 @@ class MainViewModel @Inject constructor(
fun clearMarker() { fun clearMarker() {
mapController.markerHandle.removeMarker() mapController.markerHandle.removeMarker()
} }
/**
* 导航测试
*/
fun setNaviLocationTestStartTime(time: Long) {
naviLocationTest = true
if (naviLocationTestJob != null && naviLocationTestJob!!.isActive)
naviLocationTestJob!!.cancel()
naviLocationTestJob = viewModelScope.launch(Dispatchers.IO) {
var b = true
val limitCount = 20
var lastTime: Long = time
while (b) {
Log.e("jingo", "下一组定位点起始时间 $lastTime")
val list = traceDataBase.niLocationDao.findListWithStartTime(lastTime, limitCount)
for (location in list) {
if (!naviLocationTest)
break
val nowTime = location.timeStamp.toLong()
if (lastTime != 0L) {
val tempTime = nowTime - lastTime
if (tempTime > 10000) {
liveDataMessage.postValue("下个定位点与当前定位点时间间隔超过10秒(${tempTime}),将直接跳转到下个点")
delay(5000)
} else {
delay(tempTime)
}
}
lastTime = nowTime
withContext(Dispatchers.Main) {
mapController.animationHandler.animationByLatLon(
location.latitude,
location.longitude
)
}
mapController.locationLayerHandler.niLocationFlow.emit(location)
}
if (list.size < limitCount) {
b = false
}
}
}
}
/**
* 停止测试
*/
fun stopNaviLocationTest() {
naviLocationTest = false
if (naviLocationTestJob != null) {
naviLocationTestJob!!.cancel()
}
}
} }

View File

@ -0,0 +1,70 @@
package com.navinfo.omqs.ui.dialog
import android.app.Dialog
import android.content.Context
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.DatePicker
import android.widget.TextView
import android.widget.TimePicker
import androidx.annotation.RequiresApi
import com.navinfo.omqs.R
import java.text.SimpleDateFormat
interface OnTimeDialogListener {
fun selectTime(milliseconds: Long)
}
class TimeDialog(context: Context, val listener: OnTimeDialogListener) : 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)
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onClick(v: View) {
when (v.id) {
R.id.time_dialog_ok -> {
val month = if (dataPicker.month > 8) {
"${dataPicker.month + 1}"
} else {
"0${dataPicker.month + 1}"
}
val hour = if(timePicker.hour < 10){
"0${timePicker.hour}"
}else{
"${timePicker.hour}"
}
val minute = if(timePicker.minute<10){
"0${timePicker.minute}"
}else{
"${timePicker.minute}"
}
val time =
"${dataPicker.year}${month}${dataPicker.dayOfMonth}${hour}${minute}00"
Log.e("jingo", "选择的时间 $time")
val sdf = SimpleDateFormat("yyyyMMddHHmmss")
listener.selectTime(sdf.parse(time).time)
dismiss()
}
R.id.time_dialog_cancel -> {
dismiss()
}
}
}
}

View File

@ -181,6 +181,7 @@ class ConsoleFragment : BaseFragment(), OnClickListener {
*/ */
binding.consoleRoot.findViewById<View>(R.id.console_route_bg)?.setOnClickListener(this) binding.consoleRoot.findViewById<View>(R.id.console_route_bg)?.setOnClickListener(this)
binding.consoleRoot.findViewById<View>(R.id.console_route_icon_bg)?.setOnClickListener(this) binding.consoleRoot.findViewById<View>(R.id.console_route_icon_bg)?.setOnClickListener(this)
} }
override fun onDestroy() { override fun onDestroy() {

View File

@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.navinfo.collect.library.data.entity.QsRecordBean import com.navinfo.collect.library.data.entity.QsRecordBean
import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.data.entity.TaskBean
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.tools.FileManager
import com.navinfo.omqs.util.DateTimeUtil import com.navinfo.omqs.util.DateTimeUtil
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
@ -13,7 +14,9 @@ import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @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 { init {
viewModelScope.launch { viewModelScope.launch {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
val nowTime: Long = DateTimeUtil.getNowDate().time val nowTime: Long = DateTimeUtil.getNowDate().time
val beginNowTime: Long = nowTime - 90 * 3600 * 24 * 1000L val beginNowTime: Long = nowTime - 90 * 3600 * 24 * 1000L
val syncUpload: Int = FileManager.Companion.FileUploadStatus.DONE val syncUpload: Int = FileManager.Companion.FileUploadStatus.DONE

View File

@ -129,8 +129,10 @@ class EvaluationResultViewModel @Inject constructor(
liveDataQsRecordBean.value!!.geometry = liveDataQsRecordBean.value!!.geometry =
GeometryTools.createGeometry(point).toText() GeometryTools.createGeometry(point).toText()
mapController.markerHandle.addMarker(point, TAG) mapController.markerHandle.addMarker(point, TAG)
viewModelScope.launch { viewModelScope.launch(Dispatchers.IO) {
captureLink(point) val realm = realmOperateHelper.getSelectTaskRealmInstance()
captureLink(realm, point)
realm.close()
} }
} }
@ -151,17 +153,20 @@ class EvaluationResultViewModel @Inject constructor(
* 查询数据库获取问题分类 * 查询数据库获取问题分类
*/ */
fun initNewData(bean: SignBean?, filePath: String) { fun initNewData(bean: SignBean?, filePath: String) {
//查询元数据 //查询元数据
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
/** /**
* 获取当前所选的任务 * 获取当前所选的任务
*/ */
val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) 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() val objects = realm.where(TaskBean::class.java).equalTo("id", taskId).findFirst()
if (objects != null) { if (objects != null) {
liveDataTaskBean.postValue(realm.copyFromRealm(objects)) liveDataTaskBean.postValue(realm.copyFromRealm(objects))
} }
realm.close()
//获取当前定位点 //获取当前定位点
val geoPoint = mapController.locationLayerHandler.getCurrentGeoPoint() val geoPoint = mapController.locationLayerHandler.getCurrentGeoPoint()
//如果不是从面板进来的 //如果不是从面板进来的
@ -171,11 +176,13 @@ class EvaluationResultViewModel @Inject constructor(
GeometryTools.createGeometry(it).toText() GeometryTools.createGeometry(it).toText()
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
mapController.markerHandle.addMarker(geoPoint, TAG) mapController.markerHandle.addMarker(geoPoint, TAG)
mapController.animationHandler.animationByLatLon( // mapController.animationHandler.animationByLatLon(
geoPoint.latitude, geoPoint.longitude // geoPoint.latitude, geoPoint.longitude
) // )
} }
captureLink(geoPoint) val realm = realmOperateHelper.getSelectTaskRealmInstance()
captureLink(realm, geoPoint)
realm.close()
} }
} else { } else {
liveDataQsRecordBean.value?.run { liveDataQsRecordBean.value?.run {
@ -184,7 +191,7 @@ class EvaluationResultViewModel @Inject constructor(
if (linkId.isNotEmpty()) { if (linkId.isNotEmpty()) {
viewModelScope.launch { viewModelScope.launch {
val link = realmOperateHelper.queryLink(linkId) val link = realmOperateHelper.queryLink(linkId)
if(link != null){ if (link != null) {
mapController.lineHandler.showLine(link.geometry) mapController.lineHandler.showLine(link.geometry)
} }
} }
@ -200,44 +207,46 @@ class EvaluationResultViewModel @Inject constructor(
} }
} }
} }
}
viewModelScope.launch(Dispatchers.IO) {
getClassTypeList(bean) getClassTypeList(bean)
getProblemLinkList() getProblemLinkList()
realm.close() addChatMsgEntity(filePath)
} }
addChatMsgEntity(filePath)
} }
/** /**
* 捕捉道路或新增评测link * 捕捉道路或新增评测link
*/ */
private suspend fun captureLink(point: GeoPoint) { private suspend fun captureLink(realm: Realm, point: GeoPoint) {
Log.e("jingo", "捕捉道路SSS")
if (liveDataTaskBean.value == null) { if (liveDataTaskBean.value == null) {
liveDataToastMessage.postValue("请先选择所属任务!") liveDataToastMessage.postValue("请先选择所属任务!")
return return
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
liveDataQsRecordBean.value?.let { liveDataQsRecordBean.value?.let {
val realm = realmOperateHelper.getSelectTaskRealmInstance()
val taskLink = val taskLink =
realmOperateHelper.captureTaskLink(point) realmOperateHelper.captureTaskLink(point, taskId = liveDataTaskBean.value!!.id)
if (taskLink != null) { if (taskLink != null) {
it.linkId = taskLink.linkPid it.linkId = taskLink.linkPid
mapController.lineHandler.showLine(taskLink.geometry) mapController.lineHandler.showLine(taskLink.geometry)
Log.e("jingo", "捕捉道路EEE 1")
return return
} else { } else {
val linkList = realmOperateHelper.queryLink(realm,point = point) val linkList = realmOperateHelper.queryLink(realm, point = point)
if (linkList.isNotEmpty()) { if (linkList.isNotEmpty()) {
it.linkId = linkList[0].properties[LinkTable.linkPid] ?: "" it.linkId = linkList[0].properties[LinkTable.linkPid] ?: ""
mapController.lineHandler.showLine(linkList[0].geometry) mapController.lineHandler.showLine(linkList[0].geometry)
Log.e("jingo", "捕捉道路EEE 2")
return return
} }
} }
it.linkId = "" it.linkId = ""
mapController.lineHandler.removeLine() mapController.lineHandler.removeLine()
realm.close()
} }
} }
Log.e("jingo", "捕捉道路EEE 3")
} }
/** /**
@ -245,6 +254,7 @@ class EvaluationResultViewModel @Inject constructor(
*/ */
fun getClassTypeList(bean: SignBean? = null) { fun getClassTypeList(bean: SignBean? = null) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
Log.e("jingo", "获取问题分类列表 SSS")
val list = roomAppDatabase.getScProblemTypeDao().findClassTypeList() val list = roomAppDatabase.getScProblemTypeDao().findClassTypeList()
list?.let { list?.let {
if (list.isNotEmpty()) { if (list.isNotEmpty()) {
@ -273,6 +283,7 @@ class EvaluationResultViewModel @Inject constructor(
getProblemList(classType) getProblemList(classType)
} }
} }
Log.e("jingo", "获取问题分类列表 EEE")
} }
} }
@ -281,6 +292,7 @@ class EvaluationResultViewModel @Inject constructor(
*/ */
fun getProblemLinkList() { fun getProblemLinkList() {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
Log.e("jingo", "获取问题环节列表 SSS")
val list = roomAppDatabase.getScRootCauseAnalysisDao().findAllData() val list = roomAppDatabase.getScRootCauseAnalysisDao().findAllData()
list?.let { tl -> list?.let { tl ->
if (tl.isNotEmpty()) { if (tl.isNotEmpty()) {
@ -307,6 +319,7 @@ class EvaluationResultViewModel @Inject constructor(
liveDataRightTypeList.postValue(rightList) liveDataRightTypeList.postValue(rightList)
} }
} }
Log.e("jingo", "获取问题环节列表 EEE")
} }
} }
@ -314,6 +327,7 @@ class EvaluationResultViewModel @Inject constructor(
* 获取问题类型列表和问题现象 * 获取问题类型列表和问题现象
*/ */
private suspend fun getProblemList(classType: String) { private suspend fun getProblemList(classType: String) {
Log.e("jingo", "获取问题类型列表和问题现象 SSS")
val typeList = roomAppDatabase.getScProblemTypeDao().findProblemTypeList(classType) val typeList = roomAppDatabase.getScProblemTypeDao().findProblemTypeList(classType)
typeList?.let { tl -> typeList?.let { tl ->
if (tl.isNotEmpty()) { if (tl.isNotEmpty()) {
@ -340,6 +354,7 @@ class EvaluationResultViewModel @Inject constructor(
liveDataRightTypeList.postValue(phenomenonRightList) liveDataRightTypeList.postValue(phenomenonRightList)
} }
} }
Log.e("jingo", "获取问题类型列表和问题现象 EEE")
} }
/** /**
@ -404,7 +419,7 @@ class EvaluationResultViewModel @Inject constructor(
return@launch return@launch
} }
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
liveDataQsRecordBean.value!!.taskId = liveDataTaskBean.value!!.id liveDataQsRecordBean.value!!.taskId = liveDataTaskBean.value!!.id
liveDataQsRecordBean.value!!.checkTime = DateTimeUtil.getDataTime() liveDataQsRecordBean.value!!.checkTime = DateTimeUtil.getDataTime()
liveDataQsRecordBean.value!!.checkUserId = Constant.USER_REAL_NAME liveDataQsRecordBean.value!!.checkUserId = Constant.USER_REAL_NAME
@ -413,6 +428,7 @@ class EvaluationResultViewModel @Inject constructor(
} }
mapController.markerHandle.addOrUpdateQsRecordMark(liveDataQsRecordBean.value!!) mapController.markerHandle.addOrUpdateQsRecordMark(liveDataQsRecordBean.value!!)
liveDataFinish.postValue(true) liveDataFinish.postValue(true)
realm.refresh()
realm.close() realm.close()
} }
} }
@ -428,7 +444,7 @@ class EvaluationResultViewModel @Inject constructor(
override fun onClick(dialog: Dialog?, which: Int) { override fun onClick(dialog: Dialog?, which: Int) {
mDialog.dismiss() mDialog.dismiss()
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { realm.executeTransaction {
val objects = it.where(QsRecordBean::class.java) val objects = it.where(QsRecordBean::class.java)
.equalTo("id", liveDataQsRecordBean.value?.id).findFirst() .equalTo("id", liveDataQsRecordBean.value?.id).findFirst()
@ -453,7 +469,7 @@ class EvaluationResultViewModel @Inject constructor(
Log.e("jingo", "捕捉到的要素 id = $id") Log.e("jingo", "捕捉到的要素 id = $id")
viewModelScope.launch(Dispatchers.Main) { viewModelScope.launch(Dispatchers.Main) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
val objects = realm.where(QsRecordBean::class.java).equalTo("id", id).findFirst() val objects = realm.where(QsRecordBean::class.java).equalTo("id", id).findFirst()
Log.e("jingo", "查询数据 id= $id") Log.e("jingo", "查询数据 id= $id")
@ -666,7 +682,7 @@ class EvaluationResultViewModel @Inject constructor(
if (oldBean == null) { if (oldBean == null) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
val objects = val objects =
realm.where(TaskBean::class.java).equalTo("id", taskId).findFirst() realm.where(TaskBean::class.java).equalTo("id", taskId).findFirst()
if (objects != null) { 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.data.entity.NoteBean
import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.utils.MapParamUtils import com.navinfo.collect.library.utils.MapParamUtils
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.ui.dialog.FirstDialog import com.navinfo.omqs.ui.dialog.FirstDialog
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm import io.realm.Realm
@ -16,7 +17,8 @@ import javax.inject.Inject
@HiltViewModel @HiltViewModel
class NoteViewModel @Inject constructor( class NoteViewModel @Inject constructor(
val mapController: NIMapController private val mapController: NIMapController,
private val realmOperateHelper: RealmOperateHelper
) : ViewModel() { ) : ViewModel() {
lateinit var canvasView: CanvasView lateinit var canvasView: CanvasView
@ -111,7 +113,7 @@ class NoteViewModel @Inject constructor(
} }
noteBean.taskId = MapParamUtils.getTaskId() noteBean.taskId = MapParamUtils.getTaskId()
mNoteBean = noteBean mNoteBean = noteBean
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { realm.executeTransaction {
it.copyToRealmOrUpdate(noteBean) it.copyToRealmOrUpdate(noteBean)
} }
@ -138,7 +140,7 @@ class NoteViewModel @Inject constructor(
) { dialog, _ -> ) { dialog, _ ->
dialog.dismiss() dialog.dismiss()
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { realm.executeTransaction {
val objects = it.where(NoteBean::class.java) val objects = it.where(NoteBean::class.java)
.equalTo("id", mNoteBean!!.id).findFirst() .equalTo("id", mNoteBean!!.id).findFirst()
@ -159,7 +161,7 @@ class NoteViewModel @Inject constructor(
*/ */
fun initData(id: String) { fun initData(id: String) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { it -> realm.executeTransaction { it ->
val objects = it.where(NoteBean::class.java) val objects = it.where(NoteBean::class.java)
.equalTo("id", id).findFirst() .equalTo("id", id).findFirst()

View File

@ -1,6 +1,7 @@
package com.navinfo.omqs.ui.fragment.personalcenter package com.navinfo.omqs.ui.fragment.personalcenter
import android.Manifest import android.Manifest
import android.app.TimePickerDialog
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
@ -8,6 +9,7 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TimePicker
import android.widget.Toast import android.widget.Toast
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.view.forEach 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.FileChooser
import com.github.k1rakishou.fsaf.callback.FSAFActivityCallbacks import com.github.k1rakishou.fsaf.callback.FSAFActivityCallbacks
import com.github.k1rakishou.fsaf.callback.FileChooserCallback 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.enums.DataLayerEnum
import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.utils.MapParamUtils import com.navinfo.collect.library.utils.MapParamUtils
@ -30,12 +33,13 @@ import com.navinfo.omqs.hilt.ImportOMDBHiltFactory
import com.navinfo.omqs.tools.CoroutineUtils import com.navinfo.omqs.tools.CoroutineUtils
import com.navinfo.omqs.ui.activity.map.MainViewModel import com.navinfo.omqs.ui.activity.map.MainViewModel
import com.navinfo.omqs.ui.activity.scan.QrCodeActivity import com.navinfo.omqs.ui.activity.scan.QrCodeActivity
import com.navinfo.omqs.ui.dialog.OnTimeDialogListener
import com.navinfo.omqs.ui.dialog.TimeDialog
import com.navinfo.omqs.ui.fragment.BaseFragment import com.navinfo.omqs.ui.fragment.BaseFragment
import com.permissionx.guolindev.PermissionX import com.permissionx.guolindev.PermissionX
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.oscim.core.GeoPoint import org.oscim.core.GeoPoint
import org.oscim.core.MapPosition import org.oscim.core.MapPosition
import java.io.File
import javax.inject.Inject import javax.inject.Inject
/** /**
@ -143,7 +147,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
niMapController.mMapView.vtmMap.eventLayer.enableTilt(Constant.MapRotateEnable) niMapController.mMapView.vtmMap.eventLayer.enableTilt(Constant.MapRotateEnable)
niMapController.mMapView.vtmMap.eventLayer.enableRotation(Constant.MapRotateEnable) niMapController.mMapView.vtmMap.eventLayer.enableRotation(Constant.MapRotateEnable)
Constant.MapRotateEnable = !Constant.MapRotateEnable Constant.MapRotateEnable = !Constant.MapRotateEnable
if (Constant.MapRotateEnable) { if (Constant.MapRotateEnable) {
val mapPosition: MapPosition = val mapPosition: MapPosition =
niMapController.mMapView.vtmMap.getMapPosition() niMapController.mMapView.vtmMap.getMapPosition()
mapPosition.setBearing(0f) // 锁定角度,自动将地图旋转到正北方向 mapPosition.setBearing(0f) // 锁定角度,自动将地图旋转到正北方向
@ -201,10 +205,25 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
R.id.personal_center_menu_scan_indoor_data -> { R.id.personal_center_menu_scan_indoor_data -> {
indoorDataListener?.invoke(true) indoorDataListener?.invoke(true)
} }
//导航定位测试
R.id.personal_center_menu_location_test -> {
viewMainModel.stopNaviLocationTest()
val dialog = TimeDialog(
requireContext(),
object : OnTimeDialogListener {
override fun selectTime(milliseconds: Long) {
viewMainModel.setNaviLocationTestStartTime(milliseconds)
}
}
)
dialog.show()
}
} }
true true
} }
viewModel.liveDataMessage.observe(viewLifecycleOwner) { viewModel.liveDataMessage.observe(viewLifecycleOwner) {
ToastUtils.showShort(it) ToastUtils.showShort(it)
} }
@ -225,7 +244,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
it.title = "锁定地图旋转及视角" it.title = "锁定地图旋转及视角"
} }
} }
R.id.personal_center_menu_catch_all->{ R.id.personal_center_menu_catch_all -> {
if (Constant.CATCH_ALL) { if (Constant.CATCH_ALL) {
it.title = "关闭全要素捕捉" it.title = "关闭全要素捕捉"
} else { } else {
@ -244,7 +263,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
} }
private fun intentTOQRCode() { private fun intentTOQRCode() {
var intent = Intent(context, QrCodeActivity::class.java); val intent = Intent(context, QrCodeActivity::class.java);
startActivity(intent) startActivity(intent)
} }
@ -265,7 +284,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
private fun checkPermission() { private fun checkPermission() {
PermissionX.init(this) PermissionX.init(this)
.permissions(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO) .permissions(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
.request { allGranted, grantedList, deniedList -> .request { allGranted, _, deniedList ->
if (allGranted) { if (allGranted) {
//所有权限已经授权 //所有权限已经授权
Toast.makeText(context, "授权成功", Toast.LENGTH_LONG).show() Toast.makeText(context, "授权成功", Toast.LENGTH_LONG).show()

View File

@ -12,6 +12,7 @@ import com.blankj.utilcode.util.ToastUtils
import com.navinfo.collect.library.data.entity.QsRecordBean import com.navinfo.collect.library.data.entity.QsRecordBean
import com.navinfo.omqs.Constant import com.navinfo.omqs.Constant
import com.navinfo.omqs.R import com.navinfo.omqs.R
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.ui.activity.map.MainActivity import com.navinfo.omqs.ui.activity.map.MainActivity
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm import io.realm.Realm
@ -21,7 +22,8 @@ import javax.inject.Inject
@HiltViewModel @HiltViewModel
class QsRecordListViewModel @Inject constructor( class QsRecordListViewModel @Inject constructor(
private val sharedPreferences: SharedPreferences private val sharedPreferences: SharedPreferences,
private val realmOperateHelper: RealmOperateHelper
) : ViewModel() { ) : ViewModel() {
val liveDataQSList = MutableLiveData<List<QsRecordBean>>() val liveDataQSList = MutableLiveData<List<QsRecordBean>>()
@ -29,7 +31,7 @@ class QsRecordListViewModel @Inject constructor(
fun getList(context: Context) { fun getList(context: Context) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val taskId = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) 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() val objects = realm.where(QsRecordBean::class.java).equalTo("taskId",taskId).findAll()
liveDataQSList.postValue(realm.copyFromRealm(objects)) liveDataQSList.postValue(realm.copyFromRealm(objects))
realm.close() realm.close()

View File

@ -2,6 +2,7 @@ package com.navinfo.omqs.ui.fragment.tasklink
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import android.util.Log
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope 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.map.handler.MeasureLayerHandler
import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.omqs.Constant import com.navinfo.omqs.Constant
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.ui.dialog.FirstDialog import com.navinfo.omqs.ui.dialog.FirstDialog
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm import io.realm.Realm
@ -25,7 +27,8 @@ import javax.inject.Inject
@HiltViewModel @HiltViewModel
class TaskLinkViewModel @Inject constructor( class TaskLinkViewModel @Inject constructor(
private val mapController: NIMapController, private val mapController: NIMapController,
private val sharedPreferences: SharedPreferences private val sharedPreferences: SharedPreferences,
private val realmOperateHelper: RealmOperateHelper
) : ViewModel(), SharedPreferences.OnSharedPreferenceChangeListener { ) : ViewModel(), SharedPreferences.OnSharedPreferenceChangeListener {
/** /**
@ -120,7 +123,7 @@ class TaskLinkViewModel @Inject constructor(
private fun getTaskBean() { private fun getTaskBean() {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) 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() val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst()
liveDataTaskBean.postValue(res?.let { realm.copyFromRealm(it) }) liveDataTaskBean.postValue(res?.let { realm.copyFromRealm(it) })
realm.close() realm.close()
@ -225,17 +228,19 @@ class TaskLinkViewModel @Inject constructor(
} }
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { realm.executeTransaction {
it.copyToRealmOrUpdate(hadLinkDvoBean) it.copyToRealmOrUpdate(hadLinkDvoBean)
it.copyToRealmOrUpdate(task) it.copyToRealmOrUpdate(task)
Log.e("jingo", "当前任务link数量${task.hadLinkDvoList.size}")
} }
realm.refresh()
realm.close()
mapController.lineHandler.addTaskLink(hadLinkDvoBean!!) mapController.lineHandler.addTaskLink(hadLinkDvoBean!!)
sharedPreferences.edit() sharedPreferences.edit()
.putString(Constant.SHARED_SYNC_TASK_LINK_ID, hadLinkDvoBean!!.linkPid) .putString(Constant.SHARED_SYNC_TASK_LINK_ID, hadLinkDvoBean!!.linkPid)
.apply() .apply()
liveDataFinish.postValue(true) liveDataFinish.postValue(true)
realm.close()
} }
} }
@ -267,7 +272,7 @@ class TaskLinkViewModel @Inject constructor(
*/ */
fun initData(id: String) { fun initData(id: String) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
val objects = val objects =
realm.where(HadLinkDvoBean::class.java).equalTo("linkPid", id) realm.where(HadLinkDvoBean::class.java).equalTo("linkPid", id)
.findFirst() .findFirst()
@ -298,7 +303,7 @@ class TaskLinkViewModel @Inject constructor(
if (task != null) { if (task != null) {
liveDataTaskBean.postValue(realm.copyFromRealm(task)) liveDataTaskBean.postValue(realm.copyFromRealm(task))
} }
if(objects != null) { if (objects != null) {
hadLinkDvoBean = realm.copyFromRealm(objects) hadLinkDvoBean = realm.copyFromRealm(objects)
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
mapController.measureLayerHandler.initPathLine(hadLinkDvoBean?.geometry!!) mapController.measureLayerHandler.initPathLine(hadLinkDvoBean?.geometry!!)
@ -324,7 +329,7 @@ class TaskLinkViewModel @Inject constructor(
) { _, _ -> ) { _, _ ->
mDialog.dismiss() mDialog.dismiss()
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { realm.executeTransaction {
//先找到对应的任务 //先找到对应的任务
val task = it.where(TaskBean::class.java).equalTo("id", hadLinkDvoBean!!.taskId) 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)) { when (val result = networkService.getTaskList(Constant.USER_ID)) {
is NetResult.Success -> { is NetResult.Success -> {
if (result.data != null) { if (result.data != null) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { realm.executeTransaction {
result.data.obj?.let { list -> result.data.obj?.let { list ->
for (index in list.indices) { for (index in list.indices) {
@ -179,10 +179,13 @@ class TaskViewModel @Inject constructor(
task.status = item.status task.status = item.status
task.currentSize = item.currentSize task.currentSize = item.currentSize
task.hadLinkDvoList = item.hadLinkDvoList task.hadLinkDvoList = item.hadLinkDvoList
task.syncStatus = item.syncStatus
//已上传后不在更新操作时间 //已上传后不在更新操作时间
if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) { if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) {
//赋值时间,用于查询过滤 //赋值时间,用于查询过滤
task.operationTime = DateTimeUtil.getNowDate().time task.operationTime = DateTimeUtil.getNowDate().time
}else{//已上传数据不做更新
continue
} }
} else { } else {
for (hadLink in task.hadLinkDvoList) { for (hadLink in task.hadLinkDvoList) {
@ -228,7 +231,7 @@ class TaskViewModel @Inject constructor(
* 获取任务列表 * 获取任务列表
*/ */
private suspend fun getLocalTaskList() { private suspend fun getLocalTaskList() {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
//过滤掉已上传的超过90天的数据 //过滤掉已上传的超过90天的数据
val nowTime: Long = DateTimeUtil.getNowDate().time val nowTime: Long = DateTimeUtil.getNowDate().time
val beginNowTime: Long = nowTime - 90 * 3600 * 24 * 1000L val beginNowTime: Long = nowTime - 90 * 3600 * 24 * 1000L
@ -365,7 +368,7 @@ class TaskViewModel @Inject constructor(
item.reason = text item.reason = text
} }
} }
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { r -> realm.executeTransaction { r ->
r.copyToRealmOrUpdate(it) r.copyToRealmOrUpdate(it)
} }
@ -382,7 +385,7 @@ class TaskViewModel @Inject constructor(
if (filterTaskListJob != null) filterTaskListJob!!.cancel() if (filterTaskListJob != null) filterTaskListJob!!.cancel()
filterTaskListJob = viewModelScope.launch(Dispatchers.IO) { filterTaskListJob = viewModelScope.launch(Dispatchers.IO) {
delay(500) delay(500)
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
val list = realm.where(TaskBean::class.java).contains("evaluationTaskName", key).or() val list = realm.where(TaskBean::class.java).contains("evaluationTaskName", key).or()
.contains("dataVersion", key).or().contains("cityName", key).findAll() .contains("dataVersion", key).or().contains("cityName", key).findAll()
liveDataTaskList.postValue(realm.copyFromRealm(list)) liveDataTaskList.postValue(realm.copyFromRealm(list))
@ -419,7 +422,7 @@ class TaskViewModel @Inject constructor(
) { dialog, _ -> ) { dialog, _ ->
dialog.dismiss() dialog.dismiss()
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { realm.executeTransaction {
val objects = val objects =
it.where(TaskBean::class.java).equalTo("id", taskBean.id).findFirst() it.where(TaskBean::class.java).equalTo("id", taskBean.id).findFirst()
@ -467,7 +470,7 @@ class TaskViewModel @Inject constructor(
fun checkUploadTask(context: Context, taskBean: TaskBean) { fun checkUploadTask(context: Context, taskBean: TaskBean) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
var result = 0 var result = 0
val map: MutableMap<TaskBean, Boolean> = HashMap<TaskBean, Boolean>() val map: MutableMap<TaskBean, Boolean> = HashMap<TaskBean, Boolean>()
taskBean.hadLinkDvoList.forEach { hadLinkDvoBean -> taskBean.hadLinkDvoList.forEach { hadLinkDvoBean ->
@ -563,7 +566,7 @@ class TaskViewModel @Inject constructor(
currentSelectTaskBean!!.hadLinkDvoList.add( currentSelectTaskBean!!.hadLinkDvoList.add(
hadLinkDvoBean hadLinkDvoBean
) )
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { r -> realm.executeTransaction { r ->
r.copyToRealmOrUpdate(hadLinkDvoBean) r.copyToRealmOrUpdate(hadLinkDvoBean)
r.copyToRealmOrUpdate(currentSelectTaskBean!!) r.copyToRealmOrUpdate(currentSelectTaskBean!!)
@ -621,7 +624,7 @@ class TaskViewModel @Inject constructor(
dialog.dismiss() dialog.dismiss()
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = realmOperateHelper.getRealmDefaultInstance()
//重置数据为隐藏 //重置数据为隐藏
if (hadLinkDvoBean.linkStatus == 2) { if (hadLinkDvoBean.linkStatus == 2) {

View File

@ -527,7 +527,7 @@ class NaviEngine(
private suspend fun matchingItem() { private suspend fun matchingItem() {
if (routeIndex > -1 && tempRoutList.isNotEmpty() && tempGeometry != null) { if (routeIndex > -1 && tempRoutList.isNotEmpty() && tempGeometry != null) {
Log.e("jingo", "当前${routeIndex} ${tempRoutList[0].startIndexInPath} $footIndex") // Log.e("jingo", "当前${routeIndex} ${tempRoutList[0].startIndexInPath} $footIndex")
//道路前方一定距离范围内的要素信息 //道路前方一定距离范围内的要素信息
val bindingItemList = mutableListOf<NaviRouteItem>() val bindingItemList = mutableListOf<NaviRouteItem>()
//定位点到要素的路径距离 //定位点到要素的路径距离

View File

@ -85,6 +85,13 @@ class SignUtil {
if (data.properties["conAccess"] === "1") "全封闭" else "" if (data.properties["conAccess"] === "1") "全封闭" else ""
} }
//匝道 //匝道
DataCodeEnum.OMDB_RAMP_1.code,
DataCodeEnum.OMDB_RAMP_2.code,
DataCodeEnum.OMDB_RAMP_3.code,
DataCodeEnum.OMDB_RAMP_4.code,
DataCodeEnum.OMDB_RAMP_5.code,
DataCodeEnum.OMDB_RAMP_6.code,
DataCodeEnum.OMDB_RAMP_7.code,
DataCodeEnum.OMDB_RAMP.code -> { DataCodeEnum.OMDB_RAMP.code -> {
when (data.properties["formOfWay"]) { when (data.properties["formOfWay"]) {
"93" -> "普通匝" "93" -> "普通匝"
@ -110,6 +117,8 @@ class SignUtil {
if (data.properties["multiDigitized"] == "1") "上下线" else " " if (data.properties["multiDigitized"] == "1") "上下线" else " "
} }
//桥 //桥
DataCodeEnum.OMDB_BRIDGE_1.code,//桥
DataCodeEnum.OMDB_BRIDGE_2.code,//桥
DataCodeEnum.OMDB_BRIDGE.code -> { DataCodeEnum.OMDB_BRIDGE.code -> {
when (data.properties["bridgeType"]) { when (data.properties["bridgeType"]) {
"1" -> return "固定桥" "1" -> return "固定桥"

View File

@ -0,0 +1,78 @@
<?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"
tools:context="com.navinfo.omqs.ui.dialog.TimeDialog">
<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:textColor="@color/red"
android:text="取消"
android:textSize="18sp" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
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>

View File

@ -59,7 +59,7 @@
<item <item
android:id="@+id/personal_center_menu_version" android:id="@+id/personal_center_menu_version"
android:icon="@drawable/ic_baseline_layers_24" android:icon="@drawable/ic_baseline_layers_24"
android:title="版本23QE4_V1.5.5_20230927_A" /> android:title="版本23QE4_V1.5.6_20230928_A" />
</group> </group>
<group android:checkableBehavior="single"> <group android:checkableBehavior="single">
<item android:title="小标题"> <item android:title="小标题">
@ -81,6 +81,12 @@
android:icon="@drawable/baseline_person_24" android:icon="@drawable/baseline_person_24"
android:visible="true" android:visible="true"
android:title="测试" /> android:title="测试" />
<item
android:id="@+id/personal_center_menu_location_test"
android:icon="@drawable/baseline_person_24"
android:visible="true"
android:title="导航定位测试"
/>
</menu> </menu>
</item> </item>
</group> </group>

View File

@ -2020,7 +2020,7 @@
<!-- 箭头 --> <!-- 箭头 -->
<m v="OMDB_OBJECT_ARROW"> <m v="OMDB_OBJECT_ARROW">
<area use="obj-area" stroke="#ffffff" repeat="false" src="@src" longEdge="n" hasDirect="true"></area> <area use="obj-area" stroke="#00000000" repeat="false" src="@src" longEdge="n" hasDirect="true"></area>
</m> </m>
<!-- 道路施工 --> <!-- 道路施工 -->

View File

@ -9,6 +9,7 @@ import androidx.room.Update;
import com.navinfo.collect.library.data.entity.Element; import com.navinfo.collect.library.data.entity.Element;
import com.navinfo.collect.library.data.entity.NiLocation; import com.navinfo.collect.library.data.entity.NiLocation;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -42,13 +43,16 @@ public interface INiLocationDao {
List<NiLocation> findList(int minx, int maxx, int miny, int maxy); List<NiLocation> findList(int minx, int maxx, int miny, int maxy);
@Query("SELECT * FROM niLocation where tilex>=:minx and tilex<=:maxx and tiley>=:miny and tiley <=:maxy and time>=:startTime and time<=:endTime") @Query("SELECT * FROM niLocation where tilex>=:minx and tilex<=:maxx and tiley>=:miny and tiley <=:maxy and time>=:startTime and time<=:endTime")
List<NiLocation> timeTofindList(int minx, int maxx, int miny, int maxy,long startTime,long endTime); List<NiLocation> timeTofindList(int minx, int maxx, int miny, int maxy, long startTime, long endTime);
@Query("SELECT * FROM niLocation") @Query("SELECT * FROM niLocation")
List<NiLocation> findAll(); List<NiLocation> findAll();
@Query("SELECT * FROM niLocation where time>=:startTime and time<=:endTime and taskId=:taskId") @Query("SELECT * FROM niLocation where time>=:startTime and time<=:endTime and taskId=:taskId")
List<NiLocation> taskIdAndTimeTofindList(String taskId,long startTime,long endTime); List<NiLocation> taskIdAndTimeTofindList(String taskId, long startTime, long endTime);
@Query("SELECT * FROM niLocation where timeStamp>:startTime limit:limit ")
List<NiLocation> findListWithStartTime(long startTime, int limit);
@Query("SELECT * FROM niLocation where taskId =:taskId") @Query("SELECT * FROM niLocation where taskId =:taskId")
List<NiLocation> findToTaskIdAll(String taskId); List<NiLocation> findToTaskIdAll(String taskId);

View File

@ -37,6 +37,9 @@ enum class DataCodeEnum(var tableName: String, var code: String) {
OMDB_RDBOUND_BOUNDARYTYPE("道路边界类型", "2083"), OMDB_RDBOUND_BOUNDARYTYPE("道路边界类型", "2083"),
OMDB_LANE_CONSTRUCTION("车道施工", "2090"), OMDB_LANE_CONSTRUCTION("车道施工", "2090"),
OMDB_BRIDGE("", "2201"), OMDB_BRIDGE("", "2201"),
OMDB_BRIDGE_1("固定桥", "2201-1"),
OMDB_BRIDGE_2("可移动桥", "2201-2"),
OMDB_BRIDGE_3("跨线天桥", "2201-2"),
OMDB_TUNNEL("隧道", "2202"), OMDB_TUNNEL("隧道", "2202"),
OMDB_ROUNDABOUT("环岛", "2204"), OMDB_ROUNDABOUT("环岛", "2204"),
OMDB_LINK_FORM1("道路形态1", "2205"), OMDB_LINK_FORM1("道路形态1", "2205"),

View File

@ -26,6 +26,11 @@ class LocationLayerHandler(context: AppCompatActivity, mapView: NIMapView) :
private var bFirst = true private var bFirst = true
private val mLocationLayer: LocationLayer = LocationLayer(mMapView.vtmMap) private val mLocationLayer: LocationLayer = LocationLayer(mMapView.vtmMap)
private lateinit var locationClient: LocationClient private lateinit var locationClient: LocationClient
/**
* 定位测试
*/
private var naviLocationTest = false
// private var niLocationListener: NiLocationListener by lazy{ // private var niLocationListener: NiLocationListener by lazy{
// //
// } // }
@ -64,6 +69,10 @@ class LocationLayerHandler(context: AppCompatActivity, mapView: NIMapView) :
//获取经纬度坐标类型以LocationClientOption中设置过的坐标类型为准 //获取经纬度坐标类型以LocationClientOption中设置过的坐标类型为准
// val coorType = it.coorType // val coorType = it.coorType
//获取定位类型、定位错误返回码具体信息可参照类参考中BDLocation类中的说明 //获取定位类型、定位错误返回码具体信息可参照类参考中BDLocation类中的说明
//定位测试开始,后续不再处理
if (naviLocationTest)
return@MyLocationListener
val errorCode = it.locType val errorCode = it.locType
mCurrentLocation = it mCurrentLocation = it
mLocationLayer.setPosition(it.latitude, it.longitude, it.radius) mLocationLayer.setPosition(it.latitude, it.longitude, it.radius)
@ -215,7 +224,7 @@ private class MyLocationListener(callback: (BDLocation) -> Unit) : BDAbstractLoc
val call = callback; val call = callback;
override fun onReceiveLocation(location: BDLocation) { override fun onReceiveLocation(location: BDLocation) {
call(location) call(location)
Log.e("jingo", "定位结果:速度=" + location.speed +" 方向=" + location.direction) Log.e("jingo", "定位结果:速度=" + location.speed + " 方向=" + location.direction)
} }
} }