浏览代码

@task: Gson Converter

bai 3 年之前
父节点
当前提交
f3cf5ed57e
共有 40 个文件被更改,包括 171 次插入264 次删除
  1. 4 9
      demo/build.gradle
  2. 2 3
      demo/src/main/java/com/framework/di/Di.kt
  3. 4 3
      demo/src/main/java/com/framework/mvvm/model/db/AdmDatabase.kt
  4. 22 0
      demo/src/main/java/com/framework/mvvm/model/db/converter/GsonConverter.kt
  5. 0 18
      demo/src/main/java/com/framework/mvvm/model/db/converter/JsonArrayConverter.kt
  6. 0 20
      demo/src/main/java/com/framework/mvvm/model/db/converter/JsonConverter.kt
  7. 5 0
      demo/src/main/java/com/framework/mvvm/model/db/dao/ServeAreaDao.kt
  8. 1 1
      demo/src/main/java/com/framework/mvvm/model/db/entity/BaseEntity.kt
  9. 2 7
      demo/src/main/java/com/framework/mvvm/model/db/entity/ProjectEntity.kt
  10. 1 1
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/ComponentEntity.kt
  11. 2 1
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/ConfigEntity.kt
  12. 3 6
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/InfosConfigEntity.kt
  13. 0 2
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/M2dEquipEntity.kt
  14. 0 2
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/MajorEntity.kt
  15. 0 2
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/PipeConfigEntity.kt
  16. 0 2
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/RelConfigEntity.kt
  17. 1 4
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/RelationDictEntity.kt
  18. 0 3
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/SystemEntity.kt
  19. 1 3
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/FileEntity.kt
  20. 8 14
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/ObjectEntity.kt
  21. 4 5
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/PipeEntity.kt
  22. 3 4
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/ProblemArchEntity.kt
  23. 1 3
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/ProblemEquipEntity.kt
  24. 3 4
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/QrCodeEntity.kt
  25. 1 4
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/RelationEntity.kt
  26. 3 5
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/ServeArea.kt
  27. 3 7
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/SpaceEntity.kt
  28. 21 37
      demo/src/main/java/com/framework/mvvm/model/repository/AdmRepository.kt
  29. 0 3
      demo/src/main/java/com/framework/mvvm/model/vo/AdmRequest.kt
  30. 9 11
      demo/src/main/java/com/framework/mvvm/model/vo/Building.kt
  31. 10 11
      demo/src/main/java/com/framework/mvvm/model/vo/Dict.kt
  32. 0 3
      demo/src/main/java/com/framework/mvvm/model/vo/FloorInfo.kt
  33. 4 6
      demo/src/main/java/com/framework/mvvm/model/vo/Outline.kt
  34. 0 3
      demo/src/main/java/com/framework/mvvm/model/vo/UploadBuilding.kt
  35. 0 4
      demo/src/main/java/com/framework/mvvm/model/vo/UploadResult.kt
  36. 7 6
      demo/src/main/java/com/framework/mvvm/mv/AdmViewModel.kt
  37. 34 32
      demo/src/main/java/com/sybotan/android/demo/tools/OkhttpUtil.kt
  38. 6 6
      demo/src/main/java/com/sybotan/android/demo/viewmodel/BuildVM.kt
  39. 1 1
      demo/src/main/java/com/sybotan/android/demo/viewmodel/GraphyVM.kt
  40. 5 8
      demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceMapVM.kt

+ 4 - 9
demo/build.gradle

