Browse Source

Merge remote-tracking branch 'origin/bdtp' into bdtp

# Conflicts:
#	demo/src/main/java/com/framework/mvvm/model/repository/AdmRepository.kt
lihao1 3 years ago
parent
commit
6ace6583fa
33 changed files with 309 additions and 437 deletions
  1. 2 1
      demo/src/main/java/com/framework/app/Constants.kt
  2. 2 2
      demo/src/main/java/com/framework/mvvm/model/db/AdmDatabase.kt
  3. 40 0
      demo/src/main/java/com/framework/mvvm/model/db/dao/JobSpaceDao.kt
  4. 0 40
      demo/src/main/java/com/framework/mvvm/model/db/dao/SpaceDao.kt
  5. 13 7
      demo/src/main/java/com/framework/mvvm/model/db/entity/BaseEntity.kt
  6. 1 1
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/ComponentEntity.kt
  7. 3 3
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/ConfigEntity.kt
  8. 2 2
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/ContainerConfigEntity.kt
  9. 1 1
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/EquipmentEntity.kt
  10. 2 11
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/InfosConfigEntity.kt
  11. 1 1
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/MajorEntity.kt
  12. 3 3
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/RelConfigEntity.kt
  13. 1 1
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/RelationDictEntity.kt
  14. 13 17
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/FileEntity.kt
  15. 7 21
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/SpaceEntity.kt
  16. 21 27
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/ObjectEntity.kt
  17. 19 23
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/PipeEntity.kt
  18. 9 13
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/ProblemArchEntity.kt
  19. 8 12
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/ProblemEquipEntity.kt
  20. 7 11
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/QrCodeEntity.kt
  21. 19 25
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/RelationEntity.kt
  22. 10 14
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/ServeAreaEntity.kt
  23. 70 68
      demo/src/main/java/com/framework/mvvm/model/repository/AdmRepository.kt
  24. 2 1
      demo/src/main/java/com/framework/mvvm/model/vo/AdmRequest.kt
  25. 4 2
      demo/src/main/java/com/framework/mvvm/model/vo/Building.kt
  26. 15 9
      demo/src/main/java/com/framework/mvvm/mv/AdmViewModel.kt
  27. 2 0
      demo/src/main/java/com/sybotan/android/demo/activities/PocActivity.kt
  28. 1 1
      demo/src/main/java/com/sybotan/android/demo/viewmodel/BuildVM.kt
  29. 2 4
      demo/src/main/java/com/sybotan/android/demo/viewmodel/ContainerVM.kt
  30. 10 52
      demo/src/main/java/com/sybotan/android/demo/viewmodel/EquipDetailVM.kt
  31. 6 17
      demo/src/main/java/com/sybotan/android/demo/viewmodel/GraphyVM.kt
  32. 1 1
      demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceDetailVM.kt
  33. 12 46
      demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceMapVM.kt

+ 2 - 1
demo/src/main/java/com/framework/app/Constants.kt

@@ -16,4 +16,5 @@ const val pathDownloadMap = "adm/downloadMap?key="
 
 const val DEVICE_ID = "device_id"
 
-const val timestamp = "timestamp"
+const val BDTP_TS = "bdtp_ts"
+const val ADM_TS = "adm_ts"

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

@@ -23,7 +23,7 @@ import com.framework.mvvm.model.db.entity.task.*
         M2dEquipEntity::class,
         ConfigEntity::class,
         FileEntity::class,
-        SpaceEntity::class,
+        JobSpaceEntity::class,
         QrCodeEntity::class,
         ObjectEntity::class,
         ProjectEntity::class,
@@ -54,7 +54,7 @@ abstract class AdmDatabase : RoomDatabase() {
     abstract fun relationDao(): RelationDao
     abstract fun relationDictDao(): RelationDictDao
     abstract fun relConfigDao(): RelConfigDao
-    abstract fun spaceDao(): SpaceDao
+    abstract fun jobSpaceDao(): JobSpaceDao
     abstract fun systemDao(): SystemDao
     abstract fun componentDao(): ComponentDao
     abstract fun pipeDao(): PipeDao

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

@@ -0,0 +1,40 @@
+package com.framework.mvvm.model.db.dao
+
+import androidx.room.*
+import com.framework.mvvm.model.db.entity.task.JobSpaceEntity
+
+/**
+ * 表 space Dao
+ */
+@Dao
+interface JobSpaceDao {
+    @Query("select * from job_space")
+    suspend fun getSpaces(): List<JobSpaceEntity>
+
+    @Query("select * from job_space where id = :id")
+    suspend fun getSpaceById(id: String): JobSpaceEntity
+
+    @Query("select * from job_space where space_id = :id")
+    suspend fun getSpaceBySpaceId(id: String): JobSpaceEntity
+
+    @Query("select * from job_space where floor_id = :id and arch_state =:archState")
+    suspend fun getSpaceByArchStateFloorId(id: String, archState: String): List<JobSpaceEntity>
+
+    @Query("select * from job_space where floor_id = :id and equip_state =:equipState")
+    suspend fun getSpaceByEquipStateFloorId(id: String, equipState: String): List<JobSpaceEntity>
+
+    @Query("select * from job_space where building_id = :id")
+    suspend fun getSpaceByBuildingId(id: String): List<JobSpaceEntity>
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    suspend fun insSpace(vararg space: JobSpaceEntity)
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    suspend fun insSpaces(spaces: List<JobSpaceEntity>)
+
+    @Update
+    suspend fun updateSpaces(spaces: List<JobSpaceEntity>)
+
+    @Delete
+    suspend fun delSpace(space: JobSpaceEntity)
+}

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

@@ -1,40 +0,0 @@
-package com.framework.mvvm.model.db.dao
-
-import androidx.room.*
-import com.framework.mvvm.model.db.entity.task.SpaceEntity
-
-/**
- * 表 space Dao
- */
-@Dao
-interface SpaceDao {
-    @Query("select * from space")
-    suspend fun getSpaces(): List<SpaceEntity>
-
-    @Query("select * from space where id = :id")
-    suspend fun getSpaceById(id: String): SpaceEntity
-
-    @Query("select * from space where space_id = :id")
-    suspend fun getSpaceBySpaceId(id: String): SpaceEntity
-
-    @Query("select * from space where floor_id = :id and arch_state =:archState")
-    suspend fun getSpaceByArchStateFloorId(id: String, archState: String): List<SpaceEntity>
-
-    @Query("select * from space where floor_id = :id and equip_state =:equipState")
-    suspend fun getSpaceByEquipStateFloorId(id: String, equipState: String): List<SpaceEntity>
-
-    @Query("select * from space where building_id = :id")
-    suspend fun getSpaceByBuildingId(id: String): List<SpaceEntity>
-
-    @Insert(onConflict = OnConflictStrategy.REPLACE)
-    suspend fun insSpace(vararg space: SpaceEntity)
-
-    @Insert(onConflict = OnConflictStrategy.REPLACE)
-    suspend fun insSpaces(spaces: List<SpaceEntity>)
-
-    @Update
-    suspend fun updateSpaces(spaces: List<SpaceEntity>)
-
-    @Delete
-    suspend fun delSpace(space: SpaceEntity)
-}

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

@@ -1,18 +1,24 @@
 package com.framework.mvvm.model.db.entity
 
+import androidx.room.ColumnInfo
+
 /**
  * 数据公共字段约束
  */
 interface BaseEntity {
     val id: String               // id
-    var valid: Int?              // 有效标识, // 1 正常 0 删除
-    var creator: String?         // 创建人
-    var creationTime: String?    // 创建时间
-    var modifier: String?        // 修改人
-    var modifiedTime: String?    // 修改时间
-    var uploadFlag: String?      // 设备唯一标识
-    var state: String?            // 数据状态:0:未处理,1:已处理过 2:已上传
+    var valid: Int               // 有效标识: 1 保留, 0 删除
+    var state: Int               // 数据状态:-1 默认, 0:本地创建, 1:修改过的网络数据 2:已上传的本地数据或者从网络来的数据
     val projectId: String?       // 项目id
     val buildingId: String?      // 建筑id
     val floorId: String?         // 楼层id
+    val ts: Long                 // 服务端用时间戳
+}
+
+fun BaseEntity.state() {
+    if (state == -1)
+        state = 0
+
+    if (state == 2)
+        state = 1
 }

+ 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 classCode: String     // 类型编码
+    @ColumnInfo(name = "class_code") val classCode: String      // 类型编码
 )

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

