Browse Source

add poc2.0需求

lihao1 3 years ago
parent
commit
4383df4c8b

+ 1 - 0
cadengine/src/main/java/cn/sagacloud/android/cadengine/items/TunableSpaceItem.kt

@@ -1,6 +1,7 @@
 package cn.sagacloud.android.cadengine.items
 
 import android.graphics.*
+import android.os.Parcelable
 import android.text.TextPaint
 import cn.sagacloud.android.cadengine.Opt
 import cn.sagacloud.android.cadengine.types.TunableSpace

+ 3 - 3
cadengine/src/main/java/cn/sagacloud/android/cadengine/types/PointZ.java

@@ -7,11 +7,11 @@ import com.google.gson.annotations.SerializedName;
  * Date: 2021/6/10
  */
 public class PointZ {
-    @SerializedName("X")
+    @SerializedName("x")
     public float x;
-    @SerializedName("Y")
+    @SerializedName("y")
     public float y;
-    @SerializedName("Z")
+    @SerializedName("z")
     public float z;
 
     public PointZ() {

+ 32 - 1
cadengine/src/main/java/cn/sagacloud/android/cadengine/types/TunableSpace.kt

@@ -1,15 +1,18 @@
 package cn.sagacloud.android.cadengine.types
 
 import android.graphics.PointF
+import android.os.Parcel
+import android.os.Parcelable
 
 /**
  * 可调节空间空间 item 类
  *
  */
-class TunableSpace {
+class TunableSpace() :Parcelable {
     /** 轮廓线  */
     var outLine: ArrayList<ArrayList<PointZ>>? = null
     var name: String? = null
+    var objectEntity: String? = null
 
     /**
      *  {
@@ -36,4 +39,32 @@ class TunableSpace {
     var jobStatus: String = ""
     var id: String? = null
     var localName: String? = null
+
+    constructor(parcel: Parcel) : this() {
+        name = parcel.readString()
+        jobStatus = parcel.readString()
+        id = parcel.readString()
+        localName = parcel.readString()
+    }
+
+    override fun writeToParcel(parcel: Parcel, flags: Int) {
+        parcel.writeString(name)
+        parcel.writeString(jobStatus)
+        parcel.writeString(id)
+        parcel.writeString(localName)
+    }
+
+    override fun describeContents(): Int {
+        return 0
+    }
+
+    companion object CREATOR : Parcelable.Creator<TunableSpace> {
+        override fun createFromParcel(parcel: Parcel): TunableSpace {
+            return TunableSpace(parcel)
+        }
+
+        override fun newArray(size: Int): Array<TunableSpace?> {
+            return arrayOfNulls(size)
+        }
+    }
 }

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

@@ -14,6 +14,12 @@ interface ObjectDao {
     @Query("select * from object where id = :id")
     suspend fun getObjectById(id: String): ObjectEntity
 
+    @Query("select * from object where obj_type = :objType")
+    suspend fun getObjectByObjType(objType: String): List<ObjectEntity>
+
+    @Query("select * from object where building_id = :buildingId and obj_type=:type")
+    suspend fun getObjectByBuildingId(buildingId: String, type: String): List<ObjectEntity>
+
     @Insert(onConflict = OnConflictStrategy.REPLACE)
     suspend fun insObject(vararg obj: ObjectEntity)
 

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

@@ -14,6 +14,15 @@ interface SpaceDao {
     @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>
+
     @Insert(onConflict = OnConflictStrategy.REPLACE)
     suspend fun insSpace(vararg space: SpaceEntity)
 

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

@@ -5,6 +5,7 @@ import androidx.annotation.NonNull
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.PrimaryKey
+import cn.sagacloud.android.cadengine.types.PointZ
 import kotlinx.serialization.Contextual
 import kotlinx.serialization.Serializable
 import org.json.JSONObject
@@ -65,7 +66,21 @@ data class Infos(
     val options: ArrayList<Options>,
     val dataType: String,
     val inputType: String,
-    val code: String
+    val code: String,
+    val floorMap: String
 )
 
 data class Options(val txt: String, val `val`: String)
+
+data class StrInfos(
+    val floorMap: String,
+    val state: String,
+    val height: Int,
+    val outline: ArrayList<ArrayList<ArrayList<PointZ>>>
+)
+
+data class StrInfosforBuild(
+    val floorMap: String,
+    val state: String,
+    val height: Int,
+)

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

@@ -18,8 +18,8 @@ data class SpaceEntity(
     @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") val archState: Int?,             // 建筑结构核查任务状态(0:待核查;1:核查中;2:核查完毕)
-    @ColumnInfo(name = "equip_state") val equipState: Int?,           // 设备勘测任务状态(0:待勘测;1:勘测中;2:勘测完毕)
+    @ColumnInfo(name = "arch_state") var archState: Int?,             // 建筑结构核查任务状态(0:待核查;1:核查中;2:核查完毕)
+    @ColumnInfo(name = "equip_state") var equipState: Int?,           // 设备勘测任务状态(0:待勘测;1:勘测中;2:勘测完毕)
     @ColumnInfo(name = "project_id") val projectId: String?,          // 项目id
     @ColumnInfo(name = "building_id") val buildingId: String?,        // 建筑id
     @ColumnInfo(name = "floor_id") val floorId: String?,              // 楼层id

+ 32 - 0
demo/src/main/java/com/framework/mvvm/model/repository/AdmRepository.kt

@@ -77,6 +77,38 @@ class AdmRepository(
         return db.infosConfigDao().getConfigByObjType(type)
     }
 
+    suspend fun insObject(`object`: ObjectEntity) {
+        return db.objectDao().insObject(`object`)
+    }
+
+    suspend fun getObject(objId: String): ObjectEntity {
+        return db.objectDao().getObjectById(objId)
+    }
+
+    suspend fun getSpaceByArchStateFloorId(id: String, archState: String): List<SpaceEntity> {
+        return db.spaceDao().getSpaceByArchStateFloorId(id, archState)
+    }
+
+    suspend fun getSpaceByEquipStateFloorId(id: String, equipState: String): List<SpaceEntity> {
+        return db.spaceDao().getSpaceByEquipStateFloorId(id, equipState)
+    }
+
+    suspend fun getBuildByObjType(objType: String): List<ObjectEntity> {
+        return db.objectDao().getObjectByObjType(objType)
+    }
+
+    suspend fun getFloorByBuildingId(buildingId: String, type: String): List<ObjectEntity> {
+        return db.objectDao().getObjectByBuildingId(buildingId, type)
+    }
+
+    suspend fun getSpaceBySpaceId(id: String): SpaceEntity {
+        return db.spaceDao().getSpaceBySpaceId(id)
+    }
+
+    suspend fun insSpace(space: SpaceEntity) {
+        return db.spaceDao().insSpace(space)
+    }
+
     /**
      * 请求框架数据
      */

+ 27 - 13
demo/src/main/java/com/sybotan/android/demo/activities/EquipDetailActivity.kt

@@ -11,6 +11,7 @@ import android.view.View
 import android.widget.EditText
 import android.widget.ImageView
 import androidx.core.widget.NestedScrollView
+import androidx.recyclerview.widget.GridLayoutManager
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.bumptech.glide.Glide
@@ -18,6 +19,7 @@ import com.sybotan.android.demo.R
 import com.sybotan.android.demo.adapter.StaticInfoAdapter
 import cn.sagacloud.android.cadengine.types.Photos
 import com.framework.mvvm.model.db.entity.Infos
+import com.sybotan.android.demo.adapter.PictureAdapter
 import com.sybotan.android.demo.retrofit.Constant
 import com.sybotan.android.demo.tools.LocalDataOperation.*
 import com.sybotan.android.demo.tools.PictureUtils
@@ -38,10 +40,15 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
     //选择图片
     private val REQUEST_CODE_PIC = 0X102
 
+    private lateinit var info: Infos
     private lateinit var recycler: RecyclerView
+    private lateinit var viewRecycler: RecyclerView
     private lateinit var mtextContent: EditText
     private lateinit var root: NestedScrollView
+    private lateinit var pictureAdapter: PictureAdapter
     var list = ArrayList<Infos>()
+    val beans: ArrayList<Photos> = ArrayList()
+    private lateinit var staticInfoAdapter: StaticInfoAdapter
 
     // 自定义图片加载器
     private val loader =
@@ -61,10 +68,18 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
 
     private fun initView() {
         recycler = findViewById(R.id.recycler)
+        viewRecycler = findViewById(R.id.viewRecycler)
         mtextContent = findViewById(R.id.mtextContent)
         root = findViewById(R.id.root)
         recycler.layoutManager = LinearLayoutManager(this)
+        viewRecycler.layoutManager = GridLayoutManager(this, 3)
         mtextContent.setOnTouchListener(this)
+        val photo = Photos()
+        photo.itemType = 1
+        beans.add(photo)
+        val pictureAdapter = PictureAdapter(this, beans, "", false, 0, 85)
+        viewRecycler.adapter = pictureAdapter
+        pictureAdapter.setOnPicAdd { addPic() }
     }
 
     //重写onTouch方法
@@ -92,9 +107,10 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
     }
 
     private fun initData() {
-        val adapter = StaticInfoAdapter(this, list)
-        adapter.setOnAddPic { addPic() }
-        recycler.adapter = adapter
+        staticInfoAdapter = StaticInfoAdapter(this, list)
+        staticInfoAdapter.setOnAddPic { addPic()
+            this.info = it}
+        recycler.adapter = staticInfoAdapter
     }
 
     private fun addPic() {
@@ -151,23 +167,19 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                                         e.printStackTrace()
                                     }
                                     if ("success" == resultString) {
-                                        val photos =
-                                            Photos()
-                                        photos.itemType = 2
+                                        val photos = Photos()
+                                        photos.itemType = 1
                                         photos.path = path
                                         photos.key = key
-//                                        viewModel.picPathList.add(photos)
-//                                        viewModel.content.pictures.add(key)
+                                        beans.add(photos)
                                     }
                                 }
                             } else {
-                                val photos =
-                                    Photos()
-                                photos.itemType = 2
+                                val photos = Photos()
+                                photos.itemType = 1
                                 photos.path = path
                                 photos.key = key
-//                                viewModel.picPathList.add(photos)
-//                                viewModel.content.pictures.add(key)
+                                beans.add(photos)
                             }
                         }
                     }