@@ -31,7 +31,6 @@ plugins {
     // kotlin("kapt")
     id 'org.jetbrains.kotlin.kapt'
     id 'kotlin-parcelize'
-    id 'org.jetbrains.kotlin.plugin.serialization' version '1.5.31'
 }
 
 android {
@@ -141,9 +140,9 @@ dependencies {
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // android支持
-    implementation 'androidx.core:core-ktx:1.5.0'
+    implementation 'androidx.core:core-ktx:1.6.0'
     implementation 'androidx.appcompat:appcompat:1.3.1'
-    implementation 'com.google.android.material:material:1.3.0'
+    implementation 'com.google.android.material:material:1.4.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
 
     // implementation group: 'androidx.appcompat', name: 'appcompat', version: ANDROID_SUPPORT_VERSION
@@ -158,7 +157,7 @@ dependencies {
     implementation 'com.bm.photoview:library:1.4.1'
     implementation 'com.yuyh.imgsel:library:1.3.8'
     implementation 'com.github.chrisbanes:PhotoView:1.2.6'
-    implementation 'com.squareup.okhttp3:logging-interceptor:3.1.2'
+    implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
     implementation 'commons-logging:commons-logging:1.2'
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -243,9 +242,6 @@ dependencies {
     implementation 'org.kodein.di:kodein-di-framework-android-x:7.8.0'
     implementation 'org.kodein.di:kodein-di-framework-android-x-viewmodel:7.8.0'
 
-    // kotlin
-    implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0'
-
     implementation 'com.arashivision.sdk:sdkcamera:1.3.10'
     implementation 'com.arashivision.sdk:sdkmedia:1.3.10'
     implementation 'com.lzy.net:okgo:3.0.4'
@@ -270,8 +266,7 @@ dependencies {
     implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-rc01'
     implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0-rc01'
     implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0-rc01'
-    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
-    implementation 'com.squareup.okhttp3:logging-interceptor:3.14.4'
+    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2'
 
     debugImplementation 'com.amitshekhar.android:debug-db:1.0.4'
     //屏幕适配

+ 2 - 3
demo/src/main/java/com/framework/di/Di.kt

@@ -1,9 +1,8 @@
 package com.framework.di
 
 import android.content.Context
-import android.util.Log
-import com.framework.app.api.Api
 import com.framework.app.IP
+import com.framework.app.api.Api
 import com.framework.mvvm.model.db.AdmDatabase
 import com.framework.mvvm.model.repository.AdmRepository
 import com.framework.mvvm.mv.AdmViewModel
@@ -14,12 +13,12 @@ import org.kodein.di.*
 import retrofit2.Retrofit
 import retrofit2.converter.gson.GsonConverterFactory
 import java.io.UnsupportedEncodingException
-import java.net.URLDecoder
 import java.util.concurrent.TimeUnit
 
 
 val httpModule = DI.Module("netModule") {
     // 构建 Retrofit 对象
+
     bind {
         singleton {
             Retrofit.Builder()

+ 4 - 3
demo/src/main/java/com/framework/mvvm/model/db/AdmDatabase.kt

@@ -5,7 +5,7 @@ import androidx.room.Database
 import androidx.room.Room
 import androidx.room.RoomDatabase
 import androidx.room.TypeConverters
-import com.framework.mvvm.model.db.converter.JsonConverter
+import com.framework.mvvm.model.db.converter.GsonConverter
 import com.framework.mvvm.model.db.dao.*
 import com.framework.mvvm.model.db.entity.*
 import com.framework.mvvm.model.db.entity.dict.*
@@ -31,10 +31,11 @@ import com.framework.mvvm.model.db.entity.task.*
         ProblemArchEntity::class,
         ProblemEquipEntity::class,
         ComponentEntity::class,
-        PipeEntity::class
+        PipeEntity::class,
+        ServeAreaEntity::class
     ], version = 1, exportSchema = true
 )
-@TypeConverters(JsonConverter::class)
+@TypeConverters(GsonConverter::class)
 abstract class AdmDatabase : RoomDatabase() {
     abstract fun configDao(): ConfigDao
     abstract fun equipmentDao(): EquipmentDao

+ 22 - 0
demo/src/main/java/com/framework/mvvm/model/db/converter/GsonConverter.kt

@@ -0,0 +1,22 @@
+package com.framework.mvvm.model.db.converter
+
+import androidx.room.TypeConverter
+import com.google.gson.JsonElement
+import com.google.gson.JsonParser
+
+/**
+ * Gson 转换器
+ */
+class GsonConverter {
+    @TypeConverter
+    fun jsonToString(json: JsonElement?): String {
+        return json?.toString() ?: ""
+    }
+
+    @TypeConverter
+    fun jsonToString(string: String?): JsonElement? {
+        if (string.isNullOrEmpty()) return null
+        val parser = JsonParser()
+        return parser.parse(string)
+    }
+}

+ 0 - 18
demo/src/main/java/com/framework/mvvm/model/db/converter/JsonArrayConverter.kt

@@ -1,18 +0,0 @@
-package com.framework.mvvm.model.db.converter
-
-import androidx.room.TypeConverter
-import org.json.JSONArray
-import org.json.JSONObject
-
-class JsonArrayConverter {
-    @TypeConverter
-    fun jsonArrayToString(jsonArray: JSONArray?): String? {
-        return jsonArray?.toString()
-    }
-
-    @TypeConverter
-    fun stringToJsonArray(string: String?): JSONArray? {
-        if (string == null) return null
-        return JSONArray(string)
-    }
-}

+ 0 - 20
demo/src/main/java/com/framework/mvvm/model/db/converter/JsonConverter.kt

@@ -1,20 +0,0 @@
-package com.framework.mvvm.model.db.converter
-
-import androidx.room.TypeConverter
-import org.json.JSONObject
-
-/**
- * JsonObject 与 String 转换器
- */
-class JsonConverter {
-    @TypeConverter
-    fun jsonToString(json: JSONObject?): String? {
-        return json?.toString()
-    }
-
-    @TypeConverter
-    fun stringToJson(string: String?): JSONObject? {
-        if (string == null) return null
-        return JSONObject("""$string""")
-    }
-}

+ 5 - 0
demo/src/main/java/com/framework/mvvm/model/db/dao/ServeAreaDao.kt

@@ -1,6 +1,8 @@
 package com.framework.mvvm.model.db.dao
 
 import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.OnConflictStrategy
 import androidx.room.Query
 import com.framework.mvvm.model.db.entity.task.ServeAreaEntity
 
@@ -15,4 +17,7 @@ interface ServeAreaDao {
 
     @Query("select * from serve_area where building_id = :id")
     suspend fun getAreasByBuildingId(id: String): List<ServeAreaEntity>
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    suspend fun insertAreas(areas: List<ServeAreaEntity>)
 }

+ 1 - 1
demo/src/main/java/com/framework/mvvm/model/db/entity/BaseEntity.kt

@@ -11,7 +11,7 @@ interface BaseEntity {
     var modifier: String?        // 修改人
     var modifiedTime: String?    // 修改时间
     var uploadFlag: String?      // 设备唯一标识
-    var state: String            // 数据状态:0:未处理,1:已处理过 2:已上传
+    var state: String?            // 数据状态:0:未处理,1:已处理过 2:已上传
     val projectId: String?       // 项目id
     val buildingId: String?      // 建筑id
     val floorId: String?         // 楼层id

+ 2 - 7
demo/src/main/java/com/framework/mvvm/model/db/entity/ProjectEntity.kt

@@ -3,15 +3,12 @@ package com.framework.mvvm.model.db.entity
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
-import kotlinx.serialization.Contextual
-import kotlinx.serialization.Serializable
-import org.json.JSONObject
+import com.google.gson.JsonElement
 
 /**
  * 项目表(远程无对应表)
  */
 @Entity(tableName = "project")
-@Serializable
 data class ProjectEntity(
     @PrimaryKey val id: String,
     @ColumnInfo(name = "name") val name: String,
@@ -24,7 +21,5 @@ data class ProjectEntity(
     @ColumnInfo(name = "introduction") val introduction: String?,
     @ColumnInfo(name = "business_floor_num") val businessFloorNum: String?,
     @ColumnInfo(name = "office_floor_num") val officeFloorNum: String?,
-    @ColumnInfo(name = "infos")
-    @Contextual
-    val infos: JSONObject?
+    @ColumnInfo(name = "infos") val infos: JsonElement? = null
 )

+ 1 - 1
demo/src/main/java/com/framework/mvvm/model/db/entity/dict/ComponentEntity.kt

@@ -13,5 +13,5 @@ data class ComponentEntity(
     @ColumnInfo(name = "comp_code") val compCode: String,       // 构件编码
     @ColumnInfo(name = "comp_name") val compName: String?,      // 构件名称
     @ColumnInfo(name = "system_code") val systemCode: String,   // 系统编码
-    @ColumnInfo(name = "class_code") val class_code: String     // 类型编码
+    @ColumnInfo(name = "class_code") val classCode: String     // 类型编码
 )

+ 2 - 1
demo/src/main/java/com/framework/mvvm/model/db/entity/dict/ConfigEntity.kt

@@ -4,6 +4,7 @@ package com.framework.mvvm.model.db.entity.dict
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
+import com.google.gson.JsonElement
 
 /**
  * 基本配置 表
@@ -13,5 +14,5 @@ data class ConfigEntity(
     @PrimaryKey val id: String,
     @ColumnInfo(name = "name") val name: String,   // 配置项名名称
     @ColumnInfo(name = "code") val code: String,   // 配置项代码
-    @ColumnInfo(name = "data") val data: String?,  // 配置项的具体内容, 内容是 Json 格式,
+    @ColumnInfo(name = "data") val data: JsonElement? = null,  // 配置项的具体内容, 内容是 Json 格式,
 )

+ 3 - 6
demo/src/main/java/com/framework/mvvm/model/db/entity/dict/InfosConfigEntity.kt

@@ -3,15 +3,12 @@ package com.framework.mvvm.model.db.entity.dict
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
-import kotlinx.serialization.Contextual
-import kotlinx.serialization.Serializable
-import org.json.JSONObject
+import com.google.gson.JsonElement
 
 /**
  * 信息配置 表
  */
 @Entity(tableName = "infos_config")
-@Serializable
 data class InfosConfigEntity(
     @PrimaryKey val id: String,
     @ColumnInfo(name = "name") val name: String?,                // 对象类型名称
@@ -21,9 +18,9 @@ data class InfosConfigEntity(
     @ColumnInfo(name = "system_code") val systemCode: String?,  // 系统代码(类型为设备时)
     @ColumnInfo(name = "project_id") val projectId: String?,    // 对象类型的信息详情点配置
     @ColumnInfo(name = "str_infos") val strInfos: String?,      // 对象类型的信息详情点配置
-    @ColumnInfo(name = "infos")
-    @Contextual val infos: JSONObject?                         // 对象类型的信息详情点配置
+    @ColumnInfo(name = "infos") val infos: JsonElement? = null  // 对象类型的信息详情点配置
 )
+
 //{"code": "serve_area", "group": "静态信息", "label": "服务区域", "dataType": "string", "inputType": "edit:serve_area"}
 data class Info(
     val code: String,

+ 0 - 2
demo/src/main/java/com/framework/mvvm/model/db/entity/dict/M2dEquipEntity.kt

@@ -3,13 +3,11 @@ package com.framework.mvvm.model.db.entity.dict
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
-import kotlinx.serialization.Serializable
 
 /**
  * 正向建模设备 表
  */
 @Entity(tableName = "m2d_equip")
-@Serializable
 data class M2dEquipEntity(
     @PrimaryKey val id: String,
     @ColumnInfo(name = "name") val name: String,               // 设备名称

+ 0 - 2
demo/src/main/java/com/framework/mvvm/model/db/entity/dict/MajorEntity.kt

@@ -3,13 +3,11 @@ package com.framework.mvvm.model.db.entity.dict
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
-import kotlinx.serialization.Serializable
 
 /**
  * 专业字典表(远程无对应表)
  */
 @Entity(tableName = "major")
-@Serializable
 data class MajorEntity(
     @PrimaryKey val id: String,
     @ColumnInfo(name = "label") val label: String,             // 专业标签

+ 0 - 2
demo/src/main/java/com/framework/mvvm/model/db/entity/dict/PipeConfigEntity.kt

@@ -3,13 +3,11 @@ package com.framework.mvvm.model.db.entity.dict
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
-import kotlinx.serialization.Serializable
 
 /**
  * 管道配置 表
  */
 @Entity(tableName = "pipe_config")
-@Serializable
 data class PipeConfigEntity(
     @PrimaryKey val id: String,
     @ColumnInfo(name = "project_id") val projectId: String?,             // 项目id

+ 0 - 2
demo/src/main/java/com/framework/mvvm/model/db/entity/dict/RelConfigEntity.kt

@@ -3,13 +3,11 @@ package com.framework.mvvm.model.db.entity.dict
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
-import kotlinx.serialization.Serializable
 
 /**
  * 关系配置 表
  */
 @Entity(tableName = "rel_config")
-@Serializable
 data class RelConfigEntity(
     @PrimaryKey val id: String,
     @ColumnInfo(name = "project_id") val projectId: String?,           // 项目id

+ 1 - 4
demo/src/main/java/com/framework/mvvm/model/db/entity/dict/RelationDictEntity.kt

@@ -3,15 +3,12 @@ package com.framework.mvvm.model.db.entity.dict
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
-import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Serializable
 
 /**
  * 关系字典表(关系定义)(远程无对应表)
  */
 @Entity(tableName = "relation_dict")
-@Serializable
-class RelationDictEntity(
+data class RelationDictEntity(
     @PrimaryKey val id: String,
     @ColumnInfo(name = "code") val code: String,                  // 关系编码
     @ColumnInfo(name = "name") val name: String,                  // 关系名

+ 0 - 3
demo/src/main/java/com/framework/mvvm/model/db/entity/dict/SystemEntity.kt

@@ -3,14 +3,11 @@ package com.framework.mvvm.model.db.entity.dict
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
-import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Serializable
 
 /**
  * 系统字典表(远程无对应表)
  */
 @Entity(tableName = "system")
-@Serializable
 data class SystemEntity(
     @PrimaryKey val id: String,
     @ColumnInfo(name = "code") val code: String,                     // 系统编码

+ 1 - 3
demo/src/main/java/com/framework/mvvm/model/db/entity/task/FileEntity.kt

@@ -4,19 +4,17 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Serializable
 
 /**
  * 文件表
  */
 @Entity(tableName = "file")
-@Serializable
 data class FileEntity(
     @PrimaryKey @ColumnInfo(name = "id") override val id: String,
     @ColumnInfo(name = "project_id") override val projectId: String,
     @ColumnInfo(name = "building_id") override val buildingId: String?,
     @ColumnInfo(name = "floor_id") override val floorId: String?,
-    @ColumnInfo(name = "state") override var state: String = "0",
+    @ColumnInfo(name = "state") override var state: String? = "0",
     @ColumnInfo(name = "upload_flag") override var uploadFlag: String?,
     @ColumnInfo(name = "valid") override var valid: Int?,
     @ColumnInfo(name = "creator") override var creator: String?,

+ 8 - 14
demo/src/main/java/com/framework/mvvm/model/db/entity/task/ObjectEntity.kt

@@ -1,14 +1,11 @@
 package com.framework.mvvm.model.db.entity.task
 
-import androidx.annotation.NonNull
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import cn.sagacloud.android.cadengine.types.PointZ
 import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Contextual
-import kotlinx.serialization.Serializable
-import org.json.JSONObject
+import com.google.gson.JsonElement
 
 /**
  * 对象表
@@ -16,22 +13,21 @@ import org.json.JSONObject
  */
 
 @Entity(tableName = "object")
-@Serializable
 data class ObjectEntity(
     @PrimaryKey @ColumnInfo(name = "id") override val id: String,
-    @ColumnInfo(name = "project_id") override val projectId: String,
+    @ColumnInfo(name = "project_id") override val projectId: String?,
     @ColumnInfo(name = "building_id") override val buildingId: String?,
     @ColumnInfo(name = "floor_id") override val floorId: String?,
-    @ColumnInfo(name = "state") override var state: String = "0",
+    @ColumnInfo(name = "state") override var state: String? = "0",
     @ColumnInfo(name = "upload_flag") override var uploadFlag: String?,
     @ColumnInfo(name = "valid") override var valid: Int?,
     @ColumnInfo(name = "creator") override var creator: String?,
     @ColumnInfo(name = "creation_time") override var creationTime: String?,
     @ColumnInfo(name = "modifier") override var modifier: String?,
     @ColumnInfo(name = "modified_time") override var modifiedTime: String?,
-    @ColumnInfo(name = "name") val name: String,
-    @ColumnInfo(name = "obj_type") val objType: String,             // 对象类型
-    @ColumnInfo(name = "class_code") var classCode: String,         // 对象类型编码
+    @ColumnInfo(name = "name") val name: String?,
+    @ColumnInfo(name = "obj_type") val objType: String?,             // 对象类型
+    @ColumnInfo(name = "class_code") var classCode: String?,         // 对象类型编码
     @ColumnInfo(name = "local_id") var localId: String?,            // 对象位置编码
     @ColumnInfo(name = "local_name") val localName: String?,        // 对象位置名称
     @ColumnInfo(name = "group_code") val groupCode: String?,        // 集团编码
@@ -43,12 +39,10 @@ data class ObjectEntity(
     @ColumnInfo(name = "delivery_state") val deliveryState: Int?,   // BDTP交付状态: 1 已交付, 0 待交付
     @ColumnInfo(name = "d2m_state") val d2mState: Int?,             // 逆向数据的数模同步状态(0:未同步;1:已同步)
     @ColumnInfo(name = "virtual_codes") val virtualCodes: String?,  // 虚点清单: Json 数据格式
-    @ColumnInfo(name = "infos")
-    @Contextual
-    var infos: JSONObject?,               // 信息点数据: Json 数据格式
+    @ColumnInfo(name = "infos") var infos: JsonElement?,             // 信息点数据: Json 数据格式
     @ColumnInfo(name = "str_infos") var strInfos: String?,          // 信息点数据: Json 数据格式
     @ColumnInfo(name = "floor_map") var floorMap: String?,          // 楼层地图
-    @ColumnInfo(name = "container_id") var containerId: String?     // 无模型设备的上级设备id
+    @ColumnInfo(name = "container_id") var containerId: String? = ""     // 无模型设备的上级设备id
 ) : BaseEntity
 
 

+ 4 - 5
demo/src/main/java/com/framework/mvvm/model/db/entity/task/PipeEntity.kt

@@ -4,20 +4,19 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Serializable
+import com.google.gson.JsonElement
 
 /**
  * 管道表
  */
 @Entity(tableName = "pipe")
-@Serializable
 data class PipeEntity(
     @PrimaryKey @ColumnInfo(name = "id") override val id: String,
     @ColumnInfo(name = "floor_id") override val floorId: String?,
     @ColumnInfo(name = "project_id") override val projectId: String?,
     @ColumnInfo(name = "building_id") override val buildingId: String?,
     @ColumnInfo(name = "valid") override var valid: Int?,
-    @ColumnInfo(name = "state") override var state: String = "0",
+    @ColumnInfo(name = "state") override var state: String? = "0",
     @ColumnInfo(name = "upload_flag") override var uploadFlag: String?,
     @ColumnInfo(name = "creator") override var creator: String?,
     @ColumnInfo(name = "creation_time") override var creationTime: String?,
@@ -30,8 +29,8 @@ data class PipeEntity(
     @ColumnInfo(name = "direction") val direction: Int?,              // 管道方向(1:正向from->to;-1:反向to->from;0:无方向
     @ColumnInfo(name = "pipe_type") val pipeType: String?,            // 管道的数据字典类型(OTLAPL: 液体管道|OTAAPL: 气体管道)'
     @ColumnInfo(name = "pipe_sub_type") val pipeSubType: String?,     // 管道用途
-    @ColumnInfo(name = "route") val route: String?,                   // 管道路由(坐标列表格式:[{x:1,y:1,z:1}])
-    @ColumnInfo(name = "infos") val infos: String?,                   // 管道的信息点
+    @ColumnInfo(name = "route") val route: JsonElement? = null,                   // 管道路由(坐标列表格式:[{x:1,y:1,z:1}])
+    @ColumnInfo(name = "infos") val infos: JsonElement? = null,                   // 管道的信息点
     @ColumnInfo(name = "d2m_state") val d2mState: String?,            // 逆向数据的数模同步状态(0:未同步;1:已同步)
     @ColumnInfo(name = "delivery_state") val deliveryState: String?,  // 交付BDTP状态:1已交付,0待交付
     var objFromLocalId: String?,

+ 3 - 4
demo/src/main/java/com/framework/mvvm/model/db/entity/task/ProblemArchEntity.kt

@@ -4,19 +4,18 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Serializable
+import com.google.gson.JsonElement
 
 /**
  * 结构问题  表
  */
 @Entity(tableName = "problem_arch")
-@Serializable
 data class ProblemArchEntity(
     @PrimaryKey @ColumnInfo(name = "id") override val id: String,
     @ColumnInfo(name = "floor_id") override val floorId: String,
     @ColumnInfo(name = "project_id") override val projectId: String,
     @ColumnInfo(name = "building_id") override val buildingId: String,
-    @ColumnInfo(name = "state") override var state: String = "0",
+    @ColumnInfo(name = "state") override var state: String? = "0",
     @ColumnInfo(name = "upload_flag") override var uploadFlag: String?,
     @ColumnInfo(name = "valid") override var valid: Int?,
     @ColumnInfo(name = "creator") override var creator: String?,
@@ -28,6 +27,6 @@ data class ProblemArchEntity(
     @ColumnInfo(name = "problem_type") val problemType: String?,   // 问题类型
     @ColumnInfo(name = "problem_state") var problemState: Int?,    // 建筑结构核查任务状态(0:删除;1:有效;2:已解决)
     @ColumnInfo(name = "message") val message: String?,            // 问题描述
-    @ColumnInfo(name = "geom") val geom: String?,                  // 问题记录的几何数据(Json)
+    @ColumnInfo(name = "geom") val geom: JsonElement?,                  // 问题记录的几何数据(Json)
     @ColumnInfo(name = "strGeom") val strGeom: String?,            // 问题记录的几何数据(Json)
 ) : BaseEntity

+ 1 - 3
demo/src/main/java/com/framework/mvvm/model/db/entity/task/ProblemEquipEntity.kt

@@ -4,19 +4,17 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Serializable
 
 /**
  * 设备问题 表
  */
 @Entity(tableName = "problem_equip")
-@Serializable
 data class ProblemEquipEntity(
     @PrimaryKey @ColumnInfo(name = "id") override val id: String,
     @ColumnInfo(name = "floor_id") override val floorId: String,
     @ColumnInfo(name = "project_id") override val projectId: String,
     @ColumnInfo(name = "building_id") override val buildingId: String,
-    @ColumnInfo(name = "state") override var state: String = "0",
+    @ColumnInfo(name = "state") override var state: String? = "0",
     @ColumnInfo(name = "upload_flag") override var uploadFlag: String?,
     @ColumnInfo(name = "valid") override var valid: Int?,
     @ColumnInfo(name = "creator") override var creator: String?,

+ 3 - 4
demo/src/main/java/com/framework/mvvm/model/db/entity/task/QrCodeEntity.kt

@@ -4,19 +4,18 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Serializable
+import com.google.gson.JsonElement
 
 /**
  * 二维码表
  */
 @Entity(tableName = "qr_code")
-@Serializable
 data class QrCodeEntity(
     @PrimaryKey @ColumnInfo(name = "id") override val id: String,
     @ColumnInfo(name = "project_id") override val projectId: String,
     @ColumnInfo(name = "building_id") override val buildingId: String,
     @ColumnInfo(name = "floor_id") override val floorId: String,
-    @ColumnInfo(name = "state") override var state: String = "0",
+    @ColumnInfo(name = "state") override var state: String? = "0",
     @ColumnInfo(name = "upload_flag") override var uploadFlag: String?,
     @ColumnInfo(name = "valid") override var valid: Int?,
     @ColumnInfo(name = "creator") override var creator: String?,
@@ -26,6 +25,6 @@ data class QrCodeEntity(
     @ColumnInfo(name = "qr_code") val qrCode: String,                       // 二维码数据值
     @ColumnInfo(name = "obj_id") val objId: String,                         // 二维码对应的对象id
     @ColumnInfo(name = "remark") val remark: String?,                       // 描述信息
-    @ColumnInfo(name = "location") val location: String?,                   // 位置坐标({x:1,y:1,z:1})
+    @ColumnInfo(name = "location") val location: JsonElement?,                   // 位置坐标({x:1,y:1,z:1})
     @ColumnInfo(name = "strLocation") val strLocation: String?,             // 位置坐标({x:1,y:1,z:1})
 ) : BaseEntity

+ 1 - 4
demo/src/main/java/com/framework/mvvm/model/db/entity/task/RelationEntity.kt

@@ -1,23 +1,20 @@
 package com.framework.mvvm.model.db.entity.task
 
-import androidx.annotation.NonNull
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Serializable
 
 /**
  * 关系(业务)表
  */
 @Entity(tableName = "relation")
-@Serializable
 data class RelationEntity(
     @PrimaryKey @ColumnInfo(name = "id") override val id: String,
     @ColumnInfo(name = "project_id") override val projectId: String?,
     @ColumnInfo(name = "building_id") override val buildingId: String?,
     @ColumnInfo(name = "floor_id") override val floorId: String?,
-    @ColumnInfo(name = "state") override var state: String = "0",
+    @ColumnInfo(name = "state") override var state: String? = "0",
     @ColumnInfo(name = "upload_flag") override var uploadFlag: String?,
     @ColumnInfo(name = "valid") override var valid: Int?,
     @ColumnInfo(name = "creator") override var creator: String?,

+ 3 - 5
demo/src/main/java/com/framework/mvvm/model/db/entity/task/ServeArea.kt

@@ -4,20 +4,18 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Serializable
-import kotlinx.serialization.json.JsonElement
+import com.google.gson.JsonElement
 
 /**
  * 描述设备的服务区域
  */
 @Entity(tableName = "serve_area")
-@Serializable
 data class ServeAreaEntity(
     @PrimaryKey @ColumnInfo(name = "id") override val id: String,
     @ColumnInfo(name = "project_id") override val projectId: String,
     @ColumnInfo(name = "building_id") override val buildingId: String?,
     @ColumnInfo(name = "floor_id") override val floorId: String?,
-    @ColumnInfo(name = "state") override var state: String = "0",
+    @ColumnInfo(name = "state") override var state: String? = "0",
     @ColumnInfo(name = "upload_flag") override var uploadFlag: String?,
     @ColumnInfo(name = "valid") override var valid: Int?,
     @ColumnInfo(name = "creator") override var creator: String?,
@@ -26,7 +24,7 @@ data class ServeAreaEntity(
     @ColumnInfo(name = "modified_time") override var modifiedTime: String?,
     @ColumnInfo(name = "obj_id") var objId: String?,            // 服务该区域提供的设备id
     @ColumnInfo(name = "geom_type") var geomType: String?,      // 服务区域的几何类型(polygon:多边形|circle:圆形|ellipse:椭圆)
-    @ColumnInfo(name = "geom") var geom: JsonElement?,          // 服务区域的轮廓几何信息(polygon对应xy坐标数组, circle和ellipse对应对象(圆心半径))
+    @ColumnInfo(name = "geom") var geom: JsonElement? = null,          // 服务区域的轮廓几何信息(polygon对应xy坐标数组, circle和ellipse对应对象(圆心半径))
     @ColumnInfo(name = "serve_type") var serveType: String?,    // 服务的类型,照明回路等,暂时为空
     @ColumnInfo(name = "remark") var remark: String?,           // 描述信息
 ) : BaseEntity

+ 3 - 7
demo/src/main/java/com/framework/mvvm/model/db/entity/task/SpaceEntity.kt

@@ -4,21 +4,18 @@ import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import com.framework.mvvm.model.db.entity.BaseEntity
-import kotlinx.serialization.Contextual
-import kotlinx.serialization.Serializable
-import org.json.JSONObject
+import com.google.gson.JsonElement
 
 /**
  * 工作空间表
  */
 @Entity(tableName = "space")
-@Serializable
 data class SpaceEntity(
     @PrimaryKey @ColumnInfo(name = "id") override val id: String,
     @ColumnInfo(name = "project_id") override val projectId: String?,
     @ColumnInfo(name = "building_id") override val buildingId: String?,
     @ColumnInfo(name = "floor_id") override val floorId: String?,
-    @ColumnInfo(name = "state") override var state: String = "0",
+    @ColumnInfo(name = "state") override var state: String? = "0",
     @ColumnInfo(name = "valid") override var valid: Int?,
     @ColumnInfo(name = "creator") override var creator: String?,
     @ColumnInfo(name = "creation_time") override var creationTime: String?,
@@ -31,8 +28,7 @@ data class SpaceEntity(
     @ColumnInfo(name = "parent_space_id") val parentSpaceId: String?, // 父级空间id(空间类型为sub时)
     @ColumnInfo(name = "arch_state") var archState: Int?,             // 建筑结构核查任务状态(0:待核查;1:核查中;2:核查完毕)
     @ColumnInfo(name = "equip_state") var equipState: Int?,           // 设备勘测任务状态(0:待勘测;1:勘测中;2:勘测完毕)
-    @ColumnInfo(name = "outline")
-    @Contextual val outline: JSONObject?,                             // 空间边界,模型更新空间变化时,用来做匹配计算
+    @ColumnInfo(name = "outline") val outline: JsonElement? = null,           // 空间边界,模型更新空间变化时,用来做匹配计算
     @ColumnInfo(name = "strOutline") val strOutline: String?,         // 空间边界,模型更新空间变化时,用来做匹配计算
 ) : BaseEntity
 

+ 21 - 37
demo/src/main/java/com/framework/mvvm/model/repository/AdmRepository.kt

@@ -265,31 +265,21 @@ class AdmRepository(
         request(
             from = { api.getDict(request) },
             to = { dict ->
-                val pipeConfig = dict.pipeConfig
-                val infosConfig = dict.infosConfig
-                val config = dict.config
-                val m2dTypes = dict.m2dTypes
-                val relConfig = dict.relConfig
-                val system = dict.dict.system
-                val equipment = dict.dict.equipment
-                val relation = dict.dict.relation
-                val major = dict.dict.major
-
                 try {
-                    db.pipeConfigDao().insConfigs(pipeConfig)
-                    db.infosConfigDao().insConfigs(infosConfig)
-                    db.configDao().insConfigs(config)
-                    db.m2dEquipDao().insM2ds(m2dTypes)
-                    db.relConfigDao().insConfigs(relConfig)
-                    db.systemDao().insSystems(system)
-                    db.equipmentDao().insEquipments(equipment)
-                    db.relationDictDao().insRelationDicts(relation)
-                    db.majorDao().insMajors(major)
+                    dict.pipeConfig?.let { db.pipeConfigDao().insConfigs(it) }
+                    dict.infosConfig?.let { db.infosConfigDao().insConfigs(it) }
+                    dict.config?.let { db.configDao().insConfigs(it) }
+                    dict.relConfig?.let { db.relConfigDao().insConfigs(it) }
+                    dict.component?.let { db.componentDao().insComponents(it) }
+                    dict.dict?.system?.let { db.systemDao().insSystems(it) }
+                    dict.dict?.equipment?.let { db.equipmentDao().insEquipments(it) }
+                    dict.dict?.relation?.let { db.relationDictDao().insRelationDicts(it) }
+                    dict.dict?.major?.let { db.majorDao().insMajors(it) }
                 } catch (e: Exception) {
-                    Log.d("requestDict", e.message!!)
+                    Log.d("requestDict", "exception: $e")
                 }
             },
-            error = { println("requestDict error:$it") }
+            error = { println("requestDict error: $it") }
         )
     }
 
@@ -301,23 +291,17 @@ class AdmRepository(
             from = { api.getBuilding(request) },
             to = { building ->
                 block?.invoke(building)
-                val file = building.file
-                val space = building.jobSpace
-                val objects = building.objects
-                val problemArch = building.problemArch
-                val problemEquip = building.problemEquip
-                val qrCode = building.qrCode
-                val relations = building.relations
-                val pipes = building.pipes
                 try {
-                    db.fileDao().insFiles(file)
-                    db.spaceDao().insSpaces(space)
-                    db.objectDao().insObjects(objects)
-                    db.problemArchDao().insProblems(problemArch)
-                    db.problemEquipDao().insProblems(problemEquip)
-                    db.qrCodeDao().insQrCodes(qrCode)
-                    db.relationDao().insRelations(relations)
-                    db.pipeDao().insPipes(pipes)
+                    building.file?.let { db.fileDao().insFiles(it) }
+                    building.jobSpace?.let { db.spaceDao().insSpaces(it) }
+                    building.objects?.let { db.objectDao().insObjects(it) }
+                    building.problemArch?.let { db.problemArchDao().insProblems(it) }
+                    building.problemEquip?.let { db.problemEquipDao().insProblems(it) }
+                    building.qrCode?.let { db.qrCodeDao().insQrCodes(it) }
+                    building.relations?.let { db.relationDao().insRelations(it) }
+                    building.pipes?.let { db.pipeDao().insPipes(it) }
+                    building.areas?.let { db.serveAreaDao().insertAreas(it) }
+
                 } catch (e: Exception) {
                     Log.d(
                         "AdmRepository requestBuilding",

+ 0 - 3
demo/src/main/java/com/framework/mvvm/model/vo/AdmRequest.kt

@@ -1,8 +1,5 @@
 package com.framework.mvvm.model.vo
 
-import kotlinx.serialization.Serializable
-
-@Serializable
 data class AdmRequest(
     val userId: String = "",          // 用户id
     val projectId: String = "",       // 项目Id

+ 9 - 11
demo/src/main/java/com/framework/mvvm/model/vo/Building.kt

@@ -1,22 +1,20 @@
 package com.framework.mvvm.model.vo
 
 import com.framework.mvvm.model.db.entity.task.*
-import kotlinx.serialization.Serializable
 
 /**
  * Building 对象
  */
-@Serializable
 data class Building(
     val buildingId: String,
-    val jobSpace: List<SpaceEntity>, // outline 需要处理
-    val objects: List<ObjectEntity>,
-    val file: List<FileEntity>,
-    val qrCode: List<QrCodeEntity>,
-    val relations: List<RelationEntity>,
-    val problemArch: List<ProblemArchEntity>,
-    val problemEquip: List<ProblemEquipEntity>,
-    val pipes: List<PipeEntity>,
-    val areas: List<ServeAreaEntity>,
+    val jobSpace: List<SpaceEntity>?, // outline 需要处理
+    val objects: List<ObjectEntity>?,
+    val file: List<FileEntity>?,
+    val qrCode: List<QrCodeEntity>?,
+    val relations: List<RelationEntity>?,
+    val problemArch: List<ProblemArchEntity>?,
+    val problemEquip: List<ProblemEquipEntity>?,
+    val pipes: List<PipeEntity>?,
+    val areas: List<ServeAreaEntity>?,
     val timestamp: String = ""
 )

+ 10 - 11
demo/src/main/java/com/framework/mvvm/model/vo/Dict.kt

@@ -6,21 +6,20 @@ import com.framework.mvvm.model.db.entity.dict.*
  * 数据定义
  */
 data class Dict(
-    val config: List<ConfigEntity>,
-    val dict: Dictionary,
-    val m2dTypes: List<M2dEquipEntity>,
-    val pipeConfig: List<PipeConfigEntity>,
-    val infosConfig: List<InfosConfigEntity>,
-    val relConfig: List<RelConfigEntity>,
-    val component: List<ComponentEntity>
+    val config: List<ConfigEntity>? = null,
+    val dict: Dictionary? = null,
+    val pipeConfig: List<PipeConfigEntity>? = null,
+    val infosConfig: List<InfosConfigEntity>? = null,
+    val relConfig: List<RelConfigEntity>? = null,
+    val component: List<ComponentEntity>? = null
 )
 
 /**
  * Dictionary 对象
  */
 data class Dictionary(
-    val system: List<SystemEntity>,
-    val major: List<MajorEntity>,
-    val equipment: List<EquipmentEntity>,
-    val relation: List<RelationDictEntity>
+    val system: List<SystemEntity>? = null,
+    val major: List<MajorEntity>? = null,
+    val equipment: List<EquipmentEntity>? = null,
+    val relation: List<RelationDictEntity>? = null
 )

+ 0 - 3
demo/src/main/java/com/framework/mvvm/model/vo/FloorInfo.kt

@@ -1,11 +1,8 @@
 package com.framework.mvvm.model.vo
 
-import kotlinx.serialization.Serializable
-
 /**
  * 楼层的 Infos
  */
-@Serializable
 data class FloorInfo(
     val count: String? = "0",
     val modelId: String? = "",

+ 4 - 6
demo/src/main/java/com/framework/mvvm/model/vo/Outline.kt

@@ -1,17 +1,15 @@
 package com.framework.mvvm.model.vo
 
-import kotlinx.serialization.SerialName
-import kotlinx.serialization.Serializable
+import com.google.gson.annotations.SerializedName
 
 /**
  * Outline
  */
-@Serializable
 data class Outline(
-    @SerialName("X")
+    @SerializedName("X")
     val x: Double,
-    @SerialName("Y")
+    @SerializedName("Y")
     val y: Double,
-    @SerialName("Z")
+    @SerializedName("Z")
     val z: Double = 0.0
 )

+ 0 - 3
demo/src/main/java/com/framework/mvvm/model/vo/UploadBuilding.kt

@@ -1,8 +1,5 @@
 package com.framework.mvvm.model.vo
 
-import kotlinx.serialization.Serializable
-
-@Serializable
 data class UploadBuilding(
     val projectId: String,
     val uploadFlag: String,

+ 0 - 4
demo/src/main/java/com/framework/mvvm/model/vo/UploadResult.kt

@@ -1,9 +1,5 @@
 package com.framework.mvvm.model.vo
 
-import kotlinx.serialization.Serializable
-
-
-@Serializable
 data class UploadResult(
     val timestamp: String?,
     val buildingId: String?,

+ 7 - 6
demo/src/main/java/com/framework/mvvm/mv/AdmViewModel.kt

@@ -5,14 +5,15 @@ import androidx.core.content.edit
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
 import cn.sagacloud.cadengine.OkhttpUtil
-import com.framework.app.IP
 import com.framework.app.DEVICE_ID
+import com.framework.app.IP
 import com.framework.app.pathDownloadMap
 import com.framework.app.timestamp
 import com.framework.mvvm.model.db.entity.task.ObjectEntity
 import com.framework.mvvm.model.repository.AdmRepository
 import com.framework.mvvm.model.vo.AdmRequest
 import com.framework.mvvm.model.vo.FloorInfo
+import com.google.gson.Gson
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.SharingStarted.Companion.WhileSubscribed
 import kotlinx.coroutines.flow.StateFlow
@@ -20,8 +21,6 @@ import kotlinx.coroutines.flow.flow
 import kotlinx.coroutines.flow.stateIn
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
-import kotlinx.serialization.decodeFromString
-import kotlinx.serialization.json.Json
 
 
 class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
@@ -84,7 +83,7 @@ class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
         viewModelScope.launch(Dispatchers.IO) {
             val buildings = repository.getBuildings()
             for (building in buildings) {
-                repository.uploadBuilding(building.projectId, building.id)
+                repository.uploadBuilding(building.projectId!!, building.id)
             }
             withContext(Dispatchers.Main) {
                 block?.invoke()
@@ -103,7 +102,7 @@ class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
                 repository.requestBuilding(
                     AdmRequest(
                         userId = "bdtp",
-                        projectId = building.projectId,
+                        projectId = building.projectId!!,
                         groupCode = "BR",
                         buildingId = building.id,
                         uploadFlag = sp.getString(DEVICE_ID, "") ?: "",
@@ -121,7 +120,9 @@ class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
                 val strInfo = it.strInfos
                 if (!strInfo.isNullOrEmpty()) {
                     try {
-                        val info = Json.decodeFromString<FloorInfo>(strInfo)
+                        val gson = Gson()
+                        // val info = Json.decodeFromString<FloorInfo>(strInfo)
+                        val info = gson.fromJson(strInfo, FloorInfo::class.java)
                         val map = info.floorMap
                         val floorMap =
                             OkhttpUtil.getGzipMap("$IP$pathDownloadMap${map!!}")

+ 34 - 32
demo/src/main/java/com/sybotan/android/demo/tools/OkhttpUtil.kt

@@ -25,6 +25,8 @@ import com.sybotan.android.demo.tools.GzipUtil
 import com.sybotan.base.extensions.toJson
 import okhttp3.*
 import com.sybotan.base.utils.SJsonUtil
+import okhttp3.MediaType.Companion.toMediaType
+import okhttp3.RequestBody.Companion.toRequestBody
 import java.io.File
 import java.util.concurrent.TimeUnit
 
@@ -40,19 +42,20 @@ object OkhttpUtil {
     /** http客户端 */
     private val httpClient: OkHttpClient by lazy {
         val client = OkHttpClient().newBuilder()
-                .readTimeout(600, TimeUnit.SECONDS)
-                .writeTimeout(600 , TimeUnit.SECONDS)
-                .connectTimeout(600 , TimeUnit.SECONDS)
+            .readTimeout(600, TimeUnit.SECONDS)
+            .writeTimeout(600, TimeUnit.SECONDS)
+            .connectTimeout(600, TimeUnit.SECONDS)
 //                .cache(cache)
-                .build()
+            .build()
         client
     }
 
     /** 缓存 路径 */
     private val cacheFile = File(DemoApp.getContext()!!.cacheDir, "cache")
+
     /**  缓存时间*/
     private val cache = Cache(cacheFile, (1024 * 1024 * 100).toLong()) //100Mb
-    private val JSON = MediaType.parse("application/json; charset=utf-8")
+    private val JSON = "application/json; charset=utf-8".toMediaType()
 
     /**
      * post请求 json
@@ -60,21 +63,21 @@ object OkhttpUtil {
      * 不能私有
      */
     fun postRequestJson(url: String, json: String): String {
-        val jsonBody = FormBody.create(JSON, json)
+        val jsonBody = json.toRequestBody(JSON)
         val request = Request.Builder()
-                .url(url)
-                .post(jsonBody)
-                .build()
+            .url(url)
+            .post(jsonBody)
+            .build()
         val call = httpClient.newCall(request)
         try {
             val response = call.execute()
-            response.code()
+            response.code
             if (response.isSuccessful) {
 //                LogUtils.e("请求成功code${response.code()},url=${url}")
             } else {
 //                LogUtils.e("请求成功code${response.code()},url=${url}")
             }
-            return response.body()!!.string()
+            return response.body!!.string()
         } catch (e: Throwable) {
             e.printStackTrace()
             return ""
@@ -83,13 +86,14 @@ object OkhttpUtil {
     } // Function postRequest()
 
 
-
-
-
     /**
      * post 对象
      */
-    inline fun <reified T> postObj(url: String, requestBody: Any, namingPolicy: FieldNamingPolicy? = null): T {
+    inline fun <reified T> postObj(
+        url: String,
+        requestBody: Any,
+        namingPolicy: FieldNamingPolicy? = null
+    ): T {
         val responseJson = postRequestJson(url, requestBody.toJson())
 //        LogUtils.e("数据 :${ responseJson.toJson()}")
         return SJsonUtil.fromJson<T>(responseJson)
@@ -104,15 +108,14 @@ object OkhttpUtil {
     } // Function postObj()
 
 
-
     /**
      *  get 请求
      */
     fun getRequest(url: String): String {
         val request = Request.Builder()
-                .url(url)
-                .get()
-                .build()
+            .url(url)
+            .get()
+            .build()
         val call = httpClient.newCall(request)
         try {
             val response = call.execute()
@@ -121,7 +124,7 @@ object OkhttpUtil {
             } else {
 //                LogUtils.e("请求失败code${response.code()},url=${url}")
             }
-            return response.body()!!.string()
+            return response.body!!.string()
         } catch (e: Throwable) {
             e.printStackTrace()
         }
@@ -131,12 +134,12 @@ object OkhttpUtil {
     /**
      *  get 请求
      */
-    fun getRequest(url: String,projectId: String): String {
+    fun getRequest(url: String, projectId: String): String {
         val request = Request.Builder()
-                .url(url)
-                .addHeader("ProjectId",projectId)
-                .get()
-                .build()
+            .url(url)
+            .addHeader("ProjectId", projectId)
+            .get()
+            .build()
         val call = httpClient.newCall(request)
         try {
             val response = call.execute()
@@ -145,7 +148,7 @@ object OkhttpUtil {
             } else {
 //                LogUtils.e("请求失败code${response.code()},url=${url}")
             }
-            return response.body()!!.string()
+            return response.body!!.string()
         } catch (e: Throwable) {
             e.printStackTrace()
         }
@@ -162,10 +165,10 @@ object OkhttpUtil {
         try {
             var isGzip = false
             val request = Request.Builder()
-                    .url(url)
-                    .get()
-                    .header("Accept-Encoding", "gzip")
-                    .build()
+                .url(url)
+                .get()
+                .header("Accept-Encoding", "gzip")
+                .build()
             val call = httpClient.newCall(request)
 
             val response = call.execute()
@@ -174,7 +177,7 @@ object OkhttpUtil {
             } else {
 //                LogUtils.e("请求失败code${response.code()},url=${url}")
             }
-            return  GzipUtil.uncompressToString(response.body()!!.bytes())
+            return GzipUtil.uncompressToString(response.body!!.bytes())
         } catch (e: Exception) {
             e.printStackTrace()
             return ""
@@ -184,5 +187,4 @@ object OkhttpUtil {
     }
 
 
-
 }

+ 6 - 6
demo/src/main/java/com/sybotan/android/demo/viewmodel/BuildVM.kt

@@ -29,7 +29,7 @@ class BuildVM(app: Application, b: BaseViewModelInterface, a: BaseActivity) :
             val builds = repo.getBuildByObjType("building")
             var t = ArrayList<Build>()
             for (build in builds) {
-                val floors = repo.getFloorByBuildingId(build.id,"floor")
+                val floors = repo.getFloorByBuildingId(build.id, "floor")
                 var floorList = ArrayList<Floor>()
                 for (floor in floors) {
                     val strInfo = Gson().fromJson(floor.strInfos, StrInfosforBuild::class.java)
@@ -57,9 +57,9 @@ class BuildVM(app: Application, b: BaseViewModelInterface, a: BaseActivity) :
                             localId = localId,
                             localName = floor.localName!!,
                             modelId = "",
-                            name = floor.name,
+                            name = floor.name ?: "",
                             objectType = "floor",
-                            projectId = floor.projectId,
+                            projectId = floor.projectId!!,
                             statistics = Statistics(),
                             infos = Info("", floorMap)
                         )
@@ -72,9 +72,9 @@ class BuildVM(app: Application, b: BaseViewModelInterface, a: BaseActivity) :
                         localId = build.localId!!,
                         lastUpdate = "",
                         localName = build.localName!!,
-                        name = build.name,
-                        objectType = build.objType,
-                        projectId = build.projectId,
+                        name = build.name ?: "",
+                        objectType = build.objType ?: "",
+                        projectId = build.projectId!!,
                         statistics = StatisticsX(),
                         floor = floorList
                     )

+ 1 - 1
demo/src/main/java/com/sybotan/android/demo/viewmodel/GraphyVM.kt

@@ -224,7 +224,7 @@ class GraphyVM(
                 if (!hasParent) {
                     val spaceModel = SpaceEqModel()
                     spaceModel.type = equip.classCode
-                    var equipEntity = repo.getEquipByCode(equip.classCode)
+                    var equipEntity = repo.getEquipByCode(equip.classCode!!)
                     spaceModel.typeName = equipEntity?.name
                     val child = Children()
                     child.deviceId = equip.id

+ 5 - 8
demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceMapVM.kt

@@ -8,17 +8,16 @@ import cn.sagacloud.android.cadengine.Lasso
 import cn.sagacloud.android.cadengine.items.PipeLineItem
 import cn.sagacloud.android.cadengine.items.PointItem
 import cn.sagacloud.android.cadengine.items.TunableSpaceItem
-import cn.sagacloud.android.cadengine.types.*
-import com.framework.mvvm.model.db.entity.*
+import cn.sagacloud.android.cadengine.types.FloorData
+import cn.sagacloud.android.cadengine.types.Photos
+import cn.sagacloud.android.cadengine.types.Point
+import cn.sagacloud.android.cadengine.types.PointZ
+import com.framework.mvvm.model.db.entity.task.*
 import com.framework.mvvm.model.repository.AdmRepository
-import com.sybotan.android.demo.bean.result.ProblemsModel
 import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
 import com.sybotan.android.demo.activities.BaseActivity
-import com.sybotan.android.demo.bean.request.*
 import com.sybotan.android.demo.bean.result.*
-import com.sybotan.android.demo.bean.result.Position
-import com.sybotan.android.demo.bean.result.Z
 import com.sybotan.android.demo.retrofit.BaseViewModelInterface
 import com.sybotan.android.demo.tools.CommonUtils
 import com.sybotan.android.demo.tools.ToastUtils
@@ -29,8 +28,6 @@ import org.kodein.di.DIAware
 import org.kodein.di.android.x.closestDI
 import org.kodein.di.instance
 import java.util.*
-import kotlin.collections.ArrayList
-import com.sybotan.android.demo.bean.*
 
 
 /**