@@ -12,7 +12,7 @@ import com.google.gson.JsonElement
 @Entity(tableName = "config")
 data class ConfigEntity(
     @PrimaryKey val id: String,
-    @ColumnInfo(name = "name") val name: String,   // 配置项名称
-    @ColumnInfo(name = "code") val code: String,   // 配置项代
-    @ColumnInfo(name = "data") val data: JsonElement? = null,  // 配置项的具体内容, 内容是 Json 格式,
+    @ColumnInfo(name = "name") val name: String,               // 配置项名称
+    @ColumnInfo(name = "code") val code: String,               // 配置项编
+    @ColumnInfo(name = "data") val data: JsonElement? = null,  // 配置项内容
 )

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

@@ -10,6 +10,6 @@ import androidx.room.PrimaryKey
 @Entity(tableName = "container_config")
 data class ContainerConfigEntity(
     @PrimaryKey val id: String,
-    @ColumnInfo(name = "container_code") var containerCode: String, // 容器设备类型
-    @ColumnInfo(name = "widget_code") var widgetCode: String        // 容器设备内部支持的无模型设备类型代
+    @ColumnInfo(name = "container_code") var containerCode: String, // 容器设备类型
+    @ColumnInfo(name = "widget_code") var widgetCode: String        // 无模型设备类型编
 )

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

@@ -13,7 +13,7 @@ data class EquipmentEntity(
     @ColumnInfo(name = "project_id") val projectId: String?,         // 项目 id
     @ColumnInfo(name = "code") val code: String?,                    // 设备编码
     @ColumnInfo(name = "name") val name: String?,                    // 设备名称
-    @ColumnInfo(name = "obj_type") val objType: String?,             // 对象类型 "system"
+    @ColumnInfo(name = "obj_type") val objType: String?,             // 对象类型
     @ColumnInfo(name = "group_code") val groupCode: String?,         // 集团编码
     @ColumnInfo(name = "major_code") val majorCode: String?,         // 专业编码
     @ColumnInfo(name = "system_code") val systemCode: String?,       // 系统编码

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

@@ -11,20 +11,11 @@ import com.google.gson.JsonElement
 @Entity(tableName = "infos_config")
 data class InfosConfigEntity(
     @PrimaryKey val id: String,
-    @ColumnInfo(name = "name") val name: String?,                // 对象类型名称
+    @ColumnInfo(name = "name") val name: String?,               // 对象类型名称
     @ColumnInfo(name = "obj_type") val objType: String?,        // 对象类型(space|equipment)
     @ColumnInfo(name = "class_code") val classCode: String?,    // 对象class_code
     @ColumnInfo(name = "major_code") val majorCode: String?,    // 专业代码(类型为设备时)
     @ColumnInfo(name = "system_code") val systemCode: String?,  // 系统代码(类型为设备时)
-    @ColumnInfo(name = "project_id") val projectId: String?,    // 对象类型的信息详情点配置
+    @ColumnInfo(name = "project_id") val projectId: String?,    // 项目id
     @ColumnInfo(name = "infos") val infos: JsonElement? = null  // 对象类型的信息详情点配置
-)
-
-//{"code": "serve_area", "group": "静态信息", "label": "服务区域", "dataType": "string", "inputType": "edit:serve_area"}
-data class Info(
-    val code: String,
-    val dataType: String,
-    val group: String,
-    val inputType: String,
-    val label: String
 )

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

@@ -14,7 +14,7 @@ data class MajorEntity(
     @ColumnInfo(name = "code") val code: String,               // 专业编码
     @ColumnInfo(name = "type") val type: String,               // 专业类型
     @ColumnInfo(name = "order_num") val orderNum: Int,         // 序号
-    @ColumnInfo(name = "dict_type_id") val dictTypeId: String, //字典类型id
+    @ColumnInfo(name = "dict_type_id") val dictTypeId: String, // 字典类型id
     @ColumnInfo(name = "valid") var valid: Int?,               // 有效标识: 1 正常 0 删除
     @ColumnInfo(name = "remark") var remark: String?,          // 备注
 )

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

@@ -16,9 +16,9 @@ data class RelConfigEntity(
     @ColumnInfo(name = "obj_type_to") val objTypeTo: String?,          //  to  端对象类型(space|equipment)
     @ColumnInfo(name = "class_code_from") val classCodeFrom: String?,  // from 端对象class_code
     @ColumnInfo(name = "class_code_to") val classCodeTo: String?,      //  to  端对象class_code
-    @ColumnInfo(name = "graph_code") val graphCode: String?,           // 关系的图类型
+    @ColumnInfo(name = "graph_code") val graphCode: String?,           // 关系的图类型
     @ColumnInfo(name = "graph_name") val graphName: String?,           // 关系的图类型名称
-    @ColumnInfo(name = "rel_code") val relCode: String?,               // 关系的边类型
-    @ColumnInfo(name = "rel_name") val relName: String?,               // 关系的边类型代码
+    @ColumnInfo(name = "rel_code") val relCode: String?,               // 关系的边类型
+    @ColumnInfo(name = "rel_name") val relName: String?,               // 关系的边类型名称
     @ColumnInfo(name = "direction") val direction: String?,            // 关系方向(fixed|optional|none)
 ): Serializable

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

@@ -19,7 +19,7 @@ data class RelationDictEntity(
     @ColumnInfo(name = "fromObjType") val fromObjType: String?,
     @ColumnInfo(name = "toObjType") val toObjType: String?,
     @ColumnInfo(name = "remark") val remark: String?,
-    @ColumnInfo(name = "valid") var valid: Int?,                    // 有效标识, // 1 正常 0 删除
+    @ColumnInfo(name = "valid") var valid: Int?,                   // 有效标识, // 1 正常 0 删除
     //@ColumnInfo(name = "before_cal_rels") val beforeCalRels: String?,
     //@ColumnInfo(name = "calRules") val calRules: String?,
 )

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

@@ -12,22 +12,18 @@ import com.framework.mvvm.model.db.entity.BaseEntity
 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 = "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 = "biz_type") val bizType: String?,            // 业务类型(object:对象附件|problem_arch:空间问题附件|problem_equip:设备问题附件)
-    @ColumnInfo(name = "file_path") val filePath: String?,          // 文件存储路径
-    @ColumnInfo(name = "file_type") val fileType: String?,          // 文件类型(photo|video|file|...)
-    @ColumnInfo(name = "client_path") val clientPath: String?,      // app端文件存储路径
-    @ColumnInfo(name = "ref_obj_id") val refObjId: String?,         // 关联的对象id
-    @ColumnInfo(name = "ref_info_code") val refInfoCode: String?,   // 关联的对象信息点code
-    @ColumnInfo(name = "remark") val remark: String?,               // 描述
-    @ColumnInfo(name = "order_num") val orderNum: Int?,             // 文件附件(照片)的排序序号
+    @ColumnInfo(name = "building_id") override val buildingId: String,
+    @ColumnInfo(name = "floor_id") override val floorId: String,
+    @ColumnInfo(name = "state") override var state: Int = -1,
+    @ColumnInfo(name = "valid") override var valid: Int = 1,
+    @ColumnInfo(name = "ts") override val ts: Long = 0L,
+    @ColumnInfo(name = "biz_type") val bizType: String? = "",            // 业务类型(object:对象附件|problem_arch:空间问题附件|problem_equip:设备问题附件)
+    @ColumnInfo(name = "file_path") val filePath: String? = "",          // 文件存储路径
+    @ColumnInfo(name = "file_type") val fileType: String? = "",          // 文件类型(photo|video|file|...)
+    @ColumnInfo(name = "client_path") val clientPath: String? = "",      // app端文件存储路径
+    @ColumnInfo(name = "ref_obj_id") val refObjId: String? = "",         // 关联的对象id
+    @ColumnInfo(name = "ref_info_code") val refInfoCode: String? = "",   // 关联的对象信息点code
+    @ColumnInfo(name = "remark") val remark: String? = "",               // 描述
+    @ColumnInfo(name = "order_num") val orderNum: Int? = -1,             // 文件附件(照片)的排序序号
     @ColumnInfo(name = "file_id") val fileId: String? = "",              // 文件服务中存储的id
 ) : BaseEntity

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

