Browse Source

@task: upload button

bai 3 years ago
parent
commit
d80be18f91

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

@@ -9,4 +9,5 @@ const val tencentIP = "http://82.157.28.170:8876/"
 
 const val pathDownloadMap = "adm/downloadMap?key="
 
-const val deviceId = "device_id"
+const val deviceId = "device_id"
+const val timestamp = "timestamp"

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

@@ -34,6 +34,8 @@ val httpModule = DI.Module("netModule") {
         singleton {
             OkHttpClient.Builder()
                 .connectTimeout(10, TimeUnit.SECONDS)
+                .readTimeout(300, TimeUnit.SECONDS)
+                .writeTimeout(300, TimeUnit.SECONDS)
                 .addInterceptor(instance<HttpLoggingInterceptor>())
                 .build()
         }

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

@@ -28,7 +28,7 @@ data class SpaceEntity(
     @ColumnInfo(name = "modifier") val modifier: String?,             // 修改人
     @ColumnInfo(name = "modified_time") val modifiedTime: String?,    // 修改时间
     @ColumnInfo(name = "valid") val valid: Int?,                      // 合法标识
-    @ColumnInfo(name = "upload_flag") val uploadFlag: Int?,           // app端上传数据标记
+    @ColumnInfo(name = "upload_flag") val uploadFlag: String?,           // app端上传数据标记
     @ColumnInfo(name = "outline")
     @Contextual
     val outline: JSONObject?,               // 空间边界,模型更新空间变化时,用来做匹配计算

+ 8 - 3
demo/src/main/java/com/framework/mvvm/model/repository/AdmRepository.kt

@@ -175,10 +175,11 @@ class AdmRepository(
     /**
      * 请求建筑数据
      */
-    suspend fun requestBuilding(request: AdmRequest) {
+    suspend fun requestBuilding(request: AdmRequest, block: ((Building) -> Unit)? = null) {
         request(
             from = { api.getBuilding(request) },
             to = { building ->
+                block?.invoke(building)
                 val file = building.file
                 val space = building.jobSpace
                 val objects = building.objects
@@ -202,7 +203,8 @@ class AdmRepository(
                         e.message ?: "requestBuilding has error"
                     )
                 }
-            }
+            },
+            error ={ println("error: $it")}
         )
     }
 
@@ -228,6 +230,9 @@ class AdmRepository(
         db.objectDao().updateObject(obj)
     }
 
+    /**
+     * 上传建筑数据
+     */
     suspend fun uploadBuilding(buildingId: String): Response<Building> {
         val pipes = db.pipeDao().getPipeByBuildingId(buildingId)
         val files = db.fileDao().getFileByBuildingId(buildingId)
@@ -249,7 +254,7 @@ class AdmRepository(
             relations = relations,
             problemArch = problemArchs,
             problemEquip = problemEquips,
-            pipes = pipes
+            pipes = pipes,
         )
 
         val uploadBuilding = UploadBuilding(

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

@@ -1,13 +1,13 @@
 package com.framework.mvvm.model.vo
 
-import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
 
 @Serializable
 data class AdmRequest(
-    val userId: String = "",      // 用户id
-    val projectId: String = "",   // 项目Id
-    val groupCode: String = "",   // 集团代码
-    val buildingId: String = "",  // 建筑id
-    val uploadFlag: String = ""   // 设备唯一标识
+    val userId: String = "",          // 用户id
+    val projectId: String = "",       // 项目Id
+    val groupCode: String = "",       // 集团代码
+    val buildingId: String = "",      // 建筑id
+    val uploadFlag: String = "",      // 设备唯一标识
+    val lastDownloadTime: String = "" // 时间戳
 )

+ 1 - 0
demo/src/main/java/com/framework/mvvm/model/vo/Building.kt

@@ -17,4 +17,5 @@ data class Building(
     val problemArch: List<ProblemArchEntity>,
     val problemEquip: List<ProblemEquipEntity>,
     val pipes: List<PipeEntity>,
+    val timestamp: String = ""
 )

+ 11 - 3
demo/src/main/java/com/framework/mvvm/mv/AdmViewModel.kt

@@ -12,6 +12,7 @@ import com.framework.mvvm.model.data.SuccessResponse
 import com.framework.mvvm.model.db.entity.ObjectEntity
 import com.framework.mvvm.model.repository.AdmRepository
 import com.framework.mvvm.model.vo.AdmRequest
+import com.framework.mvvm.model.vo.Building
 import com.framework.mvvm.model.vo.FloorInfo
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.SharingStarted.Companion.WhileSubscribed
@@ -24,7 +25,7 @@ import kotlinx.serialization.json.Json
 
 
 class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
-    
+
     /**
      * 请求架构数据
      */
@@ -46,9 +47,9 @@ class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
     /**
      * 请求建筑数据
      */
-    fun requestBuilding(request: AdmRequest) {
+    fun requestBuilding(request: AdmRequest, block: ((Building) -> Unit)? = null) {
         viewModelScope.launch(Dispatchers.IO) {
-            repository.requestBuilding(request)
+            repository.requestBuilding(request, block)
             val floors = repository.getFloors()
             floors.forEach {
                 val strInfo = it.strInfos
@@ -99,4 +100,11 @@ class AdmViewModel(private val repository: AdmRepository) : ViewModel() {
         started = WhileSubscribed(5000),
         initialValue = arrayListOf()
     )
+
+    /**
+     * 获取本地数据中的建筑信息
+     */
+    suspend fun getBuildings(): List<ObjectEntity> {
+        return repository.getBuildings()
+    }
 }

+ 43 - 21
demo/src/main/java/com/sybotan/android/demo/activities/PocActivity.kt

@@ -4,20 +4,21 @@ import android.Manifest
 import android.content.SharedPreferences
 import android.content.pm.PackageManager
 import android.os.Bundle
+import android.widget.Button
 import androidx.appcompat.app.AppCompatActivity
 import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.core.app.ActivityCompat
 import androidx.core.content.edit
-import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.lifecycleScope
-import androidx.lifecycle.repeatOnLifecycle
+import com.framework.app.deviceId
+import com.framework.app.timestamp
 import com.framework.app.tools.MacUtil
 import com.framework.mvvm.model.vo.AdmRequest
 import com.framework.mvvm.mv.AdmViewModel
 import com.sybotan.android.demo.R
 import com.sybotan.android.demo.activities.poc.SceneActivity
 import com.sybotan.android.demo.activities.poc.SpaceActivity
-import kotlinx.coroutines.flow.collect
+import com.sybotan.android.demo.tools.ToastUtils
 import kotlinx.coroutines.launch
 import org.jetbrains.anko.startActivity
 import org.kodein.di.DI
@@ -35,10 +36,49 @@ class PocActivity : AppCompatActivity(), DIAware {
 
     private val REQUEST_EXTERNAL_STORAGE = 1 // 不可改
 
+    private lateinit var downloadBtn: Button
+
+    private lateinit var uploadBtn: Button
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_poc)
         checkStoragePermission()
+        downloadBtn = findViewById(R.id.downloadBtn)
+        uploadBtn = findViewById(R.id.uploadBtn)
+        downloadBtn.setOnClickListener {
+            lifecycleScope.launch {
+                val buildings = mVm.getBuildings()
+                println("download buildings: ${buildings.size} $buildings")
+                for (building in buildings) {
+                    mVm.requestBuilding(
+                        AdmRequest(
+                            userId = "bdtp",
+                            projectId = building.projectId,
+                            groupCode = "BR",
+                            buildingId = building.id,
+                            uploadFlag = sp.getString(deviceId, "") ?: "",
+                            lastDownloadTime = sp.getString(timestamp, "") ?: ""
+                        )
+                    ) {
+                        println("buildingIdTimestamp  -> ${it.buildingId}, ${it.timestamp}")
+                        sp.edit { putString(it.buildingId, it.timestamp) }
+                    }
+                }
+            }
+        }
+
+        uploadBtn.setOnClickListener {
+            lifecycleScope.launch {
+                val buildings = mVm.getBuildings()
+                println("upload buildings: $buildings")
+                for (building in buildings) {
+                    mVm.uploadBuilding(building.id)
+                }
+                ToastUtils.showMyToast("建筑数据上传完成")
+            }
+        }
+
         val spaceCL = findViewById<ConstraintLayout>(R.id.spaceCL)
         spaceCL.setOnClickListener {
             startActivity<SpaceActivity>()
@@ -103,24 +143,6 @@ class PocActivity : AppCompatActivity(), DIAware {
                 putString("deviceId", mac)
             }
 
-            lifecycleScope.launch {
-                lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
-                    mVm.buildings.collect { buildings ->
-                        println("buildings in flow: $buildings")
-                        for (building in buildings) {
-                            mVm.requestBuilding(
-                                AdmRequest(
-                                    userId = "bdtp",
-                                    projectId = building.projectId,
-                                    groupCode = "BR",
-                                    buildingId = building.id!!,
-                                    uploadFlag = sp.getString("deviceId", "") ?: ""
-                                )
-                            )
-                        }
-                    }
-                }
-            }
         }
     }
 }

+ 23 - 2
demo/src/main/res/layout/activity_poc.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
@@ -94,5 +93,27 @@
             app:layout_constraintTop_toTopOf="@+id/surIV" />
     </androidx.constraintlayout.widget.ConstraintLayout>
 
+    <Button
+        android:id="@+id/downloadBtn"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="下载建筑数据"
+        android:textSize="18sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <Button
+        android:id="@+id/uploadBtn"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dp"
+        android:text="上传楼层数据"
+        android:textSize="18sp"
+        app:layout_constraintEnd_toEndOf="@+id/downloadBtn"
+        app:layout_constraintStart_toStartOf="@+id/downloadBtn"
+        app:layout_constraintTop_toBottomOf="@+id/downloadBtn" />
+
 
 </androidx.constraintlayout.widget.ConstraintLayout>