merge codew

This commit is contained in:
qiji4215 2023-10-27 14:05:59 +08:00
parent f03d8037d2
commit b40a9e2ebb
4 changed files with 516 additions and 558 deletions

View File

@ -21,6 +21,7 @@ import com.navinfo.omqs.Constant.Companion.installTaskid
import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.db.deep.LinkList
import com.navinfo.omqs.hilt.OMDBDataBaseHiltFactory
import com.navinfo.omqs.util.CMLog
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import io.realm.Realm
@ -210,28 +211,36 @@ class ImportOMDBHelper @AssistedInject constructor(
// 遍历解压后的文件,读取该数据返回
// Log.d("ImportOMDBHelper", "表解析===开始时间$dataImportTime===")
CMLog.writeLogtoFile(
ImportOMDBHelper::class.java.name,
"importOmdbZipFile",
"开始"
)
for (importConfig in importConfigList) {
for ((index, currentEntry) in importConfig.tableMap.entries.withIndex()) {
processIndex += 1
// Log.d(
// "ImportOMDBHelper",
// "表解析===开始时间$tableImportTime===${currentEntry.value.table}"
// )
// Log.d(
// "ImportOMDBHelper",
// "表解析===processIndex${processIndex}====${processIndex}/${tableNum}"
// )
// val listResult = mutableListOf<RenderEntity>()
val currentConfig = currentEntry.value
CMLog.writeLogtoFile(
ImportOMDBHelper::class.java.name,
"importOmdbZipFile",
"${currentConfig.table}开始"
)
val txtFile = unZipFiles.find {
it.name == currentConfig.table
}
if (txtFile != null) {
Log.e("qj", "开始遍历文件==${currentConfig.table}")
if (txtFile != null && txtFile.exists()) {
try {
Log.e("qj", "开始遍历文件1")
val fileReader = FileReader(txtFile)
val bufferedReader = BufferedReader(fileReader)
var line: String? = bufferedReader.readLine()
while (line != null) {
if (line == null || line.trim() == "") {
line = bufferedReader.readLine()
@ -239,7 +248,6 @@ class ImportOMDBHelper @AssistedInject constructor(
}
elementIndex += 1
dataIndex += 1
// Log.d("ImportOMDBHelper", "解析第:${index + 1}行")
val map = gson.fromJson<Map<String, Any>>(
line, object : TypeToken<Map<String, Any>>() {}.type
).toMutableMap()
@ -259,53 +267,13 @@ class ImportOMDBHelper @AssistedInject constructor(
renderEntity.zoomMin = map["qi_zoomMin"].toString().toInt()
renderEntity.zoomMax = map["qi_zoomMax"].toString().toInt()
// 在外层记录当前数据的linkPid
if (map.containsKey("linkPid")) {
renderEntity.linkPid =
map["linkPid"].toString().split(",")[0]
} else if (map.containsKey("linkList")) {
val linkList = map["linkList"].toString()
if (!linkList.isNullOrEmpty() && linkList != "null") {
val list: List<LinkList> = gson.fromJson(
linkList,
object : TypeToken<List<LinkList>>() {}.type
)
renderEntity.linkPid = list[0].linkPid
}
}
Log.e(
"jingo",
"安装数据 ${renderEntity.table} ${renderEntity.linkPid} ${elementIndex} ${insertIndex}"
"安装数据 ${renderEntity.table} ${renderEntity.linkPid} $elementIndex $insertIndex"
)
renderEntity.geometry = map["geometry"].toString()
// Log.d("ImportOMDBHelper", "解析===1处理3D")
// 其他数据插入到Properties中
/* if (!currentConfig.is3D) { // 如果是非3d要素则自动将Z轴坐标全部置为0
val coordinates =
renderEntity.wkt?.coordinates?.map { coordinate ->
coordinate.z = 0.0
coordinate
}?.toTypedArray()
var newGeometry: Geometry? = null
if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_POINT) {
newGeometry = GeometryTools.createPoint(
coordinates!![0].x,
coordinates!![0].y
)
} else if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_LINESTRING) {
newGeometry =
GeometryTools.createLineString(coordinates)
} else if (renderEntity.wkt?.geometryType == Geometry.TYPENAME_POLYGON) {
newGeometry =
GeometryTools.createLineString(coordinates)
}
if (newGeometry != null) {
renderEntity.geometry = newGeometry.toString()
}
}*/
// Log.d("ImportOMDBHelper", "解析===2处理3D")
// Log.d("ImportOMDBHelper", "解析===1处理属性")
Log.e("jingo", "map解析开始")
for ((key, value) in map) {
when (value) {
is String -> renderEntity.properties[key] = value
@ -315,24 +283,25 @@ class ImportOMDBHelper @AssistedInject constructor(
is Double -> renderEntity.properties[key] =
value.toDouble().toString()
else -> renderEntity.properties[key] = value.toString()
else -> renderEntity.properties[key] =
value.toString()
}
}
// Log.d("ImportOMDBHelper", "解析===2处理属性")
// Log.d("ImportOMDBHelper", "解析===1处理name")
// 如果properties中不包含name那么自动将要素名称添加进properties中
if (!renderEntity.properties.containsKey("name")) {
renderEntity.properties["name"] = renderEntity.name;
}
// Log.d("ImportOMDBHelper", "解析===2处理name")
// Log.d("ImportOMDBHelper", "解析===1处理杆状物")
Log.e("jingo", "map解析结束")
if (currentConfig.filterData) {
when (renderEntity.code.toInt()) {
DataCodeEnum.OMDB_POLE.code.toInt() -> {
//过滤树类型的杆状物,无需导入到数据库中
val poleType = renderEntity.properties["poleType"]
val poleType =
renderEntity.properties["poleType"]
if (poleType != null && poleType.toInt() == 2) {
line = bufferedReader.readLine()
continue
@ -346,10 +315,6 @@ class ImportOMDBHelper @AssistedInject constructor(
when (boundaryType.toInt()) {
0, 1, 6, 8, 9 -> {
renderEntity.enable = 0
// Log.e(
// "qj",
// "过滤不显示数据${renderEntity.table}"
// )
line = bufferedReader.readLine()
continue
}
@ -364,10 +329,6 @@ class ImportOMDBHelper @AssistedInject constructor(
when (boundaryType.toInt()) {
0, 1, 3, 4, 5, 7, 9 -> {
renderEntity.enable = 0
// Log.e(
// "qj",
// "过滤不显示数据${renderEntity.table}"
// )
line = bufferedReader.readLine()
continue
}
@ -382,10 +343,6 @@ class ImportOMDBHelper @AssistedInject constructor(
when (locationType.toInt()) {
3, 4 -> {
renderEntity.enable = 0
// Log.e(
// "qj",
// "过滤不显示数据${renderEntity.table}"
// )
line = bufferedReader.readLine()
continue
}
@ -398,15 +355,13 @@ class ImportOMDBHelper @AssistedInject constructor(
"linkOut"
)
) {
val linkIn = renderEntity.properties["linkIn"]
val linkOut = renderEntity.properties["linkOut"]
val linkIn =
renderEntity.properties["linkIn"]
val linkOut =
renderEntity.properties["linkOut"]
if (linkIn != null && linkOut != null) {
val checkMsg = "$linkIn$linkOut"
if (resHashMap.containsKey(checkMsg)) {
// Log.e(
// "qj",
// "${renderEntity.name}==过滤交限linkin与linkout相同且存在多条数据"
// )
line = bufferedReader.readLine()
continue
} else {
@ -416,12 +371,8 @@ class ImportOMDBHelper @AssistedInject constructor(
}
}
}
}
// Log.d("ImportOMDBHelper", "解析===2处理杆状物")
// Log.d("ImportOMDBHelper", "解析===1任务路线匹配")
//遍历判断只显示与任务Link相关的任务数据
if (currentConfig.checkLinkId) {
@ -429,10 +380,6 @@ class ImportOMDBHelper @AssistedInject constructor(
val currentLinkPid = renderEntity.linkPid
// Log.d(
// "ImportOMDBHelper",
// "解析===1任务路线匹配${currentLinkPid}"
// )
if (!currentLinkPid.isNullOrEmpty() && currentLinkPid != "null") {
@ -440,57 +387,36 @@ class ImportOMDBHelper @AssistedInject constructor(
if (list.isNotEmpty()) {
// Log.d(
// "ImportOMDBHelper",
// "解析===1任务路线匹配${list.size}"
// )
m@ for (linkPid in list) {
if (hashMap.containsKey(linkPid.toLong())) {
renderEntity.enable = 1
// Log.e(
// "qj",
// "${renderEntity.name}==包括任务link"
// )
break@m
}
}
}
}
} else if (renderEntity.code.toInt() == DataCodeEnum.OMDB_INTERSECTION.code.toInt()||renderEntity.code.toInt() == DataCodeEnum.OMDB_LANE_CONSTRUCTION.code.toInt() && renderEntity.properties.containsKey(
} else if (renderEntity.code.toInt() == DataCodeEnum.OMDB_INTERSECTION.code.toInt() || renderEntity.code.toInt() == DataCodeEnum.OMDB_LANE_CONSTRUCTION.code.toInt() && renderEntity.properties.containsKey(
"linkList"
)
) {
if (renderEntity.properties["linkList"] != null) {
// Log.e(
// "qj",
// "linkList==开始${renderEntity.name}==${renderEntity.properties["linkList"]}}"
// )
val linkList = renderEntity.properties["linkList"]
val linkList =
renderEntity.properties["linkList"]
if (!linkList.isNullOrEmpty() && linkList != "null") {
// Log.e(
// "qj",
// "linkList==${renderEntity.name}==${renderEntity.properties["linkList"]}}"
// )
val list: List<LinkList> = gson.fromJson(
linkList,
object : TypeToken<List<LinkList>>() {}.type
object :
TypeToken<List<LinkList>>() {}.type
)
m@ for (link in list) {
if (hashMap.containsKey(link.linkPid.toLong())) {
renderEntity.enable = 1
// Log.e(
// "qj",
// "${renderEntity.name}==包括任务link"
// )
break@m
}
}
@ -503,32 +429,13 @@ class ImportOMDBHelper @AssistedInject constructor(
}
//过滤掉非任务路线上的数据
if (renderEntity.enable != 1) {
// Log.e(
// "qj",
// "${renderEntity.name}==过滤不包括任务路线上的数据"
// )
line = bufferedReader.readLine()
continue
}
} else {
renderEntity.enable = 1
/* var geometry = GeometryTools.createGeometry(renderEntity.geometry)
if(multipLine.intersects(geometry)){
renderEntity.enable = 1
}else{
val dis = multipLine.distance(GeometryTools.createGeometry(renderEntity.geometry))
if(dis>36){
continue
}else{
renderEntity.enable = 1
}
}*/
// Log.e("qj", "${renderEntity.name}==不包括任务linkPid")
}
// Log.d("ImportOMDBHelper", "解析===2任务路线匹配")
// Log.d("ImportOMDBHelper", "解析===1预处理")
if (currentConfig.catch) {
renderEntity.catchEnable = 1
@ -536,33 +443,23 @@ class ImportOMDBHelper @AssistedInject constructor(
renderEntity.catchEnable = 0
}
// 对renderEntity做预处理后再保存
val resultEntity =
importConfig.transformProperties(renderEntity, realm)
// Log.d("ImportOMDBHelper", "解析===2预处理")
if (resultEntity != null) {
var resultEntity = importConfig.transformProperties(renderEntity, realm)
// Log.d("ImportOMDBHelper", "解析===1子code处理")
//对code编码需要特殊处理 存在多个属性值时渲染优先级SA>PA,存在多个属性值时渲染优先级FRONTAGE>MAIN_SIDE_A CCESS
if (resultEntity != null) {
if (currentConfig.existSubCode) {
when (renderEntity.code.toInt()) {
DataCodeEnum.OMDB_LINK_ATTRIBUTE.code.toInt() -> {
// Log.e("qj", "道路属性===0")
var type = renderEntity.properties["sa"]
if (type != null && type == "1") {
renderEntity.code =
DataCodeEnum.OMDB_LINK_ATTRIBUTE_SA.code
// Log.e("qj", "道路属性===1")
} else {
type = renderEntity.properties["pa"]
if (type != null && type == "1") {
renderEntity.code =
DataCodeEnum.OMDB_LINK_ATTRIBUTE_PA.code
// Log.e("qj", "道路属性===2")
} else {
type =
renderEntity.properties["frontage"]
@ -571,7 +468,6 @@ class ImportOMDBHelper @AssistedInject constructor(
DataCodeEnum.OMDB_LINK_ATTRIBUTE_FORNTAGE.code
renderEntity.zoomMin = 15
renderEntity.zoomMax = 17
// Log.e("qj", "道路属性===3")
} else {
type =
renderEntity.properties["mainSideAccess"]
@ -580,17 +476,12 @@ class ImportOMDBHelper @AssistedInject constructor(
DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code
renderEntity.zoomMin = 15
renderEntity.zoomMax = 17
// Log.e("qj", "道路属性===4")
} else {
renderEntity.enable = 0
renderEntity.zoomMin = 15
renderEntity.zoomMax = 17
// Log.e(
// "qj",
// "过滤不显示数据${renderEntity.table}"
// )
// Log.e("qj", "道路属性===5")
line = bufferedReader.readLine()
line =
bufferedReader.readLine()
continue
}
}
@ -602,15 +493,16 @@ class ImportOMDBHelper @AssistedInject constructor(
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() -> {
/*匝道*/
//*匝道*//*
val formWay =
renderEntity.properties["formOfWay"]
if (formWay != null) {
@ -640,7 +532,7 @@ class ImportOMDBHelper @AssistedInject constructor(
}
DataCodeEnum.OMDB_LINK_FORM1.code.toInt() -> {
/*道路形态1*/
//*道路形态1*//*
val formWay =
renderEntity.properties["formOfWay"]
if (formWay != null) {
@ -658,11 +550,7 @@ class ImportOMDBHelper @AssistedInject constructor(
}
DataCodeEnum.OMDB_LINK_FORM2.code.toInt() -> {
// Log.e(
// "qj",
// "道路形态2${renderEntity.properties["formOfWay"]}"
// )
/*道路形态2*/
//*道路形态2*//*
val formWay =
renderEntity.properties["formOfWay"]
if (formWay != null) {
@ -722,16 +610,13 @@ class ImportOMDBHelper @AssistedInject constructor(
if (renderEntity.table == DataCodeEnum.OMDB_NODE_FORM.name) {//特殊处理因为code相同使用表名判断
//过滤不需要渲染的要素
val formOfWay = renderEntity.properties["formOfWay"]
val formOfWay =
renderEntity.properties["formOfWay"]
if (formOfWay != null && formOfWay.toInt() == 30) {
renderEntity.enable = 2
renderEntity.code =
DataCodeEnum.OMDB_NODE_FORM.code
} else {
// Log.e(
// "qj",
// "过滤不显示数据${renderEntity.table}"
// )
line = bufferedReader.readLine()
continue
}
@ -744,19 +629,13 @@ class ImportOMDBHelper @AssistedInject constructor(
renderEntity.code =
DataCodeEnum.OMDB_NODE_PA.code
} else {
// Log.e(
// "qj",
// "过滤不显示数据${renderEntity.table}"
// )
line = bufferedReader.readLine()
continue
}
}
}
// Log.d("ImportOMDBHelper", "解析===2子code处理")
++insertIndex
Log.e("qj", "统计==${insertIndex}")
//移除该字段,减少数据量
if (renderEntity.properties.containsKey("geometry")) {
@ -780,53 +659,66 @@ class ImportOMDBHelper @AssistedInject constructor(
renderEntity.linkRelation!!.eNodeId =
renderEntity.properties["enodePid"]
}
renderEntity.propertiesDb = StrZipUtil.compress(
gson.toJson(renderEntity.properties).toString()
)
//去掉暂用控件较大的字段多余属性字段
if (renderEntity.properties.containsKey("shapeList")) {
renderEntity.properties.remove("shapeList")
}
var gsonStr = gson.toJson(renderEntity.properties).toString()
renderEntity.propertiesDb = StrZipUtil.compress(gsonStr)
listRenderEntity.add(renderEntity)
}
if (listRenderEntity.size > 10000) {
Log.e(
"jingo", "10000刷新"
)
realm.copyToRealm(listRenderEntity)
if (listRenderEntity.size > 50000) {
Log.e("jingo", "50000刷新")
realm.copyToRealmOrUpdate(listRenderEntity)
realm.commitTransaction()
realm.close()
listRenderEntity.clear()
insertIndex = 0
// Realm.compactRealm(currentInstallTaskConfig)
realm = Realm.getInstance(currentInstallTaskConfig)
realm.beginTransaction()
}
line = bufferedReader.readLine()
}
bufferedReader.close()
} catch (e: Exception) {
CMLog.writeLogtoFile(
ImportOMDBHelper::class.java.name,
"importOmdbZipFile",
"${currentConfig.table}安装异常"
)
}
} else {
CMLog.writeLogtoFile(
ImportOMDBHelper::class.java.name,
"importOmdbZipFile",
"文件不存在"
)
}
// 1个文件发送一次flow流
emit("${processIndex}/${tableNum}")
// Log.d("ImportOMDBHelper", "表解析===2${currentConfig.table}")
// Log.d(
// "ImportOMDBHelper",
// "表解析===结束用时时间${(System.currentTimeMillis() - tableImportTime)}===${currentEntry.value.table}===$elementIndex"
// )
CMLog.writeLogtoFile(
ImportOMDBHelper::class.java.name,
"importOmdbZipFile",
"${currentConfig.table}结束==$elementIndex"
)
elementIndex = 0
// tableImportTime = System.currentTimeMillis()
}
}
CMLog.writeLogtoFile(
ImportOMDBHelper::class.java.name,
"importOmdbZipFile",
"结束===总量$dataIndex"
)
realm.copyToRealm(listRenderEntity)
realm.copyToRealmOrUpdate(listRenderEntity)
realm.commitTransaction()
realm.close()
listRenderEntity.clear()
// Log.d(
// "ImportOMDBHelper",
// "表解析===结束用时时间${(System.currentTimeMillis() - dataImportTime)}===$dataIndex===插入$insertIndex"
// )
Log.e("qj", "安装结束")
} catch (e: Exception) {
if (realm.isInTransaction) {

View File

@ -740,9 +740,11 @@ class ImportPreProcess {
// angleReference.renderEntityId = renderEntity.id
angleReference.name = "${renderEntity.name}车道中线面"
angleReference.table = renderEntity.table
Log.e("jingo", "几何转换开始")
angleReference.geometry =
GeometryTools.createGeometry(renderEntity.geometry).buffer(0.000035)
GeometryTools.createGeometry(renderEntity.geometry).buffer(0.000010)
.toString()//GeometryTools.computeLine(0.000035,0.000035,renderEntity.geometry)
Log.e("jingo", "几何转换结束")
angleReference.properties["qi_table"] = renderEntity.table
angleReference.properties["widthProperties"] = "3"
angleReference.zoomMin = renderEntity.zoomMin
@ -750,9 +752,6 @@ class ImportPreProcess {
angleReference.taskId = renderEntity.taskId
angleReference.enable = renderEntity.enable
val listResult = mutableListOf<ReferenceEntity>()
angleReference.propertiesDb = StrZipUtil.compress(
gson.toJson(angleReference.properties).toString()
)
listResult.add(angleReference)
insertData(listResult)
}

View File

@ -473,6 +473,71 @@ class TaskViewModel @Inject constructor(
}
}
/**
* 重新下载数据任务
*/
fun resetDownload(context: Context, taskBean: TaskBean) {
val mDialog = FirstDialog(context)
mDialog.setTitle("提示?")
mDialog.setMessage("是否重置下载状态,请确认!")
mDialog.setPositiveButton(
"确定"
) { dialog, _ ->
dialog.dismiss()
liveDataCloseTask.postValue(TaskDelStatus.TASK_DEL_STATUS_BEGIN)
viewModelScope.launch(Dispatchers.IO) {
//删除已下载的数据
val fileTemp =
File("${Constant.DOWNLOAD_PATH}${taskBean.evaluationTaskName}_${taskBean.dataVersion}.zip")
if (fileTemp.exists()) {
fileTemp.delete()
}
val taskFileTemp = File(Constant.USER_DATA_PATH + "/${taskBean.id}")
//重命名
if (taskFileTemp.exists()) {
/* var currentSelectTaskFolder = File(Constant.USER_DATA_PATH + "/${taskBean.id}")
var currentSelectTaskConfig =
RealmConfiguration.Builder().directory(currentSelectTaskFolder)
.name("OMQS.realm").encryptionKey(Constant.PASSWORD)
.allowQueriesOnUiThread(true)
.schemaVersion(2).build()
Realm.getInstance(currentSelectTaskConfig).executeTransaction { r ->
//删除已有所有数据
r.delete(RenderEntity::class.java)
r.delete(ReferenceEntity::class.java)
}
Realm.getInstance(currentSelectTaskConfig).close()*/
}
//将下载状态修改已下载
val realm = realmOperateHelper.getRealmDefaultInstance()
taskBean.syncStatus = FileManager.Companion.FileUploadStatus.NONE
taskBean.status = FileManager.Companion.FileDownloadStatus.NONE
realm.beginTransaction()
realm.copyToRealmOrUpdate(taskBean)
realm.commitTransaction()
realm.close()
liveDataCloseTask.postValue(TaskDelStatus.TASK_DEL_STATUS_SUCCESS)
withContext(Dispatchers.Main) {
if (taskBean.id == currentSelectTaskBean?.id ?: 0) {
mapController.layerManagerHandler.updateOMDBVectorTileLayer()
} else {
setSelectTaskBean(taskBean)
}
realmOperateHelper.getRealmDefaultInstance().refresh()
//重新加载数据
getLocalTaskList()
}
}
}
mDialog.setNegativeButton(
"取消"
) { _, _ ->
liveDataCloseTask.postValue(TaskDelStatus.TASK_DEL_STATUS_CANCEL)
mDialog.dismiss()
}
mDialog.show()
}
/**
* 关闭任务
*/
@ -484,7 +549,9 @@ class TaskViewModel @Inject constructor(
"确定"
) { dialog, _ ->
dialog.dismiss()
liveDataCloseTask.postValue(TaskDelStatus.TASK_DEL_STATUS_BEGIN)
viewModelScope.launch(Dispatchers.IO) {
liveDataCloseTask.postValue(TaskDelStatus.TASK_DEL_STATUS_LOADING)
val realm = realmOperateHelper.getRealmDefaultInstance()
realm.executeTransaction {
val objects =
@ -518,14 +585,14 @@ class TaskViewModel @Inject constructor(
FileManager.checkOMDBFileInfo(item)
}
liveDataTaskList.postValue(taskList)
liveDataCloseTask.postValue(true)
liveDataCloseTask.postValue(TaskDelStatus.TASK_DEL_STATUS_SUCCESS)
realm.close()
}
}
mDialog.setNegativeButton(
"取消"
) { _, _ ->
liveDataCloseTask.postValue(false)
liveDataCloseTask.postValue(TaskDelStatus.TASK_DEL_STATUS_CANCEL)
mDialog.dismiss()
}
mDialog.show()

2
vtm

@ -1 +1 @@
Subproject commit c046e788f5c739612a31c308639fca2de639669a
Subproject commit 9e0cc6dcdce04d1082ed6459e8810d6329e8cfdc