@@ -9,34 +9,20 @@ import com.google.gson.JsonElement
 /**
  * 工作空间表
  */
-@Entity(tableName = "space")
-data class SpaceEntity(
+@Entity(tableName = "job_space")
+data class JobSpaceEntity(
     @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 = "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 = "upload_flag") override var uploadFlag: String?,
+    @ColumnInfo(name = "state") override var state: Int = -1,
+    @ColumnInfo(name = "valid") override var valid: Int = 1,
+    @ColumnInfo(name = "ts") override val ts: Long = 0L,
     @ColumnInfo(name = "space_id") val spaceId: String,               // 空间id
     @ColumnInfo(name = "work_id") val workId: String?,                // 交付工作流程id
     @ColumnInfo(name = "space_type") val spaceType: String?,          // 任务空间类型(base|sub)
     @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") val outline: JsonElement? = null,           // 空间边界,模型更新空间变化时,用来做匹配计算
-) : BaseEntity
-
-/*
-// 后期优化
-@Entity(tableName = "outline")
-data class OutLineEntity(
-    @PrimaryKey(autoGenerate = true) val id: Int,
-    @ColumnInfo(name = "x") val x: Double,
-    @ColumnInfo(name = "y") val y: Double,
-    @ColumnInfo(name = "z") val z: Double
-)*/
+    @ColumnInfo(name = "outline") val outline: JsonElement? = null    // 空间边界,模型更新空间变化时,用来做匹配计算
+) : BaseEntity

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

@@ -17,33 +17,27 @@ import java.io.Serializable
 @Entity(tableName = "object")
 data class ObjectEntity(
     @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 = "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 = "local_id") var localId: String?,            // 对象位置编码
-    @ColumnInfo(name = "local_name") val localName: String?,        // 对象位置名称
-    @ColumnInfo(name = "group_code") val groupCode: String?,        // 集团编码
-    @ColumnInfo(name = "grouping") val grouping: Int?,              // 1 表示单个对象,2 表示对象组
-    @ColumnInfo(name = "create_app") val createApp: String?,        // 创建对象的应用
-    @ColumnInfo(name = "client_device") val clientDevice: String?,  // 标识客户端设备
-    @ColumnInfo(name = "client_id") val clientId: String?,          // 客户端生成id
-    @ColumnInfo(name = "update_app") val updateApp: String?,        // 更新对象的应用
-    @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") var infos: JsonElement?,             // 信息点数据: Json 数据格式
-    @ColumnInfo(name = "floor_map") var floorMap: String?,          // 楼层地图
-    @ColumnInfo(name = "container_id") var containerId: String? = ""     // 无模型设备的上级设备id
+    @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: Int = -1,
+    @ColumnInfo(name = "valid") override var valid: Int = 1,
+    @ColumnInfo(name = "ts") override val ts: Long = 0L,
+    @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? = "",               // 集团编码
+    @ColumnInfo(name = "grouping") val grouping: Int = 1,                       // 1 表示单个对象,2 表示对象组
+    @ColumnInfo(name = "client_device") val clientDevice: String? = "",         // 标识客户端设备
+    @ColumnInfo(name = "client_id") val clientId: String? = "",                 // 客户端生成id
+    @ColumnInfo(name = "delivery_state") val deliveryState: Int? = null,        // BDTP交付状态: 1 已交付, 0 待交付
+    @ColumnInfo(name = "d2m_state") val d2mState: Int? = null,                  // 逆向数据的数模同步状态(0:未同步;1:已同步)
+    @ColumnInfo(name = "virtual_codes") val virtualCodes: JsonElement? = null,  // 虚点清单: Json 数据格式
+    @ColumnInfo(name = "infos") var infos: JsonElement? = null,                 // 信息点数据: Json 数据格式
+    @ColumnInfo(name = "floor_map") var floorMap: String? = "",                 // 楼层地图
+    @ColumnInfo(name = "container_id") var containerId: String? = ""            // 无模型设备的上级设备id
 ) : BaseEntity
 
 

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

@@ -12,27 +12,23 @@ import com.google.gson.JsonElement
 @Entity(tableName = "pipe")
 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 = "upload_flag") override var uploadFlag: String?,
