AdmViewModel.kt 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package com.framework.mvvm.mv
  2. import androidx.lifecycle.*
  3. import cn.sagacloud.cadengine.OkhttpUtil
  4. import com.framework.app.pathDownloadMap
  5. import com.framework.app.testIP
  6. import com.framework.mvvm.model.data.AbsentLiveData
  7. import com.framework.mvvm.model.data.Data
  8. import com.framework.mvvm.model.db.entity.ProjectEntity
  9. import com.framework.mvvm.model.repository.AdmRepository
  10. import com.framework.mvvm.model.vo.AdmRequest
  11. import com.framework.mvvm.model.vo.FloorInfo
  12. import kotlinx.coroutines.Dispatchers
  13. import kotlinx.coroutines.launch
  14. import kotlinx.serialization.decodeFromString
  15. import kotlinx.serialization.json.Json
  16. class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
  17. private val _frameRequest = MutableLiveData<AdmRequest>()
  18. private var _projects = MutableLiveData<Data<List<ProjectEntity>>>()
  19. val projects: LiveData<Data<List<ProjectEntity>>> =
  20. Transformations.switchMap(_frameRequest) { request ->
  21. if (request == null) {
  22. AbsentLiveData.create()
  23. } else {
  24. repository.getProjects(request)
  25. }
  26. }
  27. /**
  28. * 请求架构数据
  29. */
  30. fun requestFrame(request: AdmRequest) {
  31. viewModelScope.launch {
  32. repository.requestFrame(request)
  33. }
  34. }
  35. /**
  36. * 请求字典
  37. */
  38. fun requestDict(request: AdmRequest) {
  39. viewModelScope.launch {
  40. repository.requestDict(request)
  41. }
  42. }
  43. /**
  44. * 请求建筑
  45. */
  46. fun requestBuilding(request: AdmRequest) {
  47. viewModelScope.launch(Dispatchers.IO) {
  48. repository.requestBuilding(request)
  49. val floors = repository.getFloors()
  50. floors.forEach {
  51. val strInfo = it.strInfos
  52. if (!strInfo.isNullOrEmpty()) {
  53. try {
  54. val info = Json.decodeFromString<FloorInfo>(strInfo)
  55. val map = info.floorMap
  56. val floorMap =
  57. OkhttpUtil.getGzipMap("$testIP$pathDownloadMap${map!!}")
  58. it.floorMap = floorMap
  59. repository.upObject(it)
  60. } catch (e: Exception) {
  61. println("floor map Exception: $e")
  62. }
  63. }
  64. }
  65. }
  66. }
  67. }