@@ -175,6 +187,8 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                 }
                 DEAL_DATA_NEXT -> {
                     ToastUtils.showMyToast("图片上传完毕")
+                    pictureAdapter.notifyDataSetChanged()
+                    staticInfoAdapter.hashMap.put(info.code, beans)
                 }
                 DEAL_DATA_ERROR -> {
                     ToastUtils.showMyToast("图片上传失败")

+ 16 - 6
demo/src/main/java/com/sybotan/android/demo/activities/GraphyActivity.kt

@@ -814,6 +814,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                                 bundle.putString("floorId", floorId)
                                 bundle.putString("projectId", projectId)
                                 bundle.putString("spaceId", scene.choseSpace!!.data.id)
+                                bundle.putParcelable("space", scene.choseSpace!!.data)
                                 intent.putExtra("floor", bundle)
                                 startActivity(intent)
                             }
@@ -837,6 +838,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                                 bundle.putString("floorId", floorId)
                                 bundle.putString("projectId", projectId)
                                 bundle.putString("spaceId", scene.choseSpace!!.data.id)
+                                bundle.putParcelable("space", scene.choseSpace!!.data)
                                 intent.putExtra("floor", bundle)
                                 startActivity(intent)
                             }
@@ -860,6 +862,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                     spaceStructure.visibility = View.GONE
                     doneSpaceStructure.visibility = View.GONE
                     qrcodeLl.visibility = View.GONE
