Conflicts:
	app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
This commit is contained in:
qiji4215 2023-04-27 09:35:12 +08:00
commit 331380905d
13 changed files with 229 additions and 94 deletions

View File

@ -99,8 +99,13 @@ dependencies {
kapt "androidx.room:room-ktx:2.5.1" kapt "androidx.room:room-ktx:2.5.1"
//excel word等文件 //excel word等文件
implementation 'org.apache.poi:poi:4.0.0' // implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0' // implementation 'org.apache.poi:poi-ooxml:4.0.0'
// implementation 'org.apache.poi:poi-ooxml-schemas:4.0.0'
// implementation 'org.apache.xmlbeans:xmlbeans:3.0.2'
// implementation 'javax.xml.stream:stax-api:1.0-2'
// implementation 'com.bea.xml.stream:com.bea.xml.stream:1.0.0'
implementation 'commons-io:commons-io:2.11.0'
// spatialite文件 // spatialite文件
implementation 'com.github.sevar83:android-spatialite:2.0.1' implementation 'com.github.sevar83:android-spatialite:2.0.1'

View File

@ -79,4 +79,5 @@ class Constant {
const val OMDB_CONFIG = "omdb.config" const val OMDB_CONFIG = "omdb.config"
} }
} }

View File

@ -174,7 +174,7 @@ class ImportOMDBHelper @AssistedInject constructor(
emit("${index + 1}/${importConfig.tables.size}") emit("${index + 1}/${importConfig.tables.size}")
} }
Realm.getDefaultInstance().commitTransaction() Realm.getDefaultInstance().commitTransaction()
emit("OK") emit("finish")
} }
} }

View File

