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,
"name": "桥",
"catch":true,
"existSubCode": true,
"zoomMin": 15,
"zoomMax": 20,
"transformer": [

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 = "",//问题类型
@ -50,8 +53,8 @@ data class EvaluationInfo(
@SerializedName("evaluationWay")
val evaluationWay: Int = 2,//测评方式 1生产测评 2现场测评 服务字段定义为Integer使用包装类对应无值情况为空
@SerializedName("roadClassfcation")
val roadClassfcation: Int = 1,//道路种别
@SerializedName("roadClassifcation")
val roadClassifcation: Int = 1,//道路种别
@SerializedName("roadFunctionGrade")
val roadFunctionGrade: Int = 1,//道路功能等级

View File

@ -3,6 +3,7 @@ package com.navinfo.omqs.db
import android.content.Context
import android.database.Cursor.*
import android.os.Build
import android.provider.ContactsContract.Data
import android.util.Log
import androidx.annotation.RequiresApi
import com.blankj.utilcode.util.FileIOUtils
@ -318,7 +319,8 @@ class ImportOMDBHelper @AssistedInject constructor(
DataCodeEnum.OMDB_POLE.code.toInt() -> {
//过滤树类型的杆状物,无需导入到数据库中
val poleType = renderEntity.properties["poleType"]
val poleType =
renderEntity.properties["poleType"]
if (poleType != null && poleType.toInt() == 2) {
continue
}
@ -380,8 +382,10 @@ class ImportOMDBHelper @AssistedInject constructor(
"linkOut"
)
) {
var linkIn = renderEntity.properties["linkIn"]
var linkOut = renderEntity.properties["linkOut"]
var linkIn =
renderEntity.properties["linkIn"]
var linkOut =
renderEntity.properties["linkOut"]
if (linkIn != null && linkOut != null) {
var checkMsg = "$linkIn$linkOut"
if (resHashMap.containsKey(checkMsg)) {
@ -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() -> {
/*匝道*/
@ -694,7 +709,8 @@ class ImportOMDBHelper @AssistedInject constructor(
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) {
renderEntity.enable = 2
renderEntity.code =
@ -768,12 +784,16 @@ class ImportOMDBHelper @AssistedInject constructor(
Log.d(
"ImportOMDBHelper",
"表解析===结束用时时间===事物结束"
) }
)
}
}
}
Realm.getInstance(currentInstallTaskConfig).commitTransaction()
Realm.getInstance(currentInstallTaskConfig).close()
Log.d("ImportOMDBHelper", "表解析===结束用时时间${(System.currentTimeMillis() - dataImportTime)}===$dataIndex===插入$insertIndex")
Log.d(
"ImportOMDBHelper",
"表解析===结束用时时间${(System.currentTimeMillis() - dataImportTime)}===$dataIndex===插入$insertIndex"
)
Log.e("qj", "安装结束")
} catch (e: Exception) {
if (Realm.getInstance(currentInstallTaskConfig).isInTransaction) {

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) {
@ -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
}
@ -436,7 +438,7 @@ class RealmOperateHelper() {
val realmQuery = realm.where(clazz)
if (MapParamUtils.getDataLayerEnum() != null) {
if (enableSql) {
var sql =
val sql =
" enable${MapParamUtils.getDataLayerEnum().sql}"
realm.where(clazz).rawPredicate(sql)
}
@ -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,22 @@ 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", "数据下载更新状态 原${}")
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.status = taskBean.status
it.errMsg = taskBean.errMsg
//赋值时间,用于查询过滤
it.operationTime = taskBean.operationTime
r.copyToRealmOrUpdate(it)
taskBean = realm.copyFromRealm(it)
}
}
realm.close()
}
}

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 = "") {
launch {
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)
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 = "",
@ -151,7 +173,7 @@ class TaskUploadScope(
evaluatorName = "",
evaluationDate = "",
evaluationWay = 2,
roadClassfcation = 1,
roadClassifcation = 1,
roadFunctionGrade = 0,
noEvaluationreason = hadLinkDvoBean.reason,
linkLength = 0.0,
@ -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,29 +195,37 @@ 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
var roadClassifcation = 0
var roadFunctionGrade = 0
var dataLevel = 0
if (hadLinkDvoBean.linkInfo != null) {
roadClassfcation = hadLinkDvoBean.linkInfo!!.kind
roadClassifcation = hadLinkDvoBean.linkInfo!!.kind
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,
@ -214,7 +243,7 @@ class TaskUploadScope(
evaluatorName = it.checkUserId,
evaluationDate = it.checkTime,
evaluationWay = evaluationWay,
roadClassfcation = roadClassfcation,
roadClassifcation = roadClassifcation,
roadFunctionGrade = roadFunctionGrade,
noEvaluationreason = "",
linkLength = s.toDouble(),
@ -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
@ -255,7 +285,6 @@ class TaskUploadScope(
change(FileUploadStatus.ERROR)
Log.e("jingo", "数据上传出错 ${e.message}")
} finally {
}
}

View File

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

View File

@ -49,11 +49,9 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm
import io.realm.RealmConfiguration
import io.realm.RealmSet
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.withContext
import org.locationtech.jts.geom.Geometry
import org.oscim.core.GeoPoint
import org.oscim.core.MapPosition
@ -234,6 +232,10 @@ class MainViewModel @Inject constructor(
private var currentMapZoomLevel: Int = 0
//导航轨迹回顾
private var naviLocationTest = false
private var naviLocationTestJob: Job? = null
//导航信息
private var naviEngine: NaviEngine? = null
@ -366,7 +368,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)
@ -487,10 +489,9 @@ class MainViewModel @Inject constructor(
if (currentTaskBean != null) {
var list = mutableListOf<QsRecordBean>()
val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction {
val objects = realmOperateHelper.getRealmTools(QsRecordBean::class.java).findAll()
val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)
val objects = realm.where(QsRecordBean::class.java).equalTo("taskId", id).findAll()
list = realm.copyFromRealm(objects)
}
realm.close()
mapController.markerHandle.removeAllQsMarker()
for (item in list) {
@ -541,7 +542,11 @@ class MainViewModel @Inject constructor(
mapController.locationLayerHandler.niLocationFlow.collect { location ->
//过滤掉无效点
if (!GeometryTools.isCheckError(location.longitude, location.latitude)) {
if (!naviLocationTest && !GeometryTools.isCheckError(
location.longitude,
location.latitude
)
) {
val geometry = GeometryTools.createGeometry(
GeoPoint(
location.latitude, location.longitude
@ -698,7 +703,16 @@ class MainViewModel @Inject constructor(
DataCodeEnum.OMDB_LINK_SPEEDLIMIT.code, //线限速,
DataCodeEnum.OMDB_LINK_DIRECT.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_1.code,
DataCodeEnum.OMDB_BRIDGE_2.code,
DataCodeEnum.OMDB_TUNNEL.code,//隧道
DataCodeEnum.OMDB_ROUNDABOUT.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_DIRECT.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_1.code,//桥
DataCodeEnum.OMDB_BRIDGE_2.code,//桥
DataCodeEnum.OMDB_TUNNEL.code,//隧道
DataCodeEnum.OMDB_ROUNDABOUT.code,//环岛
DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code,//出入口
@ -1610,5 +1634,62 @@ class MainViewModel @Inject constructor(
fun clearMarker() {
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_icon_bg)?.setOnClickListener(this)
}
override fun onDestroy() {

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 {
@ -200,44 +207,46 @@ class EvaluationResultViewModel @Inject constructor(
}
}
}
}
viewModelScope.launch(Dispatchers.IO) {
getClassTypeList(bean)
getProblemLinkList()
realm.close()
}
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)
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,12 +33,13 @@ 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.OnTimeDialogListener
import com.navinfo.omqs.ui.dialog.TimeDialog
import com.navinfo.omqs.ui.fragment.BaseFragment
import com.permissionx.guolindev.PermissionX
import dagger.hilt.android.AndroidEntryPoint
import org.oscim.core.GeoPoint
import org.oscim.core.MapPosition
import java.io.File
import javax.inject.Inject
/**
@ -201,10 +205,25 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
R.id.personal_center_menu_scan_indoor_data -> {
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
}
viewModel.liveDataMessage.observe(viewLifecycleOwner) {
ToastUtils.showShort(it)
}
@ -244,7 +263,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
}
private fun intentTOQRCode() {
var intent = Intent(context, QrCodeActivity::class.java);
val intent = Intent(context, QrCodeActivity::class.java);
startActivity(intent)
}
@ -265,7 +284,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
private fun checkPermission() {
PermissionX.init(this)
.permissions(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
.request { allGranted, grantedList, deniedList ->
.request { allGranted, _, deniedList ->
if (allGranted) {
//所有权限已经授权
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.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()
@ -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) {
@ -179,10 +179,13 @@ class TaskViewModel @Inject constructor(
task.status = item.status
task.currentSize = item.currentSize
task.hadLinkDvoList = item.hadLinkDvoList
task.syncStatus = item.syncStatus
//已上传后不在更新操作时间
if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) {
//赋值时间,用于查询过滤
task.operationTime = DateTimeUtil.getNowDate().time
}else{//已上传数据不做更新
continue
}
} else {
for (hadLink in task.hadLinkDvoList) {
@ -228,7 +231,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 +368,7 @@ class TaskViewModel @Inject constructor(
item.reason = text
}
}
val realm = Realm.getDefaultInstance()
val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction { r ->
r.copyToRealmOrUpdate(it)
}
@ -382,7 +385,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 +422,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 +470,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 +566,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 +624,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

@ -527,7 +527,7 @@ class NaviEngine(
private suspend fun matchingItem() {
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>()
//定位点到要素的路径距离

View File

@ -85,6 +85,13 @@ class SignUtil {
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 -> {
when (data.properties["formOfWay"]) {
"93" -> "普通匝"
@ -110,6 +117,8 @@ class SignUtil {
if (data.properties["multiDigitized"] == "1") "上下线" else " "
}
//桥
DataCodeEnum.OMDB_BRIDGE_1.code,//桥
DataCodeEnum.OMDB_BRIDGE_2.code,//桥
DataCodeEnum.OMDB_BRIDGE.code -> {
when (data.properties["bridgeType"]) {
"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
android:id="@+id/personal_center_menu_version"
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 android:checkableBehavior="single">
<item android:title="小标题">
@ -81,6 +81,12 @@
android:icon="@drawable/baseline_person_24"
android:visible="true"
android:title="测试" />
<item
android:id="@+id/personal_center_menu_location_test"
android:icon="@drawable/baseline_person_24"
android:visible="true"
android:title="导航定位测试"
/>
</menu>
</item>
</group>

View File

@ -2020,7 +2020,7 @@
<!-- 箭头 -->
<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>
<!-- 道路施工 -->

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.NiLocation;
import java.util.List;
import java.util.Set;
@ -50,6 +51,9 @@ public interface INiLocationDao {
@Query("SELECT * FROM niLocation where time>=:startTime and time<=:endTime and taskId=:taskId")
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")
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_LANE_CONSTRUCTION("车道施工", "2090"),
OMDB_BRIDGE("", "2201"),
OMDB_BRIDGE_1("固定桥", "2201-1"),
OMDB_BRIDGE_2("可移动桥", "2201-2"),
OMDB_BRIDGE_3("跨线天桥", "2201-2"),
OMDB_TUNNEL("隧道", "2202"),
OMDB_ROUNDABOUT("环岛", "2204"),
OMDB_LINK_FORM1("道路形态1", "2205"),

View File

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