+                    qrcodeLocation.setText("(0,0)")
                     quesDetail.visibility = View.GONE
                     equipLl.visibility = View.GONE
                     drawLl.visibility = View.GONE
@@ -1020,6 +1023,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
         /** 取消绑定二维码 */
         qrcodeCancel.setOnClickListener {
             qrcodeLl.visibility = View.GONE
+            qrcodeLocation.setText("(0,0)")
             spaceStructure.visibility = View.VISIBLE
             scene.type = "normal"
             scene.item?.let { it1 -> scene.removeItem(it1) }
@@ -1039,6 +1043,10 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
 
         /** 绑定二维码下一步 */
         qrcodeNext.setOnClickListener {
+            if (qrcodeLocation.text.equals("(0,0)")) {
+                ToastUtils.showMyToast("请扎点")
+                return@setOnClickListener
+            }
             val intent = Intent(this@GraphyActivity, CaptureActivity::class.java)
             startActivityForResult(intent, REQUEST_CODE_SCAN)
         }
@@ -1087,7 +1095,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
 
         /** 添加设备下一步 */
         equipNext.setOnClickListener {
-            val intent = Intent(this, DeviceActivity::class.java)
+            val intent = Intent(this, EquipDetailActivity::class.java)
             val bundle = Bundle()
             val positon = Position()
             positon.x = scene.point.mX.toString()
@@ -1182,6 +1190,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                             val tunableSpace = TunableSpace()
                             tunableSpace.apply {
                                 outLine = model.outline.get(0)
+                                objectEntity = gson.toJson(model.objectEntity)
                                 this.name = model.name
 //                                initSpaceState(tunableSpace, model.archState!!, model.equipState!!)
                                 jobStatus = model.job
@@ -1211,7 +1220,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                     problemDesc.setText("")
                     Toast.makeText(this, "记录成功", Toast.LENGTH_SHORT).show()
                     graphyVM.getProblem(scene.choseSpace)
-                    graphyVM.getSpaceJob(from)
+                    graphyVM.getSpaceJob(from, scene.spaceList)
                 }
 
                 /** 查询空间核查问题 */
@@ -1268,6 +1277,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                     Toast.makeText(this, "绑定成功", Toast.LENGTH_SHORT).show()
                     scene.type = "normal"
                     qrcodeLl.visibility = View.GONE
+                    qrcodeLocation.setText("(0,0)")
                     spaceStructure.visibility = View.VISIBLE
                     scene.removeItem(scene.item!!)
                     scene.qrcodeItemList.clear()
@@ -1295,12 +1305,12 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                 GraphyVM.SET_JOB -> {
                     Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show()
                     refreshAll()
-                    graphyVM.getSpaceJob(from)
+                    graphyVM.getSpaceJob(from, scene.spaceList)
                 }
 
                 /** 设置空间核查问题的信息和状态 */
                 GraphyVM.SET_PROBLEM -> {
-                    graphyVM.getSpaceJob(from)
+                    graphyVM.getSpaceJob(from, scene.spaceList)
                 }
 
                 /** 查询空间下的设备(所在关系) */
@@ -1414,7 +1424,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                 }
             }
         }, this, buildingId, floorId, projectId)