@ -1,15 +1,12 @@
package com.navinfo.omqs.http.taskdownload package com.navinfo.omqs.http.taskdownload
import android.content.Context
import android.util.Log import android.util.Log
import androidx.core.content.ContentProviderCompat.requireContext
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import com.navinfo.omqs.Constant import com.navinfo.omqs.Constant
import com.navinfo.omqs.bean.TaskBean import com.navinfo.omqs.bean.TaskBean
import com.navinfo.omqs.db.ImportOMDBHelper import com.navinfo.omqs.db.ImportOMDBHelper
import com.navinfo.omqs.hilt.ImportOMDBHiltFactory
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 io.realm.Realm import io.realm.Realm
@ -18,7 +15,6 @@ import java.io.File
import java.io.IOException import java.io.IOException
import java.io.InputStream import java.io.InputStream
import java.io.RandomAccessFile import java.io.RandomAccessFile
import javax.inject.Inject
class TaskDownloadScope( class TaskDownloadScope(
private val downloadManager: TaskDownloadManager, private val downloadManager: TaskDownloadManager,
@ -26,9 +22,6 @@ class TaskDownloadScope(
) : ) :
CoroutineScope by CoroutineScope(Dispatchers.IO + CoroutineName("OfflineMapDownLoad")) { CoroutineScope by CoroutineScope(Dispatchers.IO + CoroutineName("OfflineMapDownLoad")) {
@Inject
lateinit var importOMDBHiltFactory: ImportOMDBHiltFactory
/** /**
*下载任务用来取消的 *下载任务用来取消的
*/ */
@ -131,7 +124,7 @@ class TaskDownloadScope(
) )
importOMDBHelper.importOmdbZipFile(importOMDBHelper.omdbFile).collect { importOMDBHelper.importOmdbZipFile(importOMDBHelper.omdbFile).collect {
Log.e("jingo", "数据安装 $it") Log.e("jingo", "数据安装 $it")
if (it == "OK") { if (it == "finish") {
change(FileDownloadStatus.DONE) change(FileDownloadStatus.DONE)
} else { } else {
change(FileDownloadStatus.IMPORTING, it) change(FileDownloadStatus.IMPORTING, it)

View File

@ -0,0 +1,19 @@
package com.navinfo.omqs.tools
class MetadataUtils {
companion object {
object ScProblemTypeTitle {
const val TITLE_ELEMENT_TYPE = "类型"
const val TITLE_ELEMENT_CODE = "要素代码"
const val TITLE_CLASS_TYPE = "要素分类"
const val TITLE_PROBLEM_TYPE = "问题类型·"
const val TITLE_PHENOMENON = "问题现象"
}
object ScRootCauseAnalysisTitle {
const val TITLE_PROBLEM_LINK = "问题环节"
const val TITLE_PROBLEM_CAUSE = "初步问题原因"
}
}
}

View File

@ -164,7 +164,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
override fun onDestroyView() { override fun onDestroyView() {
activity?.apply { activity?.run {
findNavController(R.id.main_activity_middle_fragment).navigateUp() findNavController(R.id.main_activity_middle_fragment).navigateUp()
} }
super.onDestroyView() super.onDestroyView()
@ -178,7 +178,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
when (v.id) { when (v.id) {
//上三项,打开面板 //上三项,打开面板
R.id.evaluation_class_type, R.id.evaluation_problem_type, R.id.evaluation_phenomenon -> { R.id.evaluation_class_type, R.id.evaluation_problem_type, R.id.evaluation_phenomenon -> {
activity?.apply { activity?.run {
val controller = findNavController(R.id.main_activity_middle_fragment) val controller = findNavController(R.id.main_activity_middle_fragment)
controller.currentDestination?.let { controller.currentDestination?.let {
//如果之前页面是空fragment直接打开面板 //如果之前页面是空fragment直接打开面板
@ -201,7 +201,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
} }
//下两项,打开面板 //下两项,打开面板
R.id.evaluation_link, R.id.evaluation_cause -> { R.id.evaluation_link, R.id.evaluation_cause -> {
activity?.apply { activity?.run {
val controller = findNavController(R.id.main_activity_middle_fragment) val controller = findNavController(R.id.main_activity_middle_fragment)
controller.currentDestination?.let { controller.currentDestination?.let {
//如果之前页面是空fragment直接打开面板 //如果之前页面是空fragment直接打开面板

View File

@ -6,6 +6,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.map.NIMapController import com.navinfo.collect.library.map.NIMapController
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.db.RoomAppDatabase import com.navinfo.omqs.db.RoomAppDatabase
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm import io.realm.Realm
@ -17,7 +18,9 @@ import javax.inject.Inject
@HiltViewModel @HiltViewModel
class EvaluationResultViewModel @Inject constructor( class EvaluationResultViewModel @Inject constructor(
private val roomAppDatabase: RoomAppDatabase, private val mapController: NIMapController private val roomAppDatabase: RoomAppDatabase,
private val mapController: NIMapController,
private val realmOperateHelper: RealmOperateHelper,
) : ViewModel() { ) : ViewModel() {
private val markerTitle = "点选marker" private val markerTitle = "点选marker"
@ -50,7 +53,7 @@ class EvaluationResultViewModel @Inject constructor(
init { init {
liveDataQsRecordBean.value = QsRecordBean(id = UUID.randomUUID().toString()) liveDataQsRecordBean.value = QsRecordBean(id = UUID.randomUUID().toString())
Log.e("jingo", "EvaluationResultViewModel 创建了 ${hashCode()}") Log.e("jingo", "EvaluationResultViewModel 创建了 ${hashCode()}")
mapController.markerHandle.apply { mapController.markerHandle.run {
setOnMapClickListener { setOnMapClickListener {
liveDataQsRecordBean.value!!.geometry = it.toGeometry() liveDataQsRecordBean.value!!.geometry = it.toGeometry()
addMarker(it, markerTitle) addMarker(it, markerTitle)

View File

@ -7,7 +7,9 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.blankj.utilcode.util.ToastUtils
import com.blankj.utilcode.util.UriUtils 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
@ -36,6 +38,7 @@ class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks {
@Inject @Inject
lateinit var importOMDBHiltFactory: ImportOMDBHiltFactory lateinit var importOMDBHiltFactory: ImportOMDBHiltFactory
@Inject @Inject
lateinit var niMapController: NIMapController lateinit var niMapController: NIMapController
@ -106,7 +109,8 @@ class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks {
R.id.personal_center_menu_test -> { R.id.personal_center_menu_test -> {
viewModel.readRealmData() viewModel.readRealmData()
// 定位到指定位置 // 定位到指定位置
niMapController.mMapView.vtmMap.animator().animateTo(GeoPoint(30.270367985798032, 113.83513667119433)) niMapController.mMapView.vtmMap.animator()
.animateTo(GeoPoint(30.270367985798032, 113.83513667119433))
} }
R.id.personal_center_menu_task_list -> { R.id.personal_center_menu_task_list -> {
findNavController().navigate(R.id.TaskListFragment) findNavController().navigate(R.id.TaskListFragment)
@ -118,6 +122,10 @@ class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks {
true true
} }
viewModel.liveDataMessage.observe(viewLifecycleOwner) {
ToastUtils.showShort(it)
}
fileChooser.setCallbacks(this@PersonalCenterFragment) fileChooser.setCallbacks(this@PersonalCenterFragment)
} }

View File

@ -1,8 +1,9 @@
package com.navinfo.omqs.ui.fragment.personalcenter package com.navinfo.omqs.ui.fragment.personalcenter
import android.content.Context
import android.net.Uri import android.net.Uri
import android.util.Log import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.blankj.utilcode.util.FileIOUtils import com.blankj.utilcode.util.FileIOUtils
@ -10,35 +11,35 @@ import com.blankj.utilcode.util.UriUtils
import com.blankj.utilcode.util.ZipUtils import com.blankj.utilcode.util.ZipUtils
import com.google.gson.Gson import com.google.gson.Gson
import com.navinfo.collect.library.data.entity.* import com.navinfo.collect.library.data.entity.*
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.omqs.bean.ScProblemTypeBean import com.navinfo.omqs.bean.ScProblemTypeBean
import com.navinfo.omqs.bean.ScRootCauseAnalysisBean import com.navinfo.omqs.bean.ScRootCauseAnalysisBean
import com.navinfo.omqs.db.ImportOMDBHelper import com.navinfo.omqs.db.ImportOMDBHelper
import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.db.RoomAppDatabase import com.navinfo.omqs.db.RoomAppDatabase
import com.navinfo.omqs.tools.MetadataUtils
import com.navinfo.omqs.tools.MetadataUtils.Companion.ScProblemTypeTitle
import com.navinfo.omqs.tools.MetadataUtils.Companion.ScRootCauseAnalysisTitle
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.scopes.ViewModelScoped
import io.realm.Realm
import io.realm.RealmDictionary
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.apache.poi.ss.usermodel.Row import kotlinx.coroutines.withContext
import org.apache.poi.ss.usermodel.WorkbookFactory import org.apache.commons.io.input.BOMInputStream
import org.locationtech.jts.geom.Point import java.io.*
import java.io.File import java.nio.charset.Charset
import java.io.FileInputStream import java.text.Normalizer
import java.io.IOException
import java.io.InputStream
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
class PersonalCenterViewModel @Inject constructor( class PersonalCenterViewModel @Inject constructor(
private val roomAppDatabase: RoomAppDatabase private val roomAppDatabase: RoomAppDatabase
) : ViewModel() { ) : ViewModel() {
@Inject @Inject
lateinit var realmOperateHelper: RealmOperateHelper lateinit var realmOperateHelper: RealmOperateHelper
val liveDataMessage = MutableLiveData<String>()
/** /**
* 导入OMDB数据 * 导入OMDB数据
* */ * */
@ -50,10 +51,14 @@ class PersonalCenterViewModel @Inject constructor(
val hadLinkKindFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_LINK_KIND.txt") val hadLinkKindFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_LINK_KIND.txt")
val hadLinkDirectFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_LINK_DIRECT.txt") val hadLinkDirectFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_LINK_DIRECT.txt")
val hadSpeedLimitFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_SPEEDLIMIT.txt") val hadSpeedLimitFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_SPEEDLIMIT.txt")
val hadSpeedLimitCondFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_SPEEDLIMIT_COND.txt") val hadSpeedLimitCondFile =
val hadSpeedLimitVarFile = File(importOMDBHelper.omdbFile.parentFile, "HAD_SPEEDLIMIT_VAR.txt") File(importOMDBHelper.omdbFile.parentFile, "HAD_SPEEDLIMIT_COND.txt")
val hadSpeedLimitVarFile =
File(importOMDBHelper.omdbFile.parentFile, "HAD_SPEEDLIMIT_VAR.txt")
for (tableName in listOf<String>("HAD_LINK", "HAD_SPEEDLIMIT", "HAD_SPEEDLIMIT_COND", "HAD_SPEEDLIMIT_VAR")/*listOf<String>("HAD_LINK")*/) { for (tableName in listOf<String>(
"HAD_LINK", "HAD_SPEEDLIMIT", "HAD_SPEEDLIMIT_COND", "HAD_SPEEDLIMIT_VAR"
)/*listOf<String>("HAD_LINK")*/) {
importOMDBHelper.getOMDBTableData(tableName).collect { importOMDBHelper.getOMDBTableData(tableName).collect {
for (map in it) { for (map in it) {
if ("HAD_LINK" == tableName) { if ("HAD_LINK" == tableName) {
@ -65,7 +70,9 @@ class PersonalCenterViewModel @Inject constructor(
hadLink.E_NODE_PID = map["E_NODE_PID"].toString() hadLink.E_NODE_PID = map["E_NODE_PID"].toString()
hadLink.GEOMETRY = map["GEOMETRY"].toString() hadLink.GEOMETRY = map["GEOMETRY"].toString()
// 将该数据写入到对应的txt文件 // 将该数据写入到对应的txt文件
FileIOUtils.writeFileFromString(hadLinkFile, gson.toJson(hadLink)+"\r", true) FileIOUtils.writeFileFromString(
hadLinkFile, gson.toJson(hadLink) + "\r", true
)
val hadLinkDirect = HAD_LINK_DIRECT() val hadLinkDirect = HAD_LINK_DIRECT()
hadLinkDirect.LINK_PID = map["LINK_PID"].toString() hadLinkDirect.LINK_PID = map["LINK_PID"].toString()
@ -73,7 +80,9 @@ class PersonalCenterViewModel @Inject constructor(
hadLinkDirect.DIRECT = map["DIRECT"].toString().toInt() hadLinkDirect.DIRECT = map["DIRECT"].toString().toInt()
hadLinkDirect.GEOMETRY = map["GEOMETRY"].toString() hadLinkDirect.GEOMETRY = map["GEOMETRY"].toString()
// 将该数据写入到对应的txt文件 // 将该数据写入到对应的txt文件
FileIOUtils.writeFileFromString(hadLinkDirectFile, gson.toJson(hadLinkDirect)+"\r", true) FileIOUtils.writeFileFromString(
hadLinkDirectFile, gson.toJson(hadLinkDirect) + "\r", true
)
val hadLinkKind = HAD_LINK_KIND() val hadLinkKind = HAD_LINK_KIND()
hadLinkKind.LINK_PID = map["LINK_PID"].toString() hadLinkKind.LINK_PID = map["LINK_PID"].toString()
@ -81,7 +90,9 @@ class PersonalCenterViewModel @Inject constructor(
hadLinkKind.KIND = map["KIND"].toString().toInt() hadLinkKind.KIND = map["KIND"].toString().toInt()
hadLinkKind.GEOMETRY = map["GEOMETRY"].toString() hadLinkKind.GEOMETRY = map["GEOMETRY"].toString()
// 将该数据写入到对应的txt文件 // 将该数据写入到对应的txt文件
FileIOUtils.writeFileFromString(hadLinkKindFile, gson.toJson(hadLinkKind)+"\r", true) FileIOUtils.writeFileFromString(
hadLinkKindFile, gson.toJson(hadLinkKind) + "\r", true
)
} else if ("HAD_SPEEDLIMIT" == tableName) { } else if ("HAD_SPEEDLIMIT" == tableName) {
val hadSpeedlimit = HAD_SPEEDLIMIT() val hadSpeedlimit = HAD_SPEEDLIMIT()
hadSpeedlimit.SPEED_ID = map["SPEED_ID"].toString() hadSpeedlimit.SPEED_ID = map["SPEED_ID"].toString()
@ -93,7 +104,9 @@ class PersonalCenterViewModel @Inject constructor(
hadSpeedlimit.MAX_SPEED = map["MAX_SPEED"].toString().toInt() hadSpeedlimit.MAX_SPEED = map["MAX_SPEED"].toString().toInt()
hadSpeedlimit.MIN_SPEED = map["MIN_SPEED"].toString().toInt() hadSpeedlimit.MIN_SPEED = map["MIN_SPEED"].toString().toInt()
// 将该数据写入到对应的txt文件 // 将该数据写入到对应的txt文件
FileIOUtils.writeFileFromString(hadSpeedLimitFile, gson.toJson(hadSpeedlimit)+"\r", true) FileIOUtils.writeFileFromString(
hadSpeedLimitFile, gson.toJson(hadSpeedlimit) + "\r", true
)
} else if ("HAD_SPEEDLIMIT_COND" == tableName) { } else if ("HAD_SPEEDLIMIT_COND" == tableName) {
val hadSpeedlimitCond = HAD_SPEEDLIMIT_COND() val hadSpeedlimitCond = HAD_SPEEDLIMIT_COND()
hadSpeedlimitCond.SPEED_COND_ID = map["SPEED_COND_ID"].toString() hadSpeedlimitCond.SPEED_COND_ID = map["SPEED_COND_ID"].toString()
@ -103,11 +116,14 @@ class PersonalCenterViewModel @Inject constructor(
hadSpeedlimitCond.DIRECT = map["DIRECT"].toString().toInt() hadSpeedlimitCond.DIRECT = map["DIRECT"].toString().toInt()
hadSpeedlimitCond.SPEED_FLAG = map["SPEED_FLAG"].toString().toInt() hadSpeedlimitCond.SPEED_FLAG = map["SPEED_FLAG"].toString().toInt()
hadSpeedlimitCond.MAX_SPEED = map["MAX_SPEED"].toString().toInt() hadSpeedlimitCond.MAX_SPEED = map["MAX_SPEED"].toString().toInt()
hadSpeedlimitCond.SPEED_DEPENDENT = map["SPEED_DEPENDENT"].toString().toInt() hadSpeedlimitCond.SPEED_DEPENDENT =
map["SPEED_DEPENDENT"].toString().toInt()
hadSpeedlimitCond.VEHICLE_TYPE = map["VEHICLE_TYPE"].toString().toInt() hadSpeedlimitCond.VEHICLE_TYPE = map["VEHICLE_TYPE"].toString().toInt()
hadSpeedlimitCond.VALID_PERIOD = map["VALID_PERIOD"].toString() hadSpeedlimitCond.VALID_PERIOD = map["VALID_PERIOD"].toString()
// 将该数据写入到对应的txt文件 // 将该数据写入到对应的txt文件
FileIOUtils.writeFileFromString(hadSpeedLimitCondFile, gson.toJson(hadSpeedlimitCond)+"\r", true) FileIOUtils.writeFileFromString(
hadSpeedLimitCondFile, gson.toJson(hadSpeedlimitCond) + "\r", true
)
} else if ("HAD_SPEEDLIMIT_VAR" == tableName) { } else if ("HAD_SPEEDLIMIT_VAR" == tableName) {
val hadSpeedlimitVar = HAD_SPEEDLIMIT_VAR() val hadSpeedlimitVar = HAD_SPEEDLIMIT_VAR()
hadSpeedlimitVar.SPEED_VAR_ID = map["SPEED_ID"].toString() hadSpeedlimitVar.SPEED_VAR_ID = map["SPEED_ID"].toString()
@ -117,7 +133,9 @@ class PersonalCenterViewModel @Inject constructor(
hadSpeedlimitVar.DIRECT = map["DIRECT"].toString().toInt() hadSpeedlimitVar.DIRECT = map["DIRECT"].toString().toInt()
hadSpeedlimitVar.LOCATION = map["LOCATION"].toString() hadSpeedlimitVar.LOCATION = map["LOCATION"].toString()
// 将该数据写入到对应的txt文件 // 将该数据写入到对应的txt文件
FileIOUtils.writeFileFromString(hadSpeedLimitVarFile, gson.toJson(hadSpeedlimitVar)+"\r", true) FileIOUtils.writeFileFromString(
hadSpeedLimitVarFile, gson.toJson(hadSpeedlimitVar) + "\r", true
)
} }
// val properties = RealmDictionary<String?>() // val properties = RealmDictionary<String?>()
// for (entry in map.entries) { // for (entry in map.entries) {
@ -129,10 +147,20 @@ class PersonalCenterViewModel @Inject constructor(
} }
} }
} }
ZipUtils.zipFiles(mutableListOf(hadLinkFile, hadLinkKindFile, hadLinkDirectFile, hadSpeedLimitFile, hadSpeedLimitCondFile, hadSpeedLimitVarFile), File(importOMDBHelper.omdbFile.parentFile, "output.zip")) ZipUtils.zipFiles(
mutableListOf(
hadLinkFile,
hadLinkKindFile,
hadLinkDirectFile,
hadSpeedLimitFile,
hadSpeedLimitCondFile,
hadSpeedLimitVarFile
), File(importOMDBHelper.omdbFile.parentFile, "output.zip")
)
Log.d("OMQSApplication", "生成数据完成") Log.d("OMQSApplication", "生成数据完成")
} }
/** /**
* 导入OMDB数据 * 导入OMDB数据
* */ * */
@ -153,51 +181,136 @@ class PersonalCenterViewModel @Inject constructor(
val file = UriUtils.uri2File(uri) val file = UriUtils.uri2File(uri)
val inputStream: InputStream = val inputStream: InputStream =
FileInputStream(file) //getAssets().open("sample.xlsx") FileInputStream(file) //getAssets().open("sample.xlsx")
val workbook = WorkbookFactory.create(inputStream) val bomInputStreamReader = BOMInputStream(inputStream)
//获取所有sheet val inputStreamReader = InputStreamReader(bomInputStreamReader, "UTF-8")
val sheet1 = workbook.getSheet("SC_PROBLEM_TYPE")
sheet1?.let { val bufferedReader = BufferedReader(inputStreamReader)
val rowCount: Int = it.physicalNumberOfRows // 获取行数 var line: String? = null
var index = 0
var elementTypeIndex = -1
var elementCodeIndex = -1
var classTypeIndex = -1
var problemTypeIndex = -1
var phenomenonIndex = -1
var problemLinkIndex = -1
var problemCauseIndex = -1
val list = mutableListOf<ScProblemTypeBean>() val list = mutableListOf<ScProblemTypeBean>()
for (i in 1 until rowCount) { val list2 = mutableListOf<ScRootCauseAnalysisBean>()
val row: Row = it.getRow(i) // 获取行 while (bufferedReader.readLine()?.also { line = it } != null) { // 处理 CSV 文件中的每一行数据
// val cellCount: Int = row.physicalNumberOfCells // 获取列数 val data =
line!!.split(",".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
if (index == 0) {
for (i in data.indices) {
when (data[i]) {
ScProblemTypeTitle.TITLE_ELEMENT_TYPE -> {
elementTypeIndex = i
}
ScProblemTypeTitle.TITLE_ELEMENT_CODE -> {
elementCodeIndex = i
}
ScProblemTypeTitle.TITLE_CLASS_TYPE -> {
classTypeIndex = i
}
ScProblemTypeTitle.TITLE_PROBLEM_TYPE -> {
problemTypeIndex = i
}
ScProblemTypeTitle.TITLE_PHENOMENON -> {
phenomenonIndex = i
}
ScRootCauseAnalysisTitle.TITLE_PROBLEM_LINK -> {
problemLinkIndex = i
}
ScRootCauseAnalysisTitle.TITLE_PROBLEM_CAUSE -> {
problemCauseIndex = i
}
}
}
} else {
if (elementTypeIndex > -1
&& elementCodeIndex > -1
&& classTypeIndex > -1
&& problemTypeIndex > -1
&& phenomenonIndex > -1
) {
val bean = ScProblemTypeBean( val bean = ScProblemTypeBean(
elementType = row.getCell(0).stringCellValue, elementType = data[elementTypeIndex],
elementCode = row.getCell(1).numericCellValue.toString(), elementCode = data[elementCodeIndex],
classType = row.getCell(2).stringCellValue, classType = data[classTypeIndex],
problemType = row.getCell(3).stringCellValue, problemType = data[problemTypeIndex],
phenomenon = row.getCell(4).stringCellValue phenomenon = data[phenomenonIndex],
) )
list.add(bean) list.add(bean)
Log.e("jingo", bean.toString()) } else if (problemLinkIndex > -1 && problemCauseIndex > -1) {
val bean = ScRootCauseAnalysisBean(
problemLink = data[problemLinkIndex],
problemCause = data[problemCauseIndex],
)
list2.add(bean)
} else {
liveDataMessage.postValue("元数据表规格不正确,请仔细核对")
break
} }
}
index++
}
if (list.isNotEmpty()) {
liveDataMessage.postValue("元数据表导入成功")
roomAppDatabase.getScProblemTypeDao().insertOrUpdateList(list) roomAppDatabase.getScProblemTypeDao().insertOrUpdateList(list)
} }
val sheet2 = workbook.getSheet("SC_ROOT_CAUSE_ANALYSIS") if (list2.isNotEmpty()) {
sheet2?.let { liveDataMessage.postValue("元数据表导入成功")
val rowCount: Int = it.physicalNumberOfRows // 获取行数 roomAppDatabase.getScRootCauseAnalysisDao().insertOrUpdateList(list2)
val list = mutableListOf<ScRootCauseAnalysisBean>()
for (i in 1 until rowCount) {
val row: Row = it.getRow(i) // 获取行
val cellCount: Int = row.physicalNumberOfCells // 获取列数
if (cellCount == 2) {
val bean = ScRootCauseAnalysisBean()
bean.problemLink = row.getCell(0).stringCellValue
bean.problemCause = row.getCell(1).stringCellValue
list.add(bean)
Log.e("jingo", bean.toString())
} }
}
roomAppDatabase.getScRootCauseAnalysisDao().insertOrUpdateList(list) bufferedReader.close()
} inputStreamReader.close()
workbook.close() inputStream.close()
// val workbook = WorkbookFactory.create(inputStream)
// //获取所有sheet
// val sheet1 = workbook.getSheet("SC_PROBLEM_TYPE")
// sheet1?.let {
// val rowCount: Int = it.physicalNumberOfRows // 获取行数
// val list = mutableListOf<ScProblemTypeBean>()
// for (i in 1 until rowCount) {
// val row: Row = it.getRow(i) // 获取行
//// val cellCount: Int = row.physicalNumberOfCells // 获取列数
// val bean = ScProblemTypeBean(
// elementType = row.getCell(0).stringCellValue,
// elementCode = row.getCell(1).numericCellValue.toString(),
// classType = row.getCell(2).stringCellValue,
// problemType = row.getCell(3).stringCellValue,
// phenomenon = row.getCell(4).stringCellValue
// )
// list.add(bean)
// Log.e("jingo", bean.toString())
// }
// roomAppDatabase.getScProblemTypeDao().insertOrUpdateList(list)
// }
// val sheet2 = workbook.getSheet("SC_ROOT_CAUSE_ANALYSIS")
// sheet2?.let {
// val rowCount: Int = it.physicalNumberOfRows // 获取行数
// val list = mutableListOf<ScRootCauseAnalysisBean>()
// for (i in 1 until rowCount) {
// val row: Row = it.getRow(i) // 获取行
// val cellCount: Int = row.physicalNumberOfCells // 获取列数
// if (cellCount == 2) {
// val bean = ScRootCauseAnalysisBean()
// bean.problemLink = row.getCell(0).stringCellValue
// bean.problemCause = row.getCell(1).stringCellValue
// list.add(bean)
// Log.e("jingo", bean.toString())
// }
// }
// roomAppDatabase.getScRootCauseAnalysisDao().insertOrUpdateList(list)
// }
// workbook.close()
} catch (e: IOException) { } catch (e: IOException) {
e.printStackTrace() e.printStackTrace()
Log.e("jingo", e.toString()) Log.e("jingo", e.toString())
liveDataMessage.postValue("元数据表导入失败!$e")
} }
} }
} }
fun readRealmData() { fun readRealmData() {

View File

@ -8,18 +8,12 @@ import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView.VERTICAL
import com.blankj.utilcode.util.ToastUtils
import com.navinfo.omqs.R import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentQsRecordListBinding import com.navinfo.omqs.databinding.FragmentQsRecordListBinding
import com.navinfo.omqs.ui.activity.map.MainActivity import com.navinfo.omqs.ui.activity.map.MainActivity
import com.navinfo.omqs.ui.fragment.BaseFragment import com.navinfo.omqs.ui.fragment.BaseFragment
import com.navinfo.omqs.ui.fragment.tasklist.QsRecordListAdapter import com.navinfo.omqs.ui.fragment.tasklist.QsRecordListAdapter
import com.navinfo.omqs.ui.other.BaseToast.makeText
import com.navinfo.omqs.ui.widget.RecycleViewDivider
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.apache.poi.xwpf.usermodel.VerticalAlign
import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class QsRecordListFragment : BaseFragment(){ class QsRecordListFragment : BaseFragment(){

View File

@ -65,7 +65,6 @@ class TaskListViewModel @Inject constructor(
} }
} }
is NetResult.Loading -> {} is NetResult.Loading -> {}
else -> {}
} }
for (item in taskList) { for (item in taskList) {

View File

@ -45,7 +45,7 @@ abstract class BaseRecyclerViewAdapter<T>(var data: List<T> = listOf()) :
override fun onViewDetachedFromWindow(holder: BaseViewHolder) { override fun onViewDetachedFromWindow(holder: BaseViewHolder) {
super.onViewDetachedFromWindow(holder) super.onViewDetachedFromWindow(holder)
holder.apply { holder.run {
onStop() onStop()
} }
} }

View File

@ -64,7 +64,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:background="@drawable/fm_card_map_down_status_bg" android:background="@drawable/fm_card_map_down_status_bg"
android:onClick="@{fragment.onClick}" android:onClick="@{fragment::onClick}"
android:text="@{viewModel.liveDataQsRecordBean.classType}" /> android:text="@{viewModel.liveDataQsRecordBean.classType}" />
<TextView <TextView
@ -73,7 +73,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:background="@drawable/fm_card_map_down_status_bg" android:background="@drawable/fm_card_map_down_status_bg"
android:onClick="@{fragment.onClick}" android:onClick="@{fragment::onClick}"
android:text="@{viewModel.liveDataQsRecordBean.problemType}" /> android:text="@{viewModel.liveDataQsRecordBean.problemType}" />
<TextView <TextView