-    @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 = "obj_from") val objFrom: String?,              // 管道的from端对象
-    @ColumnInfo(name = "type_from") val typeFrom: String?,            // from端对象类型(equipment:设备;pipe:管道)
-    @ColumnInfo(name = "obj_to") val objTo: String?,                  // 管道的to端对象
-    @ColumnInfo(name = "type_to") val typeTo: String?,                // to端对象类型(equipment:设备;pipe:管道)
-    @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: 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?,
-    var objToLocalId: 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 = 1,
+    @ColumnInfo(name = "state") override var state: Int = -1,
+    @ColumnInfo(name = "ts") override val ts: Long = 0L,
+    @ColumnInfo(name = "obj_from") val objFrom: String? = "",                // 管道的from端对象
+    @ColumnInfo(name = "type_from") val typeFrom: String? = "",              // from端对象类型(equipment:设备;pipe:管道)
+    @ColumnInfo(name = "obj_to") val objTo: String? = "",                    // 管道的to端对象
+    @ColumnInfo(name = "type_to") val typeTo: String? = "",                  // to端对象类型(equipment:设备;pipe:管道)
+    @ColumnInfo(name = "direction") val direction: Int? = null,              // 管道方向(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: JsonElement? = null,              // 管道路由(坐标列表格式:[{x:1,y:1,z:1}])
+    @ColumnInfo(name = "infos") val infos: JsonElement? = null,              // 管道的信息点
+    @ColumnInfo(name = "d2m_state") val d2mState: String? = null,            // 逆向数据的数模同步状态(0:未同步;1:已同步)
+    @ColumnInfo(name = "delivery_state") val deliveryState: String? = null,  // 交付BDTP状态:1已交付,0待交付
+    var objFromLocalId: String? = "",
+    var objToLocalId: String? = "",
 ) : BaseEntity

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

@@ -15,17 +15,13 @@ data class ProblemArchEntity(
     @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 = "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 = "geom_type") val geomType: String?,         // 问题记录的几何类型(point|line|polygon)
-    @ColumnInfo(name = "work_id") val workId: String?,             // 交付工作流程id
-    @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: JsonElement?,                  // 问题记录的几何数据(Json)
+    @ColumnInfo(name = "state") override var state: Int = -1,
+    @ColumnInfo(name = "valid") override var valid: Int = 1,
+    @ColumnInfo(name = "ts") override val ts: Long = 0L,
+    @ColumnInfo(name = "geom_type") val geomType: String? = "",        // 问题记录的几何类型(point|line|polygon)
+    @ColumnInfo(name = "work_id") val workId: String? = "",            // 交付工作流程id
+    @ColumnInfo(name = "problem_type") val problemType: String? = "",  // 问题类型
+    @ColumnInfo(name = "problem_state") var problemState: Int? = null, // 建筑结构核查任务状态(0:删除;1:有效;2:已解决)
+    @ColumnInfo(name = "message") val message: String? = "",           // 问题描述
+    @ColumnInfo(name = "geom") val geom: JsonElement? = null,          // 问题记录的几何数据(Json)
 ) : BaseEntity

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

@@ -14,16 +14,12 @@ data class ProblemEquipEntity(
     @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 = "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 = "equip_id") val equipId: String,            // 设备id
-    @ColumnInfo(name = "work_id") val workId: String?,             // 交付工作流程id
-    @ColumnInfo(name = "problem_type") val problemType: String?,   // 问题类型
-    @ColumnInfo(name = "problem_state") val problemState: Int?,    // 建筑结构核查任务状态(0:删除;1:有效;2:已解决)
-    @ColumnInfo(name = "message") val message: String?,            // 问题描述
+    @ColumnInfo(name = "state") override var state: Int = -1,
+    @ColumnInfo(name = "valid") override var valid: Int = 1,
+    @ColumnInfo(name = "ts") override val ts: Long = 0L,
+    @ColumnInfo(name = "equip_id") val equipId: String,                  // 设备id
+    @ColumnInfo(name = "work_id") val workId: String? = null,            // 交付工作流程id
+    @ColumnInfo(name = "problem_type") val problemType: String? = null,  // 问题类型
+    @ColumnInfo(name = "problem_state") val problemState: Int? = null,   // 建筑结构核查任务状态(0:删除;1:有效;2:已解决)
+    @ColumnInfo(name = "message") val message: String? = null,           // 问题描述
 ) : BaseEntity

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

@@ -15,15 +15,11 @@ data class QrCodeEntity(
     @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 = "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 = "qr_code") val qrCode: String,                       // 二维码数据值
-    @ColumnInfo(name = "obj_id") val objId: String,                         // 二维码对应的对象id
-    @ColumnInfo(name = "remark") val remark: String?,                       // 描述信息
-    @ColumnInfo(name = "location") val location: JsonElement?,                   // 位置坐标({x:1,y:1,z:1})
+    @ColumnInfo(name = "state") override var state: Int = -1,
+    @ColumnInfo(name = "valid") override var valid: Int = 1,
+    @ColumnInfo(name = "ts") override val ts: Long = 0L,
+    @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: JsonElement? = null,   // 位置坐标({x:1,y:1,z:1})
 ) : BaseEntity

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

@@ -11,29 +11,23 @@ import com.framework.mvvm.model.db.entity.BaseEntity
 @Entity(tableName = "relation")
 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 = "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 = "group_code") val groupCode: String?,         // 集团代码
-    @ColumnInfo(name = "graph_id") val graphId: String?,             // 图id
-    @ColumnInfo(name = "graph_code") val graphCode: String?,         // 图编码
-    @ColumnInfo(name = "rel_code") val relCode: String?,             // 关系编码
-    @ColumnInfo(name = "rel_value") val relValue: String?,           // 关系值
-    @ColumnInfo(name = "obj_from") val objFrom: String?,             // 关系源对象
-    @ColumnInfo(name = "obj_to") val objTo: String?,                 // 关系目标对象
-    @ColumnInfo(name = "create_app") val createApp: String?,         // 创建关系的App
-    @ColumnInfo(name = "update_app") val updateApp: String?,         // 更新关系的App
-    @ColumnInfo(name = "client_id") val clientId: String?,           // 客户端生成id
-    @ColumnInfo(name = "client_device") val clientDevice: String?,   // 标识客户端设备
-    @ColumnInfo(name = "delivery_state") val deliveryState: Int?,    // BDTP交付状态: 1 已交付, 0 待交付
-    @ColumnInfo(name = "d2m_state") val d2mState: Int?,              // 逆向数据的数模同步状态(0:未同步;1:已同步)
-    var objFromLocalId: String?,
-    var objToLocalId: String?,
+    @ColumnInfo(name = "project_id") override val projectId: String? = null,
+    @ColumnInfo(name = "building_id") override val buildingId: String? = null,
+    @ColumnInfo(name = "floor_id") override val floorId: String? = null,
+    @ColumnInfo(name = "state") override var state: Int = -1,
+    @ColumnInfo(name = "valid") override var valid: Int = 1,
+    @ColumnInfo(name = "ts") override val ts: Long = 0L,
+    @ColumnInfo(name = "group_code") val groupCode: String? = null,         // 集团代码
+    @ColumnInfo(name = "graph_id") val graphId: String? = null,             // 图id
+    @ColumnInfo(name = "graph_code") val graphCode: String? = null,         // 图编码
+    @ColumnInfo(name = "rel_code") val relCode: String? = null,             // 关系编码
+    @ColumnInfo(name = "rel_value") val relValue: String? = null,           // 关系值
+    @ColumnInfo(name = "obj_from") val objFrom: String? = null,             // 关系源对象
+    @ColumnInfo(name = "obj_to") val objTo: String? = null,                 // 关系目标对象
+    @ColumnInfo(name = "client_id") val clientId: String? = null,           // 客户端生成id
+    @ColumnInfo(name = "client_device") val clientDevice: String? = null,   // 标识客户端设备
+    @ColumnInfo(name = "delivery_state") val deliveryState: Int = -1,       // BDTP交付状态: 1 已交付, 0 待交付
+    @ColumnInfo(name = "d2m_state") val d2mState: Int = -1,                 // 逆向数据的数模同步状态(0:未同步;1:已同步)
+    var objFromLocalId: String? = null,
+    var objToLocalId: String? = null,
 ) : BaseEntity

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