-        graphyVM.getSpaceJob(from)
+        graphyVM.getSpaceJob(from, scene.spaceList)
     }
 
     private fun initSpaceState(space: TunableSpace, archState: Int, equipState: Int) {
@@ -1618,7 +1628,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                     }
                 }
                 quesDetail.visibility = View.GONE
-                graphyVM.getSpaceJob(from)
+                graphyVM.getSpaceJob(from, scene.spaceList)
             }
         }
 

+ 19 - 1
demo/src/main/java/com/sybotan/android/demo/activities/SpaceDetailActivity.kt

@@ -7,6 +7,7 @@ import android.os.Bundle
 import android.text.TextUtils
 import android.util.Log
 import android.widget.ImageView
+import android.widget.TextView
 import androidx.core.widget.NestedScrollView
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
@@ -14,6 +15,7 @@ import com.bumptech.glide.Glide
 import com.sybotan.android.demo.R
 import com.sybotan.android.demo.adapter.StaticInfoAdapter
 import cn.sagacloud.android.cadengine.types.Photos
+import cn.sagacloud.android.cadengine.types.TunableSpace
 import com.framework.mvvm.model.db.entity.Infos
 import com.sybotan.android.demo.retrofit.Constant
 import com.sybotan.android.demo.tools.LocalDataOperation