@@ -13,18 +13,14 @@ import com.google.gson.JsonElement
 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 = "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 = "obj_id") var objId: String?,            // 服务该区域提供的设备id
-    @ColumnInfo(name = "geom_type") var geomType: String?,      // 服务区域的几何类型(polygon:多边形|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?,           // 描述信息
+    @ColumnInfo(name = "building_id") override val buildingId: String,
+    @ColumnInfo(name = "floor_id") override val floorId: String,
+    @ColumnInfo(name = "state") override var state: Int = -1,
+    @ColumnInfo(name = "valid") override var valid: Int = 1,
+    @ColumnInfo(name = "ts") override val ts: Long = 0L,
+    @ColumnInfo(name = "obj_id") var objId: String? = "",            // 服务该区域的设备id
+    @ColumnInfo(name = "geom_type") var geomType: String? = "",      // 服务区域的几何类型(polygon:多边形|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

+ 70 - 68
demo/src/main/java/com/framework/mvvm/model/repository/AdmRepository.kt

@@ -2,6 +2,7 @@ package com.framework.mvvm.model.repository
 
 import android.content.SharedPreferences
 import android.util.Log
+import cn.hutool.core.util.IdUtil
 import com.framework.app.DEVICE_ID
 import com.framework.app.api.Api
 import com.framework.app.base.IRepository
@@ -70,12 +71,12 @@ class AdmRepository(
         return db.objectDao().getObjectById(objId)
     }
 
-    suspend fun getSpaceByArchStateFloorId(id: String, archState: String): List<SpaceEntity> {
-        return db.spaceDao().getSpaceByArchStateFloorId(id, archState)
+    suspend fun getSpaceByArchStateFloorId(id: String, archState: String): List<JobSpaceEntity> {
+        return db.jobSpaceDao().getSpaceByArchStateFloorId(id, archState)
     }
 
-    suspend fun getSpaceByEquipStateFloorId(id: String, equipState: String): List<SpaceEntity> {
-        return db.spaceDao().getSpaceByEquipStateFloorId(id, equipState)
+    suspend fun getSpaceByEquipStateFloorId(id: String, equipState: String): List<JobSpaceEntity> {
+        return db.jobSpaceDao().getSpaceByEquipStateFloorId(id, equipState)
     }
 
     suspend fun getBuildByObjType(objType: String): List<ObjectEntity> {
@@ -90,12 +91,12 @@ class AdmRepository(
         return db.objectDao().getObjectByBuildingId(buildingId, type)
     }
 
-    suspend fun getSpaceBySpaceId(id: String): SpaceEntity {
-        return db.spaceDao().getSpaceBySpaceId(id)
+    suspend fun getSpaceBySpaceId(id: String): JobSpaceEntity {
+        return db.jobSpaceDao().getSpaceBySpaceId(id)
     }
 
-    suspend fun insSpace(space: SpaceEntity) {
-        return db.spaceDao().insSpace(space)
+    suspend fun insSpace(space: JobSpaceEntity) {
+        return db.jobSpaceDao().insSpace(space)
     }
 
     suspend fun getEquipByFloorId(id: String): List<ObjectEntity> {
@@ -333,15 +334,33 @@ class AdmRepository(
             to = { building ->
                 block?.invoke(building)
                 try {
-                    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) }
+                    building.file
+                        ?.onEach { it.state = 2 }
+                        ?.let { db.fileDao().insFiles(it) }
+                    building.jobSpace
+                        ?.onEach { it.state = 2 }
+                        ?.let { db.jobSpaceDao().insSpaces(it) }
+                    building.objects
+                        ?.onEach { it.state = 2 }
+                        ?.let { db.objectDao().insObjects(it) }
+                    building.problemArch
+                        ?.onEach { it.state = 2 }
+                        ?.let { db.problemArchDao().insProblems(it) }
+                    building.problemEquip
+                        ?.onEach { it.state = 2 }
+                        ?.let { db.problemEquipDao().insProblems(it) }
+                    building.qrCode
+                        ?.onEach { it.state = 2 }
+                        ?.let { db.qrCodeDao().insQrCodes(it) }
+                    building.relations
+                        ?.onEach { it.state = 2 }
+                        ?.let { db.relationDao().insRelations(it) }
+                    building.pipes
+                        ?.onEach { it.state = 2 }
+                        ?.let { db.pipeDao().insPipes(it) }
+                    building.areas
+                        ?.onEach { it.state = 2 }
+                        ?.let { db.serveAreaDao().insertAreas(it) }
 
                 } catch (e: Exception) {
                     Log.d(
@@ -383,7 +402,7 @@ class AdmRepository(
         try {
             val pipeDao = db.pipeDao()
             val fileDao = db.fileDao()
-            val spaceDao = db.spaceDao()
+            val spaceDao = db.jobSpaceDao()
             val qrCodeDao = db.qrCodeDao()
             val objectDao = db.objectDao()
             val relationDao = db.relationDao()
@@ -391,22 +410,37 @@ class AdmRepository(
             val problemEquipDao = db.problemEquipDao()
             val serveAreaDao = db.serveAreaDao()
 
-            val pipes = pipeDao.getPipeByBuildingId(buildingId).filter { it.state == "1" }
-            val files = fileDao.getFileByBuildingId(buildingId).filter { it.state == "1" }
-            val spaces = spaceDao.getSpaceByBuildingId(buildingId).filter { it.state == "1" }
-            val qrCodes = qrCodeDao.getQrCodeByBuildingId(buildingId).filter { it.state == "1" }
-            val objects = objectDao.getObjectByBuildingId(buildingId).filter { it.state == "1" }
+            val pipes =
+                pipeDao.getPipeByBuildingId(buildingId).filter { it.state == 0 || it.state == 1 }
+            val files =
+                fileDao.getFileByBuildingId(buildingId).filter { it.state == 0 || it.state == 1 }
+            val spaces =
+                spaceDao.getSpaceByBuildingId(buildingId).filter { it.state == 0 || it.state == 1 }
+            val qrCodes = qrCodeDao.getQrCodeByBuildingId(buildingId)
+                .filter { it.state == 0 || it.state == 1 }
+
+            val objects = objectDao.getObjectByBuildingId(buildingId)
+                .filter { it.state == 0 || it.state == 1 }
+
             val relations =
-                relationDao.getRelationByBuildingId(buildingId).filter { it.state == "1" }
+                relationDao.getRelationByBuildingId(buildingId)
+                    .filter { it.state == 0 || it.state == 1 }
+
             val problemArchs =
-                problemArchDao.getProblemByBuildingId(buildingId).filter { it.state == "1" }
+                problemArchDao.getProblemByBuildingId(buildingId)
+                    .filter { it.state == 0 || it.state == 1 }
+
             val problemEquips =
-                problemEquipDao.getProblemByBuildingId(buildingId).filter { it.state == "1" }
+                problemEquipDao.getProblemByBuildingId(buildingId)
+                    .filter { it.state == 0 || it.state == 1 }
 
-            val areas = serveAreaDao.getAreasByBuildingId(buildingId).filter { it.state == "1" }
+            val areas = serveAreaDao.getAreasByBuildingId(buildingId)
+                .filter { it.state == 0 || it.state == 1 }
 
             val deviceId = sp.getString(DEVICE_ID, "") ?: ""
 
+            val jobId = IdUtil.simpleUUID()
+
             val building = Building(
                 buildingId = buildingId,
                 file = files,
@@ -418,6 +452,7 @@ class AdmRepository(
                 problemEquip = problemEquips,
                 areas = areas,
                 pipes = pipes,
+                uploadJobId = jobId
             )
 
             val uploadBuilding = UploadBuilding(
@@ -436,69 +471,36 @@ class AdmRepository(
                     val result = response.data
                     Log.e("AdmViewModel", """uploadBuilding success: $result""")
                     files.forEach {
-                        it.state = "2"
-                        if (it.creationTime.isNullOrEmpty())
-                            it.creationTime = result.timestamp
-                        else
-                            it.modifiedTime = result.timestamp
+                        it.state = 2
                         fileDao.insFile(it)
                     }
                     pipes.forEach {
-                        it.state = "2"
-                        if (it.creationTime.isNullOrEmpty())
-                            it.creationTime = result.timestamp
-                        else
-                            it.modifiedTime = result.timestamp
+                        it.state = 2
                         pipeDao.insPipe(it)
                     }
                     spaces.forEach {
-                        it.state = "2"
-                        if (it.creationTime.isNullOrEmpty())
-                            it.creationTime = result.timestamp
-                        else
-                            it.modifiedTime = result.timestamp
+                        it.state = 2
                         spaceDao.insSpace(it)
                     }
                     objects.forEach {
-                        it.state = "2"
-                        if (it.creationTime.isNullOrEmpty())
-                            it.creationTime = result.timestamp
-                        else
-                            it.modifiedTime = result.timestamp
+                        it.state = 2
                         objectDao.insObject(it)
                     }
                     qrCodes.forEach {
-                        it.state = "2"
-                        if (it.creationTime.isNullOrEmpty())
-                            it.creationTime = result.timestamp
-                        else
-                            it.modifiedTime = result.timestamp
+                        it.state = 2
                         qrCodeDao.insQrCode(it)
                     }
                     relations.forEach {
-                        it.state = "2"
-                        if (it.creationTime.isNullOrEmpty())
-                            it.creationTime = result.timestamp
-                        else
-                            it.modifiedTime = result.timestamp
+                        it.state = 2
                         relationDao.insRelation(it)
                     }
                     problemArchs.forEach {
-                        it.state = "2"
-                        if (it.creationTime.isNullOrEmpty())
-                            it.creationTime = result.timestamp
-                        else
-                            it.modifiedTime = result.timestamp
+                        it.state = 2
                         problemArchDao.insProblem(it)
                     }
                     problemEquips.forEach {
-                        it.state = "2"
-                        if (it.creationTime.isNullOrEmpty())
-                            it.creationTime = result.timestamp
-                        else
-                            it.modifiedTime = result.timestamp
+                        it.state = 2
                         problemEquipDao.insProblem(it)
-
                     }
                 }
             }

+ 2 - 1
demo/src/main/java/com/framework/mvvm/model/vo/AdmRequest.kt

@@ -6,5 +6,6 @@ data class AdmRequest(
     val groupCode: String = "",       // 集团代码
     val buildingId: String = "",      // 建筑id
     val uploadFlag: String = "",      // 设备唯一标识
-    val lastDownloadTime: String = "" // 时间戳
+    val bdtpDownloadTs: Long = 0L,    // bdtp数据库下载同步时间戳
+    val admDownloadTs: Long = 0L      // adm数据库下载同步时间戳
 )

+ 4 - 2
demo/src/main/java/com/framework/mvvm/model/vo/Building.kt

@@ -7,7 +7,7 @@ import com.framework.mvvm.model.db.entity.task.*
  */
 data class Building(
     val buildingId: String,
-    val jobSpace: List<SpaceEntity>?, // outline 需要处理
+    val jobSpace: List<JobSpaceEntity>?,
     val objects: List<ObjectEntity>?,
     val file: List<FileEntity>?,
     val qrCode: List<QrCodeEntity>?,
@@ -16,5 +16,7 @@ data class Building(
     val problemEquip: List<ProblemEquipEntity>?,
     val pipes: List<PipeEntity>?,
     val areas: List<ServeAreaEntity>?,
-    val timestamp: String = ""
+    val bdtpDownloadTs: Long = 0L,   // bdtp数据库下载同步时间戳
+    val admDownloadTs: Long = 0L,     // adm数据库下载同步时间戳
+    val uploadJobId: String = ""
 )

+ 15 - 9
demo/src/main/java/com/framework/mvvm/mv/AdmViewModel.kt

@@ -6,12 +6,9 @@ import androidx.core.content.edit
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
 import cn.sagacloud.cadengine.OkhttpUtil
-import com.framework.app.DEVICE_ID
-import com.framework.app.IP
+import com.framework.app.*
 import com.framework.app.http.FileInfo
 import com.framework.app.http.FileUploadInfo
-import com.framework.app.pathDownloadMap
-import com.framework.app.timestamp
 import com.framework.app.tools.md5
 import com.framework.app.tools.toBytes
 import com.framework.mvvm.model.data.*
@@ -80,7 +77,11 @@ class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
     /**
      *  下载建筑数据
      */
-    fun downloadBuilding(sp: SharedPreferences, block: (() -> Unit)? = null) {
+    fun downloadBuilding(
+        sp: SharedPreferences,
+        isOnlyRelation: Boolean = false,
+        block: (() -> Unit)? = null
+    ) {
         viewModelScope.launch(Dispatchers.IO) {
             val buildings = repository.getBuildings()
             println("downloadBuilding will download : ${buildings.size} $buildings")
@@ -90,13 +91,18 @@ class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
                         userId = "bdtp",
                         projectId = building.projectId!!,
                         groupCode = "BR",
-                        buildingId = building.id,
+                        buildingId = if(isOnlyRelation) "" else building.id,
                         uploadFlag = sp.getString(DEVICE_ID, "") ?: "",
-                        lastDownloadTime = sp.getString(timestamp, "") ?: ""
+                        bdtpDownloadTs = sp.getLong("${building.buildingId}.$BDTP_TS", 0L),
+                        admDownloadTs = sp.getLong("${building.buildingId}.$ADM_TS", 0L)
                     )
                 ) {
-                    println("downloadBuilding save buildingId and Timestamp  -> ${it.buildingId}, ${it.timestamp}")
-                    sp.edit { putString(it.buildingId, it.timestamp) }
+                    Log.e(
+                        "downloadBuilding",
+                        "bdtpDownloadTs:${it.bdtpDownloadTs}, admDownloadTs:${it.admDownloadTs}"
+                    )
+                    sp.edit { putLong("${it.buildingId}.$BDTP_TS", it.bdtpDownloadTs) }
+                    sp.edit { putLong("${it.buildingId}.$ADM_TS", it.admDownloadTs) }
                 }
             }
 

+ 2 - 0
demo/src/main/java/com/sybotan/android/demo/activities/PocActivity.kt

@@ -83,6 +83,8 @@ class PocActivity : BaseActivity(), DIAware {
                     }.create()
                 dialog.show()
             }
+            // 单独下载一边关系数据
+            mVm.downloadBuilding(sp, true)
         }
 
         uploadBtn.setOnClickListener {

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

@@ -68,7 +68,7 @@ class BuildVM(app: Application, b: BaseViewModelInterface, a: BaseActivity) :
                 floorList.sortByDescending { floor -> floor.floorSequenceID }
                 t.add(
                     Build(
-                        createTime = build.creationTime.toString(),
+                        createTime = "",
                         id = build.id,
                         localId = build.localId!!,
                         lastUpdate = "",

+ 2 - 4
demo/src/main/java/com/sybotan/android/demo/viewmodel/ContainerVM.kt

@@ -2,7 +2,7 @@ package com.sybotan.android.demo.viewmodel
 
 import android.app.Application
 import androidx.lifecycle.viewModelScope
-import com.framework.mvvm.model.db.entity.task.*
+import com.framework.mvvm.model.db.entity.task.ObjectEntity
 import com.framework.mvvm.model.repository.AdmRepository
 import com.sybotan.android.demo.activities.BaseActivity
 import com.sybotan.android.demo.bean.ContainerParentBean
@@ -12,8 +12,6 @@ import org.kodein.di.DI
 import org.kodein.di.DIAware
 import org.kodein.di.android.x.closestDI
 import org.kodein.di.instance
-import java.util.*
-import kotlin.collections.ArrayList
 
 
 /**
@@ -63,7 +61,7 @@ class ContainerVM(
     fun deleteObject(item: ObjectEntity, deviceId: String) {
         viewModelScope.launch {
             item.valid = 0
-            item.state = "1"
+            if (item.state == 2) item.state = 1
             repo.insObject(item)
             getConfig(deviceId)
         }

+ 10 - 52
demo/src/main/java/com/sybotan/android/demo/viewmodel/EquipDetailVM.kt

@@ -182,26 +182,11 @@ class EquipDetailVM(
                     classCode = equipEntity.code!!,
                     localId = localId,
                     localName = localName,
-                    groupCode = "",
-                    grouping = 1,
                     buildingId = buildingId,
                     floorId = floorId,
-                    creator = "Android",
-                    createApp = "",
-                    creationTime = "",
-                    modifier = "Android",
-                    modifiedTime = "",
-                    clientDevice = "",
                     clientId = uuid,
-                    updateApp = "",
-                    uploadFlag = "",
-                    valid = 1,
-                    deliveryState = null,
-                    d2mState = null,
-                    virtualCodes = null,
                     infos = gson.toJsonTree(hashMap),
-                    floorMap = null,
-                    state = "1",
+                    state = 0,
                     containerId = if (TextUtils.isEmpty(containerId)) "" else containerId
                 )
                 repo.insObject(objectEntity)
@@ -211,7 +196,7 @@ class EquipDetailVM(
                 equip!!.classCode = equipEntity.code!!
                 equip.localId = localId
                 equip.infos = gson.toJsonTree(hashMap)
-                equip.state = "1"
+                equip.state = 0
                 repo.insObject(equip)
             }
             //插入文件数据
@@ -233,18 +218,11 @@ class EquipDetailVM(
                             fileType = "photo",
                             clientPath = photo.path,
                             refObjId = if (TextUtils.isEmpty(deviceId)) uuid else deviceId,
-                            refInfoCode = "",
-                            remark = "",
                             orderNum = order,
                             projectId = projectId,
                             buildingId = buildingId,
                             floorId = floorId,
-                            creator = "android",
-                            creationTime = "",
-                            modifier = "",
-                            modifiedTime = null,
-                            valid = 1,
-                            uploadFlag = "", state = "1"
+                            state = 0
                         )
                         repo.insFile(file)
                     }
@@ -554,23 +532,11 @@ class EquipDetailVM(
                 buildingId = buildingId,
                 floorId = floorId,
                 graphCode = groupRelConfigEntity.graphCode,
-                graphId = null,
-                groupCode = null,
                 relCode = groupRelConfigEntity.relCode,
-                relValue = null,
                 objFrom = objFrom,
                 objTo = objto,
-                createApp = null,
-                updateApp = null,
-                creator = null,
-                creationTime = "",
-                modifiedTime = "",
-                modifier = null,
-                clientId = null,
-                clientDevice = null,
-                uploadFlag = null,
-                deliveryState = null,
-                valid = 1, d2mState = null, objFromLocalId = null, objToLocalId = null, state = "1"
+                valid = 1,
+                state = 0
             )
             repo.insRelation(relEntity)
             getRelConfig(equipEntity, deviceId, uuid)
@@ -581,7 +547,9 @@ class EquipDetailVM(
      * 增加管道
      */
     fun addPipe(
-        deviceId: String, uuid: String, equipEntity: EquipmentEntity,
+        deviceId: String,
+        uuid: String,
+        equipEntity: EquipmentEntity,
         equip: ObjectEntity,
         groupPipeConfigEntity: PipeConfigEntity,
         direction: String
@@ -618,23 +586,13 @@ class EquipDetailVM(
                 floorId = floorId,
                 objFrom = objFrom,
                 objTo = objto,
-                creator = null,
-                creationTime = "",
-                modifiedTime = "",
-                modifier = null,
-                uploadFlag = null,
-                deliveryState = null,
                 valid = 1,
-                d2mState = null,
-                objFromLocalId = null,
-                objToLocalId = null,
                 direction = pipeDirection,
                 typeFrom = "equipment",
                 typeTo = "equipment",
                 pipeType = groupPipeConfigEntity.pipeType,
                 pipeSubType = groupPipeConfigEntity.pipeSubType,
-                route = null,
-                infos = null, state = "1"
+                state = 0
             )
             repo.insPipe(relEntity)
             getRelConfig(equipEntity, deviceId, uuid)
@@ -689,7 +647,7 @@ class EquipDetailVM(
             hashMap.put("location", z)
             hashMap.put("zRegion", position.z.region)
             obj.infos = gson.toJsonTree(hashMap)
-            obj.state = "1"
+            if (obj.state == 2) obj.state = 1
             repo.insObject(obj)
             mEmitter.SendDirective(UPDATE_LOCATION, null)
         }

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

@@ -1,6 +1,5 @@
 package com.sybotan.android.demo.viewmodel
 
-import android.app.Activity.RESULT_OK
 import android.app.Application
 import android.graphics.PointF
 import android.text.TextUtils
@@ -12,9 +11,6 @@ import cn.sagacloud.android.cadengine.items.TunableSpaceItem
 import cn.sagacloud.android.cadengine.types.*
 import com.framework.mvvm.model.db.entity.*
 import com.framework.mvvm.model.db.entity.task.*
-import com.framework.mvvm.model.db.entity.dict.EquipmentEntity
-import com.framework.mvvm.model.db.entity.dict.PipeConfigEntity
-import com.framework.mvvm.model.db.entity.dict.RelConfigEntity
 import com.framework.mvvm.model.repository.AdmRepository
 import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
@@ -63,7 +59,7 @@ class GraphyVM(
      */
     fun getSpaceJob(from: String, spaceList: ArrayList<SpaceItem>) {
         viewModelScope.launch {
-            var spaceList: ArrayList<SpaceEntity> = ArrayList()
+            var spaceList: ArrayList<JobSpaceEntity> = ArrayList()
             if ("space".equals(from)) {
                 val spaceByArchState1 = repo.getSpaceByArchStateFloorId(floorId, "1")
                 val spaceByArchState2 = repo.getSpaceByArchStateFloorId(floorId, "2")
@@ -175,7 +171,7 @@ class GraphyVM(
                 space.archState = 2
                 space.equipState = 2
             }
-            space.state = "1"
+            space.state()
             repo.insSpace(space)
             mEmitter.SendDirective(SET_JOB, null)
         }
@@ -402,22 +398,15 @@ class GraphyVM(
                         projectId = projectId,
                         buildingId = buildingId,
                         equipId = deviceId,
-                        workId = null,
-                        problemType = null,
                         problemState = 1,
-                        message = null,
-                        creator = null,
-                        creationTime = "",
-                        modifier = null,
-                        modifiedTime = "",
-                        uploadFlag = null,
-                        valid = 1, state = "1"
+                        valid = 1,
+                        state = 0
                     )
                     repo.insProblemEquipEntity(entity)
                 }
             } else {
                 equip?.valid = 0
-                equip?.state = "1"
+                equip?.state()
                 repo.insObject(equip!!)
             }
             getSpaceEq(space)
@@ -457,7 +446,7 @@ class GraphyVM(
             hashMap.put("location", z)
             hashMap.put("zRegion", position.z.region)
             obj.infos = gson.toJsonTree(hashMap)
-            obj.state = "1"
+            obj.state()
             repo.insObject(obj)
             mEmitter.SendDirective(UPDATE_LOCATION, null)
         }

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

@@ -112,7 +112,7 @@ class SpaceDetailVM(
         viewModelScope.launch {
             val spaceObj = repo.getObject(space.id!!)
             spaceObj!!.infos = gson.toJsonTree(hashMap)
-            spaceObj.state = "1"
+            spaceObj.state()
             repo.insObject(spaceObj)
             mActivity.setResult(RESULT_OK)
             mActivity.finish()

+ 12 - 46
demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceMapVM.kt

@@ -13,10 +13,10 @@ 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.state
 import com.framework.mvvm.model.db.entity.task.*
 import com.framework.mvvm.model.repository.AdmRepository
 import com.google.gson.Gson
-import com.google.gson.JsonArray
 import com.google.gson.reflect.TypeToken
 import com.sybotan.android.demo.activities.BaseActivity
 import com.sybotan.android.demo.bean.result.*
@@ -29,8 +29,6 @@ import org.kodein.di.DI
 import org.kodein.di.DIAware
 import org.kodein.di.android.x.closestDI
 import org.kodein.di.instance
-import java.util.*
-import kotlin.collections.ArrayList
 
 
 /**
@@ -56,7 +54,7 @@ class SpaceMapVM(
      */
     fun getSpaceJob() {
         viewModelScope.launch {
-            val spaceList: ArrayList<SpaceEntity> = ArrayList()
+            val spaceList: ArrayList<JobSpaceEntity> = ArrayList()
             val spaceByArchState1 = repo.getSpaceByArchStateFloorId(floorId, "1")
             val spaceByArchState2 = repo.getSpaceByArchStateFloorId(floorId, "2")
             spaceList.addAll(spaceByArchState1)
@@ -174,17 +172,10 @@ class SpaceMapVM(
                 projectId = projectId,
                 buildingId = buildingId,
                 geomType = if (array.size == 1) "point" else "line",
-                workId = "",
-                problemType = "",
                 problemState = 1,
                 message = content,
-                creator = "",
-                creationTime = "",
-                modifier = "android",
-                modifiedTime = "",
-                uploadFlag = "",
                 valid = 1,
-                state = "1",
+                state = 0,
                 geom = toJson
             )
             repo.insProblem(problem)
@@ -206,18 +197,11 @@ class SpaceMapVM(
                         fileType = "photo",
                         clientPath = photo.path,
                         refObjId = toString,
-                        refInfoCode = "",
-                        remark = "",
                         orderNum = order,
                         projectId = projectId,
                         buildingId = buildingId,
                         floorId = floorId,
-                        creator = "android",
-                        creationTime = "",
-                        modifier = "",
-                        modifiedTime = null,
-                        valid = 1,
-                        uploadFlag = "", state = "1"
+                        state = 0
                     )
                     repo.insFile(file)
                 }
@@ -306,12 +290,8 @@ class SpaceMapVM(
                 buildingId = buildingId,
                 floorId = floorId,
                 remark = "wall",
-                creator = "Anroid",
-                creationTime = "",
-                modifier = "Android",
-                modifiedTime = "",
-                valid = 1,
-                uploadFlag = "", state = "1", location = toJson
+                state = 0,
+                location = toJson
             )
             repo.insQrcode(qrcode)
             mEmitter.SendDirective(BIND_QECODE, null)
@@ -376,7 +356,7 @@ class SpaceMapVM(
                     space.equipState = 2
                 }
             }
-            space.state = "1"
+            space.state()
             repo.insSpace(space)
             mEmitter.SendDirective(SET_JOB, null)
         }
@@ -416,21 +396,14 @@ class SpaceMapVM(
                     projectId = projectId,
                     buildingId = buildingId,
                     floorId = floorId,
-                    state = "1",
-                    uploadFlag = null,
-                    valid = 1,
-                    creator = null,
-                    creationTime = null,
-                    modifier = null,
-                    modifiedTime = null,
+                    state = 0,
                     objId = deviceId,
                     geomType = "polygon",
                     geom = gson.toJsonTree(geom),
-                    serveType = null, remark = null
                 )
             } else {
                 entity.geom = gson.toJsonTree(geom)
-                entity.state = "1"
+                entity.state()
             }
             repo.insServeArea(entity)
             mActivity.finish()
@@ -450,21 +423,14 @@ class SpaceMapVM(
                     projectId = projectId,
                     buildingId = buildingId,
                     floorId = floorId,
-                    state = "1",
-                    uploadFlag = null,
-                    valid = 1,
-                    creator = null,
-                    creationTime = null,
-                    modifier = null,
-                    modifiedTime = null,
+                    state = 0,
                     objId = deviceId,
                     geomType = "polygon",
                     geom = gson.toJsonTree(geom),
-                    serveType = null, remark = null
                 )
             } else {
                 entity.geom = gson.toJsonTree(geom)
-                entity.state = "1"
+                entity.state()
             }
             repo.insServeArea(entity)
             mActivity.finish()
@@ -498,7 +464,7 @@ class SpaceMapVM(
             val entity = repo.getServeAreaByObjId(deviceId)
             if (entity != null) {
                 entity.valid = 0
-                entity.state = "1"
+                entity.state()
                 repo.insServeArea(entity)
             }
         }