@@ -33,6 +35,8 @@ import java.io.File
  * Date: 2021/9/27
  */
 class SpaceDetailActivity : BaseActivity() {
+    private lateinit var info: Infos
+
     /** 建筑Id */
     private lateinit var buildingId: String
 
@@ -42,6 +46,8 @@ class SpaceDetailActivity : BaseActivity() {
     /** 项目Id */
     private lateinit var projectId: String
     private lateinit var spaceId: String
+    private lateinit var space: TunableSpace
+    val beans: ArrayList<Photos> = ArrayList()
 
     //选择图片
     private val REQUEST_CODE_PIC = 0X102
@@ -59,6 +65,7 @@ class SpaceDetailActivity : BaseActivity() {
         }
     private lateinit var recycler: RecyclerView
     private lateinit var root: NestedScrollView
+    private lateinit var btnSubmit: TextView
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -71,7 +78,10 @@ class SpaceDetailActivity : BaseActivity() {
     private lateinit var staticInfoAdapter: StaticInfoAdapter
 
     private fun initData() {
-        staticInfoAdapter.setOnAddPic { addPic() }
+        staticInfoAdapter.setOnAddPic {
+            addPic()
+            this.info = it
+        }
         recycler.adapter = staticInfoAdapter
         graphyVM = GraphyVM(this.application, { name, params ->
             when (name) {
@@ -90,10 +100,15 @@ class SpaceDetailActivity : BaseActivity() {
         floorId = floor.getString("floorId")!!
         projectId = floor.getString("projectId")!!
         spaceId = floor.getString("spaceId")!!
+        space = floor.getParcelable("space")!!
         recycler = findViewById(R.id.recycler)
         root = findViewById(R.id.root)
+        btnSubmit = findViewById(R.id.btnSubmit)
         recycler.layoutManager = LinearLayoutManager(this)
         staticInfoAdapter = StaticInfoAdapter(this, list)
+        btnSubmit.setOnClickListener {
+            graphyVM.refreshObject(space, staticInfoAdapter.hashMap)
+        }
     }
 
     private fun addPic() {
@@ -155,6 +170,7 @@ class SpaceDetailActivity : BaseActivity() {
                                         photos.itemType = 0
                                         photos.path = path
                                         photos.key = key
+                                        beans.add(photos)
 //                                        viewModel.picPathList.add(photos)
 //                                        viewModel.content.pictures.add(key)
                                     }
@@ -165,6 +181,7 @@ class SpaceDetailActivity : BaseActivity() {
                                 photos.itemType = 0
                                 photos.path = path
                                 photos.key = key
+                                beans.add(photos)
 //                                viewModel.picPathList.add(photos)
 //                                viewModel.content.pictures.add(key)
                             }
@@ -174,6 +191,7 @@ class SpaceDetailActivity : BaseActivity() {
                 }
                 LocalDataOperation.DEAL_DATA_NEXT -> {
                     ToastUtils.showMyToast("图片上传完毕")
+                    staticInfoAdapter.hashMap.put(info.code, beans)
                 }
                 LocalDataOperation.DEAL_DATA_ERROR -> {
                     ToastUtils.showMyToast("图片上传失败")

+ 3 - 3
demo/src/main/java/com/sybotan/android/demo/adapter/StaticInfoAdapter.java

@@ -131,11 +131,11 @@ public class StaticInfoAdapter extends BaseRecyclerViewAdapter<Infos> {
                     @Override
                     public void onPicAdd() {
                         if (addPic != null) {
-                            addPic.onAddPic();
+                            addPic.onAddPic(info);
                         }
                     }
                 });
-                RecyclerView recycler = holder.getView(R.id.recycler);
+                RecyclerView recycler = holder.getView(R.id.viewRecycler);
                 recycler.setLayoutManager(new GridLayoutManager(mContext, 3));
                 recycler.setAdapter(pictureAdapter);
 //                return PICTURE;
@@ -292,7 +292,7 @@ public class StaticInfoAdapter extends BaseRecyclerViewAdapter<Infos> {
     }
 
     public interface AddPic {
-        void onAddPic();
+        void onAddPic(Infos info);
     }
 
     public void setOnAddPic(AddPic addPic) {

+ 3 - 0
demo/src/main/java/com/sybotan/android/demo/bean/result/SpaceJobModel.java

@@ -1,5 +1,6 @@
 package com.sybotan.android.demo.bean.result;
 
+import com.framework.mvvm.model.db.entity.ObjectEntity;
 import com.sybotan.android.demo.bean.BaseModel;
 
 import java.util.ArrayList;
@@ -25,4 +26,6 @@ public class SpaceJobModel extends BaseModel {
     //    public String statistics;
     public String job;
     public ArrayList<ArrayList<ArrayList<PointZ>>> outline = new ArrayList<>();
+
+    public ObjectEntity objectEntity;
 }

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

@@ -1,25 +1,94 @@
 package com.sybotan.android.demo.viewmodel
 
 import android.app.Application
+import android.text.TextUtils
+import androidx.lifecycle.viewModelScope
+import com.framework.mvvm.model.db.entity.StrInfosforBuild
+import com.framework.mvvm.model.repository.AdmRepository
+import com.google.gson.Gson
 import com.sybotan.android.demo.activities.BaseActivity
-import com.sybotan.android.demo.entitiies.Build
-import com.sybotan.android.demo.retrofit.BaseObserver
+import com.sybotan.android.demo.entitiies.*
 import com.sybotan.android.demo.retrofit.BaseViewModelInterface
-import com.sybotan.android.demo.retrofit.RetrofitFactory
+import kotlinx.coroutines.launch
+import org.kodein.di.DI
+import org.kodein.di.DIAware
+import org.kodein.di.android.x.closestDI
+import org.kodein.di.instance
 
 class BuildVM(app: Application, b: BaseViewModelInterface, a: BaseActivity) :
-    BaseViewModel(app, b, a) {
+    BaseViewModel(app, b, a), DIAware {
     companion object {
         const val BUILD_TYPE = "BUILD_TYPE"
     }
 
+    override val di: DI by closestDI()
+    val repo: AdmRepository by instance()
+
     fun getBuilds() {
-        val observable = RetrofitFactory.getInstance().requestBuildJob()
-        this.sendRequest(observable, object : BaseObserver<List<Build>>(mActivity, this) {
-            override fun onSuccess(t: List<Build>?) {
-                mEmitter.SendDircetive(BUILD_TYPE, t)
+        viewModelScope.launch {
+            val builds = repo.getBuildByObjType("building")
+            var t = ArrayList<Build>()
+            for (build in builds) {
+                val floors = repo.getFloorByBuildingId(build.id,"floor")
+                var floorList = ArrayList<Floor>()
+                for (floor in floors) {
+                    val strInfo = Gson().fromJson(floor.strInfos, StrInfosforBuild::class.java)
+                    var floorMap = ""
+                    if (TextUtils.isEmpty(strInfo.floorMap)) {
+                        floorMap = ""
+                    } else {
+                        floorMap = strInfo.floorMap
+                    }
+                    var localId = ""
+                    if (TextUtils.isEmpty(floor.localId)) {
+                        localId = ""
+                    } else {
+                        localId = floor.localId!!
+                    }
+                    floorList.add(
+                        Floor(
+                            bimIdPre = "",
+                            buildingId = floor.buildingId!!,
+                            count = 0.0,
+                            createTime = "",
+                            floorSequenceID = 0.0,
+                            id = floor.id,
+                            lastUpdate = "",
+                            localId = localId,
+                            localName = floor.localName!!,
+                            modelId = "",
+                            name = floor.name,
+                            objectType = "floor",
+                            projectId = floor.projectId,
+                            statistics = Statistics(),
+                            infos = Info("", floorMap)
+                        )
+                    )
+                }
+                t.add(
+                    Build(
+                        createTime = build.creationTime.toString(),
+                        id = build.id,
+                        localId = build.localId!!,
+                        lastUpdate = "",
+                        localName = build.localName!!,
+                        name = build.name,
+                        objectType = build.objType,
+                        projectId = build.projectId,
+                        statistics = StatisticsX(),
+                        floor = floorList
+                    )
+                )
             }
+            mEmitter.SendDircetive(BUILD_TYPE, t)
+        }
 
-        }, true)
+//        val observable = RetrofitFactory.getInstance().requestBuildJob()
+//        this.sendRequest(observable, object : BaseObserver<List<Build>>(mActivity, this) {
+//            override fun onSuccess(t: List<Build>?) {
+//                mEmitter.SendDircetive(BUILD_TYPE, t)
+//            }
+//
+//        }, true)
     }
 }

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

@@ -5,26 +5,28 @@ import android.graphics.PointF
 import android.text.TextUtils
 import androidx.lifecycle.viewModelScope
 import cn.sagacloud.android.cadengine.items.PointItem
+import cn.sagacloud.android.cadengine.items.SpaceItem
 import cn.sagacloud.android.cadengine.items.TunableSpaceItem
 import cn.sagacloud.android.cadengine.types.Photos
 import cn.sagacloud.android.cadengine.types.Point
 import cn.sagacloud.android.cadengine.types.PointZ
-import com.arashivision.arvbmg.shandowclone.TrackTarget
+import cn.sagacloud.android.cadengine.types.TunableSpace
 import com.framework.mvvm.model.db.entity.*
 import com.framework.mvvm.model.repository.AdmRepository
 import com.sybotan.android.demo.bean.result.ProblemsModel
 import com.google.gson.Gson
+import com.google.gson.JsonObject
 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.entitiies.Info
 import com.sybotan.android.demo.retrofit.BaseObserver
 import com.sybotan.android.demo.retrofit.BaseViewModelInterface
 import com.sybotan.android.demo.retrofit.RetrofitFactory
 import kotlinx.coroutines.launch
+import org.json.JSONObject
 import org.kodein.di.DI
 import org.kodein.di.DIAware
 import org.kodein.di.android.x.closestDI
@@ -52,23 +54,65 @@ class GraphyVM(
     /**
      * 查询空间和任务
      */
-    fun getSpaceJob(from: String) {
-        val bean = ReqSpaceJob()
-        bean.buildingId = buildingId
-        bean.floorId = floorId
-        if ("space" == from) {
-            bean.jobStatus.add("01")
-            bean.jobStatus.add("02")
-            bean.jobStatus.add("03")
-        } else {
-            bean.jobStatus.add("04")
-        }
-        val observable = RetrofitFactory.getInstance().getSpaceJob(getRequestBody(bean))
-        sendRequest(observable, object : BaseObserver<List<SpaceJobModel>>(mActivity, this) {
-            override fun onSuccess(spaceJobModels: List<SpaceJobModel>) {
-                mEmitter.SendDircetive(SPACE_JOB, spaceJobModels)
+    fun getSpaceJob(from: String, spaceList: ArrayList<SpaceItem>) {
+        viewModelScope.launch {
+            var spaceList: ArrayList<SpaceEntity> = ArrayList()
+            if ("space".equals(from)) {
+                val spaceByArchState1 = repo.getSpaceByArchStateFloorId(floorId, "1")
+                val spaceByArchState2 = repo.getSpaceByArchStateFloorId(floorId, "2")
+                spaceList.addAll(spaceByArchState1)
+                spaceList.addAll(spaceByArchState2)
+            } else {
+                val spaceByEquipState1 = repo.getSpaceByEquipStateFloorId(floorId, "1")
+                val spaceByEquipState2 = repo.getSpaceByEquipStateFloorId(floorId, "2")
+                spaceList.addAll(spaceByEquipState1)
+                spaceList.addAll(spaceByEquipState2)
             }
-        }, true)
+            var spaceJobList = ArrayList<SpaceJobModel>()
+            for (spaceEntity in spaceList) {
+                var spaceJobModel = SpaceJobModel()
+                val objectEntity = repo.getObject(spaceEntity.spaceId)
+                spaceJobModel.buildingId = buildingId
+                spaceJobModel.id = spaceEntity.spaceId
+                spaceJobModel.localName = objectEntity.localName
+                spaceJobModel.name = objectEntity.name
+                spaceJobModel.projectId = projectId
+                if (spaceEntity.archState == 1) {
+                    spaceJobModel.job = "01"
+                } else if (spaceEntity.archState == 2 && spaceEntity.equipState == 1) {
+                    if (from.equals("space")) {
+                        spaceJobModel.job = "03"
+                    } else {
+                        spaceJobModel.job = "04"
+                    }
+                } else if (spaceEntity.archState == 2 && spaceEntity.equipState == 2) {
+                    spaceJobModel.job = "05"
+                }
+                val strInfo = gson.fromJson(objectEntity.strInfos, StrInfos::class.java)
+
+                spaceJobModel.outline = strInfo.outline
+                spaceJobModel.objectEntity = objectEntity
+                spaceJobList.add(spaceJobModel)
+            }
+            mEmitter.SendDircetive(SPACE_JOB, spaceJobList)
+
+        }
+//        val bean = ReqSpaceJob()
+//        bean.buildingId = buildingId
+//        bean.floorId = floorId
+//        if ("space" == from) {
+//            bean.jobStatus.add("01")
+//            bean.jobStatus.add("02")
+//            bean.jobStatus.add("03")
+//        } else {
+//            bean.jobStatus.add("04")
+//        }
+//        val observable = RetrofitFactory.getInstance().getSpaceJob(getRequestBody(bean))
+//        sendRequest(observable, object : BaseObserver<List<SpaceJobModel>>(mActivity, this) {
+//            override fun onSuccess(spaceJobModels: List<SpaceJobModel>) {
+//                mEmitter.SendDircetive(SPACE_JOB, spaceJobModels)
+//            }
+//        }, true)
     }
 
     /**
@@ -338,18 +382,34 @@ class GraphyVM(
      * @param toString   数字化交付编码
      */
     fun setJob(choseSpace: TunableSpaceItem?, jobStatus: String) {
-        val bean = ReqSetJob()
-        bean.buildingId = buildingId
-        bean.floorId = floorId
-        bean.spaceId.add(choseSpace!!.data.id)
-        bean.jobStatus = jobStatus
-        bean.spaceCode = "test"
-        val observable = RetrofitFactory.getInstance().setJob(getRequestBody(bean))
-        sendRequest(observable, object : BaseObserver<SetJobModel>(mActivity, this) {
-            override fun onSuccess(model: SetJobModel) {
-                mEmitter.SendDircetive(SET_JOB, null)
+        viewModelScope.launch {
+            var space = repo.getSpaceBySpaceId(choseSpace!!.data.id!!)
+            if (jobStatus.equals("01")) {
+                space.archState = 1
+            } else if (jobStatus.equals("03")) {
+                space.archState = 2
+            } else if (jobStatus.equals("04")) {
+                space.archState = 2
+                space.equipState = 1
+            } else if (jobStatus.equals("05")) {
+                space.archState = 2
+                space.equipState = 2
             }
-        }, true)
+            repo.insSpace(space)
+            mEmitter.SendDircetive(SET_JOB, null)
+        }
+//        val bean = ReqSetJob()
+//        bean.buildingId = buildingId
+//        bean.floorId = floorId
+//        bean.spaceId.add(choseSpace!!.data.id)
+//        bean.jobStatus = jobStatus
+//        bean.spaceCode = "test"
+//        val observable = RetrofitFactory.getInstance().setJob(getRequestBody(bean))
+//        sendRequest(observable, object : BaseObserver<SetJobModel>(mActivity, this) {
+//            override fun onSuccess(model: SetJobModel) {
+//                mEmitter.SendDircetive(SET_JOB, null)
+//            }
+//        }, true)
     }
 
     /**
@@ -442,7 +502,25 @@ class GraphyVM(
         }
     }
 
+    fun refreshObject(space: TunableSpace, hashMap: HashMap<String, Any>) {
+        viewModelScope.launch {
+            var space = repo.getObject(space.id!!)
+            space.infos = JSONObject(hashMap as Map<*, *>)
+            repo.insObject(space)
+            mActivity.finish()
+//            var objectEntity = ObjectEntity(
+//                id = space.id!!,
+//                name = space.name!!,
+//
+//            )
+//            repo.insObject()
+        }
+    }
+
     companion object {
+        //
+        const val REFRESH_OBJECT = "SPACE_JOB"
+
         //查询空间和任务
         const val SPACE_JOB = "SPACE_JOB"
 

+ 3 - 2
demo/src/main/res/layout/activity_space_detail.xml

@@ -9,7 +9,8 @@
     <androidx.appcompat.widget.LinearLayoutCompat
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:orientation="vertical">
+        android:orientation="vertical"
+        android:paddingBottom="20dp">
 
         <RelativeLayout
             android:layout_width="match_parent"
@@ -64,7 +65,7 @@
             android:layout_height="wrap_content" />
 
         <TextView
-            android:id="@+id/btn_submit"
+            android:id="@+id/btnSubmit"
             android:layout_width="match_parent"
             android:layout_height="40dp"
             android:layout_gravity="center"

+ 1 - 1
demo/src/main/res/layout/view_picture.xml

@@ -4,7 +4,7 @@
     android:layout_height="wrap_content">
 
     <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/recycler"
+        android:id="@+id/viewRecycler"
         android:layout_width="match_parent"
         android:layout_height="wrap_content" />
 </RelativeLayout>