Browse Source

feat
1.App详情页中的数字化交付编码纳入生成规则——可以通过辅助工具按规则生成部分参考编码
2.整体切换为数字化交付编码为各对象使用的信息

lihao1 3 years ago
parent
commit
357fb9e306
49 changed files with 1409 additions and 229 deletions
  1. 1 0
      cadengine/src/main/java/cn/sagacloud/android/cadengine/types/Point.kt
  2. 3 3
      cadengine/src/main/java/cn/sagacloud/android/cadengine/types/PointZ.java
  3. 6 0
      demo/src/main/AndroidManifest.xml
  4. 1 1
      demo/src/main/java/com/framework/mvvm/model/db/dao/InfosConfigDao.kt
  5. 2 1
      demo/src/main/java/com/framework/mvvm/model/db/entity/dict/EquipmentEntity.kt
  6. 10 1
      demo/src/main/java/com/framework/mvvm/model/db/entity/task/ObjectEntity.kt
  7. 9 6
      demo/src/main/java/com/sybotan/android/demo/activities/ChooseSpaceActivity.kt
  8. 169 0
      demo/src/main/java/com/sybotan/android/demo/activities/EquipDeliveryCodeActivity.kt
  9. 23 17
      demo/src/main/java/com/sybotan/android/demo/activities/EquipDetailActivity.kt
  10. 16 3
      demo/src/main/java/com/sybotan/android/demo/activities/GraphyActivity.kt
  11. 129 0
      demo/src/main/java/com/sybotan/android/demo/activities/SpaceDeliveryCodeActivity.kt
  12. 18 1
      demo/src/main/java/com/sybotan/android/demo/activities/SpaceDetailActivity.kt
  13. 3 1
      demo/src/main/java/com/sybotan/android/demo/adapter/ContainerExpandAdapter.kt
  14. 10 4
      demo/src/main/java/com/sybotan/android/demo/adapter/PersonalSelectSingleAdapter.java
  15. 3 2
      demo/src/main/java/com/sybotan/android/demo/adapter/SelectPopListAdapter.java
  16. 31 0
      demo/src/main/java/com/sybotan/android/demo/adapter/StaticInfoAdapter.java
  17. 1 0
      demo/src/main/java/com/sybotan/android/demo/bean/result/Children.java
  18. 2 1
      demo/src/main/java/com/sybotan/android/demo/retrofit/Constant.java
  19. 21 0
      demo/src/main/java/com/sybotan/android/demo/tools/ObjectNameUtils.kt
  20. 4 3
      demo/src/main/java/com/sybotan/android/demo/view/ObjectRelationDialog.java
  21. 3 2
      demo/src/main/java/com/sybotan/android/demo/view/PipeDialog.java
  22. 3 1
      demo/src/main/java/com/sybotan/android/demo/view/SelectListSinglePopupWindow.java
  23. 3 1
      demo/src/main/java/com/sybotan/android/demo/viewmodel/ContainerVM.kt
  24. 75 0
      demo/src/main/java/com/sybotan/android/demo/viewmodel/EquipDeliveryCodeVM.kt
  25. 15 17
      demo/src/main/java/com/sybotan/android/demo/viewmodel/EquipDetailVM.kt
  26. 104 96
      demo/src/main/java/com/sybotan/android/demo/viewmodel/GraphyVM.kt
  27. 96 0
      demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceDeliveryCodeVM.kt
  28. 3 0
      demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceDetailVM.kt
  29. 49 46
      demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceMapVM.kt
  30. 1 1
      demo/src/main/res/drawable/shape_rectangle_green_3.xml
  31. 318 0
      demo/src/main/res/layout/activity_equip_delivery_code.xml
  32. 0 7
      demo/src/main/res/layout/activity_equip_detail.xml
  33. 225 0
      demo/src/main/res/layout/activity_space_delivery_code.xml
  34. 4 3
      demo/src/main/res/layout/activity_space_detail.xml
  35. 6 5
      demo/src/main/res/layout/layout_common_list_item1.xml
  36. 1 0
      demo/src/main/res/layout/view_date.xml
  37. 1 0
      demo/src/main/res/layout/view_double.xml
  38. 1 0
      demo/src/main/res/layout/view_enum.xml
  39. 1 0
      demo/src/main/res/layout/view_int.xml
  40. 3 2
      demo/src/main/res/layout/view_mtext.xml
  41. 2 1
      demo/src/main/res/layout/view_picture.xml
  42. 16 3
      demo/src/main/res/layout/view_text.xml
  43. BIN
      demo/src/main/res/mipmap-xhdpi/icon_arrow_up.png
  44. BIN
      demo/src/main/res/mipmap-xhdpi/icon_push_down.png
  45. BIN
      demo/src/main/res/mipmap-xhdpi/image1.png
  46. BIN
      demo/src/main/res/mipmap-xhdpi/image2.png
  47. BIN
      demo/src/main/res/mipmap-xhdpi/image3.png
  48. BIN
      demo/src/main/res/mipmap-xhdpi/image4.png
  49. 17 0
      demo/src/main/res/values/array.xml

+ 1 - 0
cadengine/src/main/java/cn/sagacloud/android/cadengine/types/Point.kt

@@ -31,6 +31,7 @@ class Point {
     var content: String? = null
     var content: String? = null
     var floorId: String? = null
     var floorId: String? = null
     var deviceId: String? = null
     var deviceId: String? = null
+    var digitalDeliveryID: String? = null
     var photos: ArrayList<Photos> = ArrayList()
     var photos: ArrayList<Photos> = ArrayList()
 
 
     //1-蓝 2-绿 3-红 4-huang
     //1-蓝 2-绿 3-红 4-huang

+ 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
  * Date: 2021/6/10
  */
  */
 public class PointZ {
 public class PointZ {
-    @SerializedName("x")
+    @SerializedName("X")
     public float x;
     public float x;
-    @SerializedName("y")
+    @SerializedName("Y")
     public float y;
     public float y;
-    @SerializedName("z")
+    @SerializedName("Z")
     public float z;
     public float z;
 
 
     public PointZ() {
     public PointZ() {

+ 6 - 0
demo/src/main/AndroidManifest.xml

@@ -36,6 +36,12 @@
         android:supportsRtl="true"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
         android:theme="@style/AppTheme">
         <activity
         <activity
+            android:name=".activities.SpaceDeliveryCodeActivity"
+            android:exported="true" />
+        <activity
+            android:name=".activities.EquipDeliveryCodeActivity"
+            android:exported="true" />
+        <activity
             android:name=".activities.Space3DActivity"
             android:name=".activities.Space3DActivity"
             android:exported="true" />
             android:exported="true" />
         <activity
         <activity

+ 1 - 1
demo/src/main/java/com/framework/mvvm/model/db/dao/InfosConfigDao.kt

@@ -14,7 +14,7 @@ interface InfosConfigDao {
     @Query("select * from infos_config where id = :id")
     @Query("select * from infos_config where id = :id")
     suspend fun getConfigById(id: String): InfosConfigEntity
     suspend fun getConfigById(id: String): InfosConfigEntity
 
 
-    @Query("select * from infos_config where obj_type = :type")
+    @Query("select * from infos_config where obj_type = :type and class_code ='GeneralZone'")
     suspend fun getConfigByObjType(type: String): List<InfosConfigEntity>
     suspend fun getConfigByObjType(type: String): List<InfosConfigEntity>
 
 
     @Query("select * from infos_config where obj_type = :type and class_code =:code")
     @Query("select * from infos_config where obj_type = :type and class_code =:code")

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

@@ -3,6 +3,7 @@ package com.framework.mvvm.model.db.entity.dict
 import androidx.room.ColumnInfo
 import androidx.room.ColumnInfo
 import androidx.room.Entity
 import androidx.room.Entity
 import androidx.room.PrimaryKey
 import androidx.room.PrimaryKey
+import java.io.Serializable
 
 
 /**
 /**
  * 设备字典表(远程无对应表)
  * 设备字典表(远程无对应表)
@@ -24,4 +25,4 @@ data class EquipmentEntity(
     @ColumnInfo(name = "version") val version: String?,              // 版本
     @ColumnInfo(name = "version") val version: String?,              // 版本
     @ColumnInfo(name = "system_name") var systemName: String?,       // 系统编码
     @ColumnInfo(name = "system_name") var systemName: String?,       // 系统编码
     @ColumnInfo(name = "valid") var valid: Int?,                     // 有效标识, // 1 正常 0 删除
     @ColumnInfo(name = "valid") var valid: Int?,                     // 有效标识, // 1 正常 0 删除
-)
+) : Serializable

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

@@ -77,8 +77,17 @@ data class InfosforBuild(
     val floorSequenceID: Int,
     val floorSequenceID: Int,
 )
 )
 
 
+data class InfosforFloor(
+    val digitalDeliveryID: String,
+)
+
+data class InfosforSpace(
+    val digitalDeliveryID: String,
+)
+
 data class InfosforEquip(
 data class InfosforEquip(
     val location: PointZ,
     val location: PointZ,
     var zRegion: String,
     var zRegion: String,
-    var equipCheck: Any
+    var equipCheck: Any,
+    var digitalDeliveryID: String,
 )
 )

+ 9 - 6
demo/src/main/java/com/sybotan/android/demo/activities/ChooseSpaceActivity.kt

@@ -197,10 +197,12 @@ class ChooseSpaceActivity : BaseActivity(), DIAware {
                         for (sp in spaces) {
                         for (sp in spaces) {
                             val obj = sp.infos!!.asJsonObject
                             val obj = sp.infos!!.asJsonObject
                             val info = gson.fromJson(obj, SpaceInfo::class.java)
                             val info = gson.fromJson(obj, SpaceInfo::class.java)
-                            val isContains = Lasso.isPolygonContainsPointZ(info!!.outline!![0][0], android.graphics.Point(x.toInt(), -y.toInt()))
-                            if (isContains) {
-                                spaceIdList.add(sp.id)
-                                break
+                            if (!obj.keySet().isEmpty()) {
+                                val isContains = Lasso.isPolygonContainsPointZ(info!!.outline!![0][0], android.graphics.Point(x.toInt(), -y.toInt()))
+                                if (isContains) {
+                                    spaceIdList.add(sp.id)
+                                    break
+                                }
                             }
                             }
                         }
                         }
                         break
                         break
@@ -251,6 +253,8 @@ class ChooseSpaceActivity : BaseActivity(), DIAware {
                         scene.loadData(floorOfflineData)
                         scene.loadData(floorOfflineData)
                         uiThread {
                         uiThread {
                             graphyView.setCenterPoint(centerPoint, scale)
                             graphyView.setCenterPoint(centerPoint, scale)
+                            chooseSpaceVM.getFloorList()
+                            chooseSpaceVM.getRel(deviceId, groupRelConfigEntity)
                         }
                         }
                     }
                     }
                 }
                 }
@@ -302,8 +306,7 @@ class ChooseSpaceActivity : BaseActivity(), DIAware {
             }
             }
         }, this, buildingId, floorId, projectId)
         }, this, buildingId, floorId, projectId)
         chooseSpaceVM.getMap()
         chooseSpaceVM.getMap()
-        chooseSpaceVM.getFloorList()
-        chooseSpaceVM.getRel(deviceId, groupRelConfigEntity)
+
     }
     }
 
 
     private fun initSpaceName() {
     private fun initSpaceName() {

+ 169 - 0
demo/src/main/java/com/sybotan/android/demo/activities/EquipDeliveryCodeActivity.kt

@@ -0,0 +1,169 @@
+package com.sybotan.android.demo.activities
+
+import android.content.Intent
+import android.os.Bundle
+import android.text.TextUtils
+import android.view.Gravity
+import android.widget.EditText
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import androidx.core.widget.addTextChangedListener
+import com.framework.mvvm.model.db.entity.dict.EquipmentEntity
+import com.framework.mvvm.model.db.entity.task.ObjectEntity
+import com.google.gson.Gson
+import com.sybotan.android.demo.R
+import com.sybotan.android.demo.retrofit.Constant
+import com.sybotan.android.demo.tools.CommonUtils
+import com.sybotan.android.demo.view.ObjectRelationDialog
+import com.sybotan.android.demo.view.SelectListSinglePopupWindow
+import com.sybotan.android.demo.viewmodel.EquipDeliveryCodeVM
+import org.kodein.di.DI
+import org.kodein.di.DIAware
+import org.kodein.di.android.closestDI
+import java.util.*
+
+class EquipDeliveryCodeActivity : BaseActivity(), DIAware {
+
+    override val di: DI by closestDI()
+
+    /** 建筑Id */
+    private lateinit var buildingId: String
+
+    /** 楼层Id */
+    private lateinit var floorId: String
+
+    /** 项目Id */
+    private lateinit var projectId: String
+    private lateinit var spaceId: String
+    private lateinit var deviceId: String
+    private lateinit var equipment: EquipmentEntity
+
+    lateinit var viewModel: EquipDeliveryCodeVM
+
+    private lateinit var backIv: ImageView
+    private lateinit var edt1: EditText
+    private lateinit var edt2: EditText
+    private lateinit var submit: TextView
+    private lateinit var tv1: TextView
+    private lateinit var tv2: TextView
+    private lateinit var edt3: TextView
+    private lateinit var edt4: EditText
+    private lateinit var root: LinearLayout
+    val gson = Gson()
+
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_equip_delivery_code)
+        initView()
+        initListener()
+        initData()
+    }
+
+    private fun initView() {
+        val params = intent.getBundleExtra("params")!!
+        buildingId = params.getString("buildingId", "")!!
+        floorId = params.getString("floorId", "")!!
+        projectId = params.getString("projectId", "")!!
+        spaceId = params.getString("spaceId", "")!!
+        deviceId = params.getString("deviceId", "")!!
+        equipment = (params.getSerializable("equipment") as EquipmentEntity?)!!
+        backIv = findViewById(R.id.backIv)
+        edt1 = findViewById(R.id.edt1)
+        edt2 = findViewById(R.id.edt2)
+        submit = findViewById(R.id.submit)
+        tv1 = findViewById(R.id.tv1)
+        tv2 = findViewById(R.id.tv2)
+        edt3 = findViewById(R.id.edt3)
+        edt4 = findViewById(R.id.edt4)
+        root = findViewById(R.id.root)
+    }
+
+    private fun initListener() {
+        backIv.setOnClickListener { finish() }
+        tv1.setOnClickListener {
+            edt1.setText(tv1.text.toString())
+        }
+        tv2.setOnClickListener {
+            edt2.setText(tv2.text.toString())
+        }
+        refreshSubmitEnable(edt1)
+        refreshSubmitEnable(edt2)
+        refreshSubmitEnable(edt3)
+        refreshSubmitEnable(edt4)
+
+        edt3.setOnClickListener {
+            val locationList = resources.getStringArray(R.array.install_location_list)
+            val pop = SelectListSinglePopupWindow(this@EquipDeliveryCodeActivity)
+            pop.setGenList(locationList.asList(), Constant.TYPE6)
+            pop.setTitle(true, "安装点标识")
+            pop.showAtLocation(root, Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL, 0, 0)
+            pop.setOnItemClickListener {
+                edt3.text = locationList[it].substringAfterLast(":")
+            }
+        }
+
+        submit.setOnClickListener {
+            viewModel.insSerialNumber(deviceId, edt1.text.toString(), edt2.text.toString(), edt3.text.toString(), edt4.text.toString())
+        }
+    }
+
+    private fun refreshSubmitEnable(edt: TextView) {
+        edt.addTextChangedListener {
+            if (!TextUtils.isEmpty(edt1.text.toString()) && !TextUtils.isEmpty(edt2.text.toString()) && edt2.text.toString()
+                    .contains("-RM") && !TextUtils.isEmpty(edt3.text.toString()) && !TextUtils.isEmpty(edt4.text.toString())
+            ) {
+                submit.isEnabled = true
+                submit.alpha = 1f
+            } else {
+                submit.isEnabled = true
+                submit.alpha = 0.5f
+            }
+        }
+    }
+
+    private fun initData() {
+        viewModel = EquipDeliveryCodeVM(this.application, { name, param ->
+            when (name) {
+                EquipDeliveryCodeVM.EQUIP_ENTITY -> {
+                    if (equipment != null || !TextUtils.isEmpty(equipment.code)) {
+                        tv1.text = equipment.code
+                    }
+                    if (param != null) {
+                        val equipEntity = param as ObjectEntity
+                        tv1.text = equipEntity.classCode
+                        val info = gson.fromJson(equipEntity.infos, HashMap::class.java)
+                        val spaceDeliveryCode = info["digitalDeliveryID"]
+                        if (spaceDeliveryCode != null && !TextUtils.isEmpty(spaceDeliveryCode.toString())) {
+                            val split = spaceDeliveryCode.toString().split("-")
+                            if (split.size >= 5) {
+                                edt1.setText(split[0])
+                                edt2.setText("${split[1]}-${split[2]}")
+                                edt3.text = split[3]
+                                edt4.setText(split[4])
+                            }
+                        }
+                    }
+
+                }
+                EquipDeliveryCodeVM.SPACE_ENTITY -> {
+                    if (param != null) {
+                        val spaceEntity = param as ObjectEntity
+                        val info = gson.fromJson(spaceEntity.infos, HashMap::class.java)
+                        val spaceDeliveryCode = info["digitalDeliveryID"]
+                        if (spaceDeliveryCode != null && !TextUtils.isEmpty(spaceDeliveryCode.toString())) {
+                            tv2.text = spaceDeliveryCode.toString()
+                        } else {
+                            tv2.text = "??????-RM??"
+                        }
+                    } else {
+                        tv2.text = "??????-RM??"
+                    }
+                }
+            }
+        }, this, buildingId, floorId, projectId)
+        viewModel.getEquip(deviceId)
+        viewModel.getSpace(spaceId)
+    }
+}

+ 23 - 17
demo/src/main/java/com/sybotan/android/demo/activities/EquipDetailActivity.kt

@@ -63,13 +63,13 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
 
 
     //选择图片
     //选择图片
     private val REQUEST_CODE_PIC = 0X102
     private val REQUEST_CODE_PIC = 0X102
+    private val REQUEST_EQUIP_CODE = 0X103
 
 
     private lateinit var info: Infos
     private lateinit var info: Infos
     private lateinit var recycler: RecyclerView
     private lateinit var recycler: RecyclerView
     private lateinit var viewRecycler: RecyclerView
     private lateinit var viewRecycler: RecyclerView
     private lateinit var mtextContent: EditText
     private lateinit var mtextContent: EditText
     private lateinit var localName: ListItemView
     private lateinit var localName: ListItemView
-    private lateinit var localId: ListItemView
     private lateinit var location: ListItemView
     private lateinit var location: ListItemView
     private lateinit var serveArea: ListItemView
     private lateinit var serveArea: ListItemView
     private lateinit var doneSwitch: RMTristateSwitch
     private lateinit var doneSwitch: RMTristateSwitch
@@ -150,7 +150,6 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
         viewRecycler = findViewById(R.id.viewRecycler)
         viewRecycler = findViewById(R.id.viewRecycler)
         mtextContent = findViewById(R.id.mtextContent)
         mtextContent = findViewById(R.id.mtextContent)
         localName = findViewById(R.id.localName)
         localName = findViewById(R.id.localName)
-        localId = findViewById(R.id.localId)
         root = findViewById(R.id.root)
         root = findViewById(R.id.root)
         btnSubmit = findViewById(R.id.btnSubmit)
         btnSubmit = findViewById(R.id.btnSubmit)
         expandLvPipe = findViewById(R.id.expandLvPipe)
         expandLvPipe = findViewById(R.id.expandLvPipe)
@@ -161,8 +160,6 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
         expandLvRelation.setGroupIndicator(null)
         expandLvRelation.setGroupIndicator(null)
         expandLvRelation.divider = null
         expandLvRelation.divider = null
         localName.setTvLeft("设备名称")
         localName.setTvLeft("设备名称")
-        localId.setTvLeft("设备编码")
-        localId.setRightIconGone(true)
         recycler.layoutManager = LinearLayoutManager(this)
         recycler.layoutManager = LinearLayoutManager(this)
         viewRecycler.layoutManager = GridLayoutManager(this, 3)
         viewRecycler.layoutManager = GridLayoutManager(this, 3)
         mtextContent.setOnTouchListener(this)
         mtextContent.setOnTouchListener(this)
@@ -197,16 +194,10 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
             dialog.show()
             dialog.show()
         }
         }
         btnSubmit.setOnClickListener {
         btnSubmit.setOnClickListener {
-            var localNameString = (localName.getView(R.id.et_right)) as EditText
-            var localIdString = (localId.getView(R.id.et_right)) as EditText
             if (equipEntity == null) {
             if (equipEntity == null) {
                 ToastUtils.showMyToast("请选择设备类")
                 ToastUtils.showMyToast("请选择设备类")
                 return@setOnClickListener
                 return@setOnClickListener
             }
             }
-            if (TextUtils.isEmpty(localIdString.text.trim())) {
-                ToastUtils.showMyToast("请输入设备编码")
-                return@setOnClickListener
-            }
             equipVM.insEquip(
             equipVM.insEquip(
                 uuid,
                 uuid,
                 deviceId,
                 deviceId,
@@ -214,8 +205,6 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                 mtextContent.text.toString(),
                 mtextContent.text.toString(),
                 beans,
                 beans,
                 equipEntity!!,
                 equipEntity!!,
-                localNameString.text.toString(),
-                localIdString.text.toString(),
                 doneSwitch.state, position!!, containerId
                 doneSwitch.state, position!!, containerId
             )
             )
         }
         }
@@ -273,7 +262,6 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
         dialog.setOnSubmit {
         dialog.setOnSubmit {
             this.equipEntity = it
             this.equipEntity = it
             equipClass.setTvRight(it.systemName + "/" + it.name + "-" + it.code)
             equipClass.setTvRight(it.systemName + "/" + it.name + "-" + it.code)
-            localId.setEtRight(it.code + "-")
             equipVM.getEquipInfosConfig(it)
             equipVM.getEquipInfosConfig(it)
             equipVM.getRelConfig(it, deviceId, uuid)
             equipVM.getRelConfig(it, deviceId, uuid)
 
 
@@ -283,6 +271,22 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
             addPic()
             addPic()
             this.info = it
             this.info = it
         }
         }
+        staticInfoAdapter.setOnAddDeliveryCode {
+            if (equipEntity == null) {
+                ToastUtils.showMyToast("请先选择设备类型")
+                return@setOnAddDeliveryCode
+            }
+            val intent = Intent(this, EquipDeliveryCodeActivity::class.java)
+            val bundle = Bundle()
+            bundle.putString("buildingId", buildingId)
+            bundle.putString("floorId", floorId)
+            bundle.putString("projectId", projectId)
+            bundle.putString("spaceId", spaceId)
+            bundle.putString("deviceId", if (TextUtils.isEmpty(deviceId)) uuid else deviceId)
+            bundle.putSerializable("equipment", equipEntity)
+            intent.putExtra("params", bundle)
+            startActivityForResult(intent, REQUEST_EQUIP_CODE)
+        }
         recycler.adapter = staticInfoAdapter
         recycler.adapter = staticInfoAdapter
         equipVM = EquipDetailVM(this.application, { name, params ->
         equipVM = EquipDetailVM(this.application, { name, params ->
             when (name) {
             when (name) {
@@ -296,7 +300,6 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                                 equipClass.setTvRight(equipEntity!!.systemName + "/" + equipEntity!!.name + "-" + equipEntity!!.code)
                                 equipClass.setTvRight(equipEntity!!.systemName + "/" + equipEntity!!.name + "-" + equipEntity!!.code)
                                 equipVM.getEquipInfosConfig(equipEntity!!)
                                 equipVM.getEquipInfosConfig(equipEntity!!)
                                 equipVM.getEquipment(deviceId)
                                 equipVM.getEquipment(deviceId)
-                                localId.setEtRight(eq.code + "-")
                                 break
                                 break
                             }
                             }
                         }
                         }
@@ -354,7 +357,6 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                 EquipDetailVM.Equip_INFOS -> {
                 EquipDetailVM.Equip_INFOS -> {
                     var equip = params as ObjectEntity
                     var equip = params as ObjectEntity
                     this.equip = equip
                     this.equip = equip
-                    localId.setEtRight(equip.localId)
                     deviceId = equip.id
                     deviceId = equip.id
                     val infos = Gson().fromJson(equip.infos, InfosforEquip::class.java)
                     val infos = Gson().fromJson(equip.infos, InfosforEquip::class.java)
                     height.setTvRight(infos.location.z.toString())
                     height.setTvRight(infos.location.z.toString())
@@ -429,7 +431,6 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                     pop.setOnItemClickListener {
                     pop.setOnItemClickListener {
                         if (!CommonUtils.IsNull(list)) {
                         if (!CommonUtils.IsNull(list)) {
                             val equip = equipObjects.get(it)
                             val equip = equipObjects.get(it)
-                            val localIdString = (localId.getView(R.id.et_right)) as EditText
                             val dialog = ObjectRelationDialog(
                             val dialog = ObjectRelationDialog(
                                 this@EquipDetailActivity,
                                 this@EquipDetailActivity,
                                 "该设备",
                                 "该设备",
@@ -481,7 +482,6 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                     pop.setOnItemClickListener {
                     pop.setOnItemClickListener {
                         if (!CommonUtils.IsNull(list)) {
                         if (!CommonUtils.IsNull(list)) {
                             val equip = equipObjects.get(it)
                             val equip = equipObjects.get(it)
-                            val localIdString = (localId.getView(R.id.et_right)) as EditText
                             val dialog = PipeDialog(
                             val dialog = PipeDialog(
                                 this@EquipDetailActivity,
                                 this@EquipDetailActivity,
                                 "该设备",
                                 "该设备",
@@ -544,6 +544,12 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                 doPicDatas(pathList)
                 doPicDatas(pathList)
             }
             }
         }
         }
+        if (resultCode == RESULT_OK && requestCode == REQUEST_EQUIP_CODE) {
+            if (data != null && !TextUtils.isEmpty(data.getStringExtra("digitalDeliveryID"))) {
+                staticInfoAdapter.hashMap.put("digitalDeliveryID", data.getStringExtra("digitalDeliveryID"))
+                staticInfoAdapter.notifyDataSetChanged()
+            }
+        }
     }
     }
 
 
     private fun doPicDatas(pathList: List<String>?) {
     private fun doPicDatas(pathList: List<String>?) {

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

@@ -939,7 +939,13 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
             z.offset = position.offset
             z.offset = position.offset
             z.region = position.region
             z.region = position.region
             positon.z = z
             positon.z = z
-            bundle.putString("spaceId", scene.choseSpace!!.data.id)
+            for (space in scene.tunableSpaceList) {
+                val isContain = Lasso.isPolygonContainsPoint(space.mPoints, android.graphics.Point(positon.x.toFloat().toInt(), -positon.y.toFloat().toInt()))
+                if (isContain) {
+                    bundle.putString("spaceId", space.data.id)
+                    break
+                }
+            }
             bundle.putSerializable("position", positon)
             bundle.putSerializable("position", positon)
             bundle.putString("buildingId", buildingId)
             bundle.putString("buildingId", buildingId)
             bundle.putString("floorId", floorId)
             bundle.putString("floorId", floorId)
@@ -1121,7 +1127,13 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                     }
                     }
                 }
                 }
                 positon.z = z
                 positon.z = z
-                bundle.putString("spaceId", scene.choseSpace!!.data.id)
+                for (space in scene.tunableSpaceList) {
+                    val isContain = Lasso.isPolygonContainsPoint(space.mPoints, android.graphics.Point(positon.x.toFloat().toInt(), -positon.y.toFloat().toInt()))
+                    if (isContain) {
+                        bundle.putString("spaceId", space.data.id)
+                        break
+                    }
+                }
                 bundle.putSerializable("position", positon)
                 bundle.putSerializable("position", positon)
                 bundle.putString("buildingId", buildingId)
                 bundle.putString("buildingId", buildingId)
                 bundle.putString("floorId", floorId)
                 bundle.putString("floorId", floorId)
@@ -1612,6 +1624,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                     point.equipType = child.type
                     point.equipType = child.type
                     point.position = child.position
                     point.position = child.position
                     point.deviceId = child.deviceId
                     point.deviceId = child.deviceId
+                    point.digitalDeliveryID = child.digitalDeliveryID
                     if (((onlySpace.isChecked && isContains) || !onlySpace.isChecked) && (TextUtils.isEmpty(major) || point.type!!.startsWith(major))) {
                     if (((onlySpace.isChecked && isContains) || !onlySpace.isChecked) && (TextUtils.isEmpty(major) || point.type!!.startsWith(major))) {
                         graphyHelper.addEquip(point)
                         graphyHelper.addEquip(point)
                     }
                     }
@@ -1839,7 +1852,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
         }
         }
         val info = gson.fromJson(bus.equip.infos, InfosforEquip::class.java)
         val info = gson.fromJson(bus.equip.infos, InfosforEquip::class.java)
         scene.type = "equip"
         scene.type = "equip"
-        equipLocation.setText("(${info.location.x},${-info.location.y})")
+        equipLocation.setText("(${info.location!!.x},${-info.location.y})")
         drawLl.visibility = View.GONE
         drawLl.visibility = View.GONE
         equipLl.visibility = View.VISIBLE
         equipLl.visibility = View.VISIBLE
         equipRg.clearCheck()
         equipRg.clearCheck()

+ 129 - 0
demo/src/main/java/com/sybotan/android/demo/activities/SpaceDeliveryCodeActivity.kt

@@ -0,0 +1,129 @@
+package com.sybotan.android.demo.activities
+
+import android.os.Bundle
+import android.text.TextUtils
+import android.widget.EditText
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.core.widget.addTextChangedListener
+import com.framework.mvvm.model.db.entity.task.ObjectEntity
+import com.sybotan.android.demo.R
+import com.sybotan.android.demo.viewmodel.SpaceDeliveryCodeVM
+import org.kodein.di.DI
+import org.kodein.di.DIAware
+import org.kodein.di.android.closestDI
+
+class SpaceDeliveryCodeActivity : BaseActivity(), DIAware {
+
+    override val di: DI by closestDI()
+
+    /** 建筑Id */
+    private lateinit var buildingId: String
+
+    /** 楼层Id */
+    private lateinit var floorId: String
+
+    /** 项目Id */
+    private lateinit var projectId: String
+
+    /** 空间Id */
+    private lateinit var spaceId: String
+
+    lateinit var viewModel: SpaceDeliveryCodeVM
+
+    private lateinit var backIv: ImageView
+    private lateinit var edt1: EditText
+    private lateinit var edt2: EditText
+    private lateinit var submit: TextView
+    private lateinit var tv1: TextView
+    private lateinit var tv2: TextView
+    private lateinit var titleTv: TextView
+
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_space_delivery_code)
+        initView()
+        initListener()
+        initData()
+    }
+
+    private fun initListener() {
+        backIv.setOnClickListener { finish() }
+        tv1.setOnClickListener {
+            edt1.setText(tv1.text.toString())
+        }
+        tv2.setOnClickListener {
+            edt2.setText(tv2.text.toString())
+        }
+        edt1.addTextChangedListener {
+            if (!TextUtils.isEmpty(edt1.text.toString()) && !TextUtils.isEmpty(edt2.text.toString())) {
+                submit.isEnabled = true
+                submit.alpha = 1f
+            } else {
+                submit.isEnabled = true
+                submit.alpha = 0.5f
+            }
+        }
+        edt2.addTextChangedListener {
+            if (!TextUtils.isEmpty(edt1.text.toString()) && !TextUtils.isEmpty(edt2.text.toString())) {
+                submit.isEnabled = true
+                submit.alpha = 1f
+            } else {
+                submit.isEnabled = true
+                submit.alpha = 0.5f
+            }
+        }
+        submit.setOnClickListener {
+            viewModel.insSerialNumber(spaceId, edt1.text.toString(), edt2.text.toString())
+        }
+    }
+
+    private fun initView() {
+        val params = intent.getBundleExtra("params")!!
+        buildingId = params.getString("buildingId", "")!!
+        floorId = params.getString("floorId", "")!!
+        projectId = params.getString("projectId", "")!!
+        spaceId = params.getString("spaceId", "")!!
+        backIv = findViewById(R.id.backIv)
+        edt1 = findViewById(R.id.edt1)
+        edt2 = findViewById(R.id.edt2)
+        submit = findViewById(R.id.submit)
+        tv1 = findViewById(R.id.tv1)
+        tv2 = findViewById(R.id.tv2)
+        titleTv = findViewById(R.id.titleTv)
+    }
+
+    private fun initData() {
+        viewModel = SpaceDeliveryCodeVM(this.application, { name, param ->
+            when (name) {
+                SpaceDeliveryCodeVM.FLOOR_INFO -> {
+                    if (param != null) {
+                        val floorEntity = param as ObjectEntity
+                        if (!TextUtils.isEmpty(floorEntity.localId)) {
+                            tv1.text = (floorEntity.localId)
+                        } else {
+                            tv1.text = "??????"
+                        }
+                        titleTv.text = (floorEntity.localName)
+                    }
+                }
+                SpaceDeliveryCodeVM.SERIAL_NUMBER -> {
+                    if (param != null) {
+                        val serialNumber = param as String
+                        tv2.text = serialNumber
+                    }
+                }
+                SpaceDeliveryCodeVM.SPACE_DELIVER_CODE -> {
+                    if (param != null) {
+                        val digitalDeliveryID = param as String
+                        edt1.setText(digitalDeliveryID.substringBeforeLast("-RM"))
+                        edt2.setText(digitalDeliveryID.substringAfterLast("-RM"))
+                    }
+                }
+            }
+        }, this, buildingId, floorId, projectId)
+        viewModel.getFloor()
+        viewModel.getSpace(spaceId)
+    }
+}

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

@@ -28,6 +28,7 @@ import com.sybotan.android.demo.viewmodel.SpaceDetailVM
 import com.yuyh.library.imgsel.ImageLoader
 import com.yuyh.library.imgsel.ImageLoader
 import com.yuyh.library.imgsel.ImgSelConfig
 import com.yuyh.library.imgsel.ImgSelConfig
 import io.reactivex.ObservableEmitter
 import io.reactivex.ObservableEmitter
+import org.jetbrains.anko.startActivityForResult
 import org.json.JSONException
 import org.json.JSONException
 import org.json.JSONObject
 import org.json.JSONObject
 import java.io.File
 import java.io.File
@@ -54,6 +55,7 @@ class SpaceDetailActivity : BaseActivity() {
 
 
     //选择图片
     //选择图片
     private val REQUEST_CODE_PIC = 0X102
     private val REQUEST_CODE_PIC = 0X102
+    private val REQUEST_SPACE_CODE = 0X103
 
 
     /** viewModel */
     /** viewModel */
     lateinit var spaceVM: SpaceDetailVM
     lateinit var spaceVM: SpaceDetailVM
@@ -85,6 +87,16 @@ class SpaceDetailActivity : BaseActivity() {
             addPic()
             addPic()
             this.info = it
             this.info = it
         }
         }
+        staticInfoAdapter.setOnAddDeliveryCode {
+            val intent = Intent(this, SpaceDeliveryCodeActivity::class.java)
+            val bundle = Bundle()
+            bundle.putString("buildingId", buildingId)
+            bundle.putString("floorId", floorId)
+            bundle.putString("projectId", projectId)
+            bundle.putString("spaceId", spaceId)
+            intent.putExtra("params", bundle)
+            startActivityForResult(intent, REQUEST_SPACE_CODE)
+        }
         recycler.adapter = staticInfoAdapter
         recycler.adapter = staticInfoAdapter
         spaceVM = SpaceDetailVM(this.application, { name, params ->
         spaceVM = SpaceDetailVM(this.application, { name, params ->
             when (name) {
             when (name) {
@@ -140,7 +152,6 @@ class SpaceDetailActivity : BaseActivity() {
             .needCamera(true) // 最大选择图片数量
             .needCamera(true) // 最大选择图片数量
             .build()
             .build()
         //选择图片activity
         //选择图片activity
-        //选择图片activity
         Repair_ImgSelActivity.startActivity(this, config, REQUEST_CODE_PIC)
         Repair_ImgSelActivity.startActivity(this, config, REQUEST_CODE_PIC)
     }
     }
 
 
@@ -153,6 +164,12 @@ class SpaceDetailActivity : BaseActivity() {
                 doPicDatas(pathList)
                 doPicDatas(pathList)
             }
             }
         }
         }
+        if (resultCode == RESULT_OK && requestCode == REQUEST_SPACE_CODE) {
+            if (data != null && !TextUtils.isEmpty(data.getStringExtra("digitalDeliveryID"))) {
+                staticInfoAdapter.hashMap.put("digitalDeliveryID", data.getStringExtra("digitalDeliveryID"))
+                staticInfoAdapter.notifyDataSetChanged()
+            }
+        }
     }
     }
 
 
     private fun doPicDatas(pathList: List<String>?) {
     private fun doPicDatas(pathList: List<String>?) {

+ 3 - 1
demo/src/main/java/com/sybotan/android/demo/adapter/ContainerExpandAdapter.kt

@@ -13,6 +13,7 @@ import com.sybotan.android.demo.R
 import com.sybotan.android.demo.bean.ContainerParentBean
 import com.sybotan.android.demo.bean.ContainerParentBean
 import com.sybotan.android.demo.bean.RelConfigEntityPackClass
 import com.sybotan.android.demo.bean.RelConfigEntityPackClass
 import com.sybotan.android.demo.bean.RelationPackClass
 import com.sybotan.android.demo.bean.RelationPackClass
+import com.sybotan.android.demo.tools.ObjectNameUtils
 import java.lang.StringBuilder
 import java.lang.StringBuilder
 
 
 
 
@@ -94,7 +95,7 @@ class ContainerExpandAdapter(
         }
         }
         val itemTv = holder?.findViewById(R.id.title) as TextView
         val itemTv = holder?.findViewById(R.id.title) as TextView
         val item = mItems[groupPosition][childPosition]
         val item = mItems[groupPosition][childPosition]
-        itemTv.text = item.localId
+        itemTv.text = ObjectNameUtils.getEquipName(item.infos)
         holder.findViewById<TextView>(R.id.delete).setOnClickListener {
         holder.findViewById<TextView>(R.id.delete).setOnClickListener {
             deleteRel?.ondelete(item)
             deleteRel?.ondelete(item)
         }
         }
@@ -119,6 +120,7 @@ class ContainerExpandAdapter(
     fun setOnDelete(deleteRel: DeleteRel) {
     fun setOnDelete(deleteRel: DeleteRel) {
         this.deleteRel = deleteRel
         this.deleteRel = deleteRel
     }
     }
+
     public interface ItemClick {
     public interface ItemClick {
         fun onclick(item: ObjectEntity)
         fun onclick(item: ObjectEntity)
     }
     }

+ 10 - 4
demo/src/main/java/com/sybotan/android/demo/adapter/PersonalSelectSingleAdapter.java

@@ -1,5 +1,6 @@
 package com.sybotan.android.demo.adapter;
 package com.sybotan.android.demo.adapter;
 
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.Context;
 import android.text.TextUtils;
 import android.text.TextUtils;
 import android.view.Gravity;
 import android.view.Gravity;
@@ -18,6 +19,7 @@ import com.framework.mvvm.model.db.entity.task.Options;
 import com.sybotan.android.demo.R;
 import com.sybotan.android.demo.R;
 import com.sybotan.android.demo.entitiies.Floor;
 import com.sybotan.android.demo.entitiies.Floor;
 import com.sybotan.android.demo.retrofit.Constant;
 import com.sybotan.android.demo.retrofit.Constant;
+import com.sybotan.android.demo.tools.ObjectNameUtils;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
@@ -52,7 +54,7 @@ public class PersonalSelectSingleAdapter extends RecyclerView.Adapter<PersonalSe
     }
     }
 
 
     @Override
     @Override
-    public void onBindViewHolder(final BuildViewHolder holder, int position) {
+    public void onBindViewHolder(final BuildViewHolder holder, @SuppressLint("RecyclerView") int position) {
         final Object item = items.get(position);
         final Object item = items.get(position);
         if (type.equals(Constant.TYPE1)) {
         if (type.equals(Constant.TYPE1)) {
             Options options = (Options) item;
             Options options = (Options) item;
@@ -60,10 +62,10 @@ public class PersonalSelectSingleAdapter extends RecyclerView.Adapter<PersonalSe
         }
         }
         if (type.equals(Constant.TYPE2)) {
         if (type.equals(Constant.TYPE2)) {
             ObjectEntity options = (ObjectEntity) item;
             ObjectEntity options = (ObjectEntity) item;
-            if (TextUtils.isEmpty(options.getLocalId())) {
+            if (options.getObjType().equals("space")) {
                 holder.choice_name.setText(options.getClassCode() + ":" + options.getLocalName());
                 holder.choice_name.setText(options.getClassCode() + ":" + options.getLocalName());
             } else {
             } else {
-                holder.choice_name.setText(options.getClassCode() + ":" + options.getLocalId());
+                holder.choice_name.setText(ObjectNameUtils.Companion.getEquipName(options.getInfos()));
             }
             }
         }
         }
         if (type.equals(Constant.TYPE3)) {
         if (type.equals(Constant.TYPE3)) {
@@ -72,12 +74,16 @@ public class PersonalSelectSingleAdapter extends RecyclerView.Adapter<PersonalSe
         }
         }
         if (type.equals(Constant.TYPE4)) {
         if (type.equals(Constant.TYPE4)) {
             EquipItem options = (EquipItem) item;
             EquipItem options = (EquipItem) item;
-            holder.choice_name.setText(options.getData().getType() + ":" + options.getData().getName());
+            holder.choice_name.setText(options.getData().getDigitalDeliveryID());
         }
         }
         if (type.equals(Constant.TYPE5)) {
         if (type.equals(Constant.TYPE5)) {
             Floor options = (Floor) item;
             Floor options = (Floor) item;
             holder.choice_name.setText(options.getLocalName());
             holder.choice_name.setText(options.getLocalName());
         }
         }
+        if (type.equals(Constant.TYPE6)) {
+            String options = (String) item;
+            holder.choice_name.setText(options);
+        }
         if (selectPosition > 0 && selectPosition - 1 == position) {
         if (selectPosition > 0 && selectPosition - 1 == position) {
             holder.choice_name.setTextColor(context.getResources().getColor(R.color.blue_2f48b7));
             holder.choice_name.setTextColor(context.getResources().getColor(R.color.blue_2f48b7));
         } else {
         } else {

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

@@ -19,6 +19,7 @@ import com.framework.mvvm.model.db.entity.task.ObjectEntity;
 import com.framework.mvvm.model.db.entity.task.Options;
 import com.framework.mvvm.model.db.entity.task.Options;
 import com.sybotan.android.demo.R;
 import com.sybotan.android.demo.R;
 import com.sybotan.android.demo.retrofit.Constant;
 import com.sybotan.android.demo.retrofit.Constant;
+import com.sybotan.android.demo.tools.ObjectNameUtils;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
@@ -60,10 +61,10 @@ public class SelectPopListAdapter extends RecyclerView.Adapter<SelectPopListAdap
         }
         }
         if (type.equals(Constant.TYPE2)) {
         if (type.equals(Constant.TYPE2)) {
             ObjectEntity options = (ObjectEntity) item;
             ObjectEntity options = (ObjectEntity) item;
-            if (TextUtils.isEmpty(options.getLocalId())) {
+            if (options.getObjType().equals("space")) {
                 holder.choice_name.setText(options.getClassCode() + ":" + options.getLocalName());
                 holder.choice_name.setText(options.getClassCode() + ":" + options.getLocalName());
             } else {
             } else {
-                holder.choice_name.setText(options.getClassCode() + ":" + options.getLocalId());
+                holder.choice_name.setText(ObjectNameUtils.Companion.getEquipName(options.getInfos()));
             }
             }
         }
         }
         if (selectPosition > 0 && selectPosition - 1 == position) {
         if (selectPosition > 0 && selectPosition - 1 == position) {

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

@@ -8,9 +8,12 @@ import android.text.Editable;
 import android.text.TextUtils;
 import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.text.TextWatcher;
 import android.view.Gravity;
 import android.view.Gravity;
+import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
 
 
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView;
@@ -56,6 +59,7 @@ public class StaticInfoAdapter extends BaseRecyclerViewAdapter<Infos> {
 
 
     private TimePickerView pvTime;
     private TimePickerView pvTime;
     private AddPic addPic;
     private AddPic addPic;
+    private DeliveryCode deliveryCode;
 
 
     public StaticInfoAdapter(Context context, List<Infos> beans) {
     public StaticInfoAdapter(Context context, List<Infos> beans) {
         super(context, beans);
         super(context, beans);
@@ -200,6 +204,24 @@ public class StaticInfoAdapter extends BaseRecyclerViewAdapter<Infos> {
                 });
                 });
                 initTimePicker();
                 initTimePicker();
                 break;
                 break;
+            case "digitalDeliveryCode":
+                ListItemView codeItemView = holder.getView(R.id.view_text);
+                ImageView ivRight = holder.getView(R.id.iv_right);
+                ivRight.setVisibility(View.VISIBLE);
+                codeItemView.setTvLeft(info.getLabel() + unit);
+                EditText rightEdt = codeItemView.findViewById(R.id.et_right);
+                TextView rightTv = codeItemView.findViewById(R.id.tv_right);
+                rightEdt.setVisibility(View.GONE);
+                rightTv.setVisibility(View.VISIBLE);
+                if (hashMap != null && hashMap.get(info.getCode()) != null) {
+                    rightTv.setText(hashMap.get(info.getCode()).toString());
+                }
+                rightTv.setOnClickListener(v -> {
+                    if (deliveryCode != null) {
+                        deliveryCode.onAddDeliveryCode(info);
+                    }
+                });
+                break;
             default:
             default:
                 if (!CommonUtils.IsNull(info.getOptions())) {
                 if (!CommonUtils.IsNull(info.getOptions())) {
 //                    return ENUM;
 //                    return ENUM;
@@ -348,6 +370,7 @@ public class StaticInfoAdapter extends BaseRecyclerViewAdapter<Infos> {
         }
         }
         switch (mBeans.get(position).getInputType()) {
         switch (mBeans.get(position).getInputType()) {
             case "text":
             case "text":
+            case "digitalDeliveryCode":
                 return TEXT;
                 return TEXT;
             case "textarea":
             case "textarea":
                 return MTEXT;
                 return MTEXT;
@@ -412,4 +435,12 @@ public class StaticInfoAdapter extends BaseRecyclerViewAdapter<Infos> {
         this.addPic = addPic;
         this.addPic = addPic;
     }
     }
 
 
+    public interface DeliveryCode {
+        void onAddDeliveryCode(Infos info);
+    }
+
+    public void setOnAddDeliveryCode(DeliveryCode deliveryCode) {
+        this.deliveryCode = deliveryCode;
+    }
+
 }
 }

+ 1 - 0
demo/src/main/java/com/sybotan/android/demo/bean/result/Children.java

@@ -10,6 +10,7 @@ import java.util.ArrayList;
  */
  */
 public class Children {
 public class Children {
     public String deviceId;
     public String deviceId;
+    public String digitalDeliveryID;
     public String name;
     public String name;
     public String position;
     public String position;
     public String remark;
     public String remark;

+ 2 - 1
demo/src/main/java/com/sybotan/android/demo/retrofit/Constant.java

@@ -19,9 +19,10 @@ public class Constant {
     public static final String ServerMapIP = "http://adm.sagacloud.cn/image-service/common/file_get?systemId=revit&key=";
     public static final String ServerMapIP = "http://adm.sagacloud.cn/image-service/common/file_get?systemId=revit&key=";
 
 
 
 
-    public static final String TYPE1 = "String";
+    public static final String TYPE1 = "option";
     public static final String TYPE2 = "equip";
     public static final String TYPE2 = "equip";
     public static final String TYPE3 = "major";
     public static final String TYPE3 = "major";
     public static final String TYPE4 = "EquipItem";
     public static final String TYPE4 = "EquipItem";
     public static final String TYPE5 = "space";
     public static final String TYPE5 = "space";
+    public static final String TYPE6 = "String";
 }
 }

+ 21 - 0
demo/src/main/java/com/sybotan/android/demo/tools/ObjectNameUtils.kt

@@ -0,0 +1,21 @@
+package com.sybotan.android.demo.tools
+
+import com.google.gson.JsonElement
+
+/**
+ * Created by lihao.
+ * Date: 2021/11/18
+ */
+class ObjectNameUtils {
+
+    companion object {
+        fun getEquipName(jsonElement: JsonElement?): String {
+            if (jsonElement == null) {
+                return "--"
+            }
+            val infos = jsonElement.asJsonObject
+            return if (infos?.get("digitalDeliveryID") == null) "--" else infos.get("digitalDeliveryID").toString()
+        }
+    }
+
+}

+ 4 - 3
demo/src/main/java/com/sybotan/android/demo/view/ObjectRelationDialog.java

@@ -16,6 +16,7 @@ import androidx.annotation.NonNull;
 import com.framework.mvvm.model.db.entity.task.ObjectEntity;
 import com.framework.mvvm.model.db.entity.task.ObjectEntity;
 import com.sybotan.android.demo.R;
 import com.sybotan.android.demo.R;
 import com.sybotan.android.demo.bean.RelConfigEntityPackClass;
 import com.sybotan.android.demo.bean.RelConfigEntityPackClass;
+import com.sybotan.android.demo.tools.ObjectNameUtils;
 import com.sybotan.android.demo.tools.ToastUtils;
 import com.sybotan.android.demo.tools.ToastUtils;
 
 
 
 
@@ -52,10 +53,10 @@ public class ObjectRelationDialog extends Dialog implements View.OnClickListener
 
 
         relationTitle.setText(configEntity.entity.getGraphName() + "/" + configEntity.entity.getRelName());
         relationTitle.setText(configEntity.entity.getGraphName() + "/" + configEntity.entity.getRelName());
         leftName.setText(localId);
         leftName.setText(localId);
-        if (TextUtils.isEmpty(equip.getLocalId())) {
-            rightName.setText(equip.getLocalName());
+        if (equip.getObjType().equals("equipment")) {
+            rightName.setText(ObjectNameUtils.Companion.getEquipName(equip.getInfos()));
         } else {
         } else {
-            rightName.setText(equip.getLocalId());
+            rightName.setText(equip.getLocalName());
         }
         }
         for (RelConfigEntityPackClass.TargetRelType type : configEntity.targetTypes) {
         for (RelConfigEntityPackClass.TargetRelType type : configEntity.targetTypes) {
             if (type.targetCode.equals(equip.getClassCode())) {
             if (type.targetCode.equals(equip.getClassCode())) {

+ 3 - 2
demo/src/main/java/com/sybotan/android/demo/view/PipeDialog.java

@@ -16,6 +16,7 @@ import androidx.annotation.NonNull;
 import com.framework.mvvm.model.db.entity.task.ObjectEntity;
 import com.framework.mvvm.model.db.entity.task.ObjectEntity;
 import com.sybotan.android.demo.R;
 import com.sybotan.android.demo.R;
 import com.sybotan.android.demo.bean.PipeConfigEntityPackClass;
 import com.sybotan.android.demo.bean.PipeConfigEntityPackClass;
+import com.sybotan.android.demo.tools.ObjectNameUtils;
 import com.sybotan.android.demo.tools.ToastUtils;
 import com.sybotan.android.demo.tools.ToastUtils;
 
 
 import java.util.Objects;
 import java.util.Objects;
@@ -56,10 +57,10 @@ public class PipeDialog extends Dialog implements View.OnClickListener {
 
 
         if (Objects.equals(configEntity.entity.getClassCodeFrom(), equip.getClassCode())) {
         if (Objects.equals(configEntity.entity.getClassCodeFrom(), equip.getClassCode())) {
             leftName.setText(localId);
             leftName.setText(localId);
-            rightName.setText(equip.getLocalId());
+            rightName.setText(ObjectNameUtils.Companion.getEquipName(equip.getInfos()));
         } else {
         } else {
             rightName.setText(localId);
             rightName.setText(localId);
-            leftName.setText(equip.getLocalId());
+            leftName.setText(ObjectNameUtils.Companion.getEquipName(equip.getInfos()));
         }
         }
         for (PipeConfigEntityPackClass.TargetPipeType type : configEntity.targetTypes) {
         for (PipeConfigEntityPackClass.TargetPipeType type : configEntity.targetTypes) {
             if (type.targetCode.equals(equip.getClassCode())) {
             if (type.targetCode.equals(equip.getClassCode())) {

+ 3 - 1
demo/src/main/java/com/sybotan/android/demo/view/SelectListSinglePopupWindow.java

@@ -33,7 +33,9 @@ import com.sybotan.android.demo.R;
 import com.sybotan.android.demo.activities.BaseActivity;
 import com.sybotan.android.demo.activities.BaseActivity;
 import com.sybotan.android.demo.adapter.PersonalSelectSingleAdapter;
 import com.sybotan.android.demo.adapter.PersonalSelectSingleAdapter;
 import com.sybotan.android.demo.retrofit.Constant;
 import com.sybotan.android.demo.retrofit.Constant;
+import com.sybotan.android.demo.tools.ObjectNameUtils;
 
 
+import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
@@ -129,7 +131,7 @@ public class SelectListSinglePopupWindow extends PopupWindow {
                     String s = searchEdt.getText().toString().trim();
                     String s = searchEdt.getText().toString().trim();
                     itemList.clear();
                     itemList.clear();
                     for (int i = 0; i < dataList.size(); i++) {
                     for (int i = 0; i < dataList.size(); i++) {
-                        if ((!TextUtils.isEmpty(dataList.get(i).getLocalId()) && Objects.requireNonNull(dataList.get(i).getLocalId()).contains(s)) || (!TextUtils.isEmpty(dataList.get(i).getLocalName()) && Objects.requireNonNull(dataList.get(i).getLocalName()).contains(s)) || dataList.get(i).getClassCode().contains(s)) {
+                        if ((Objects.requireNonNull(ObjectNameUtils.Companion.getEquipName(dataList.get(i).getInfos())).contains(s)) || (!TextUtils.isEmpty(dataList.get(i).getLocalName()) && Objects.requireNonNull(dataList.get(i).getLocalName()).contains(s)) || dataList.get(i).getClassCode().contains(s)) {
                             itemList.add(dataList.get(i));
                             itemList.add(dataList.get(i));
                         }
                         }
                     }
                     }

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

@@ -7,11 +7,13 @@ import com.framework.mvvm.model.repository.AdmRepository
 import com.sybotan.android.demo.activities.BaseActivity
 import com.sybotan.android.demo.activities.BaseActivity
 import com.sybotan.android.demo.bean.ContainerParentBean
 import com.sybotan.android.demo.bean.ContainerParentBean
 import com.sybotan.android.demo.retrofit.BaseViewModelInterface
 import com.sybotan.android.demo.retrofit.BaseViewModelInterface
+import com.sybotan.android.demo.tools.ObjectNameUtils
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.launch
 import org.kodein.di.DI
 import org.kodein.di.DI
 import org.kodein.di.DIAware
 import org.kodein.di.DIAware
 import org.kodein.di.android.x.closestDI
 import org.kodein.di.android.x.closestDI
 import org.kodein.di.instance
 import org.kodein.di.instance
+import kotlin.reflect.jvm.internal.impl.name.NameUtils
 
 
 
 
 /**
 /**
@@ -51,7 +53,7 @@ class ContainerVM(
                 children.add(child)
                 children.add(child)
             }
             }
             val hashMap = HashMap<String, Any>()
             val hashMap = HashMap<String, Any>()
-            hashMap.put("title", equip.localId!!)
+            hashMap.put("title", ObjectNameUtils.getEquipName(equip.infos!!))
             hashMap.put("parent", parent)
             hashMap.put("parent", parent)
             hashMap.put("child", children)
             hashMap.put("child", children)
             mEmitter.SendDirective(CONTAINER, hashMap)
             mEmitter.SendDirective(CONTAINER, hashMap)

+ 75 - 0
demo/src/main/java/com/sybotan/android/demo/viewmodel/EquipDeliveryCodeVM.kt

@@ -0,0 +1,75 @@
+package com.sybotan.android.demo.viewmodel
+
+import android.app.Activity
+import android.app.Application
+import android.content.Intent
+import android.os.Bundle
+import android.text.TextUtils
+import androidx.lifecycle.viewModelScope
+import com.framework.mvvm.model.db.entity.task.*
+import com.framework.mvvm.model.repository.AdmRepository
+import com.google.gson.Gson
+import com.sybotan.android.demo.activities.BaseActivity
+import com.sybotan.android.demo.retrofit.BaseViewModelInterface
+import com.zbar.lib.CaptureActivity
+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
+
+
+/**
+ * Created by lihao.
+ * Date: 2021/6/9
+ */
+class EquipDeliveryCodeVM(
+    app: Application,
+    b: BaseViewModelInterface?, activity: BaseActivity?, //建筑id
+    private val buildingId: String, //楼层id
+    private val floorId: String,
+    private val projectId: String
+) : BaseViewModel(app, b, activity), DIAware {
+
+    fun getEquip(deviceId: String) {
+        viewModelScope.launch {
+            val equipEntity = repo.getObject(deviceId)
+            mEmitter.SendDirective(EQUIP_ENTITY, equipEntity)
+        }
+    }
+
+    fun getSpace(spaceId: String) {
+        viewModelScope.launch {
+            val spaceEntity = repo.getObject(spaceId)
+            mEmitter.SendDirective(SPACE_ENTITY, spaceEntity)
+        }
+    }
+
+    fun insSerialNumber(deviceId: String, content1: String, content2: String, content3: String, content4: String) {
+        viewModelScope.launch {
+            val equipEntity = repo.getObject(deviceId)
+            val code = "$content1-$content2-$content3-$content4"
+            if (equipEntity != null) {
+                val hashMap = gson.fromJson(equipEntity.infos, HashMap::class.java) as HashMap<String, Any>
+                hashMap.put("digitalDeliveryID", code)
+                equipEntity.infos = gson.toJsonTree(hashMap)
+                repo.insObject(equipEntity)
+            }
+            val intent = Intent()
+            intent.putExtra("digitalDeliveryID", code)
+            mActivity.setResult(Activity.RESULT_OK, intent)
+            mActivity.finish()
+        }
+    }
+
+    private val gson = Gson()
+
+    override val di: DI by closestDI()
+    private val repo: AdmRepository by instance()
+
+
+    companion object {
+        const val EQUIP_ENTITY = "EQUIP_ENTITY"
+        const val SPACE_ENTITY = "SPACE_ENTITY"
+    }
+}

+ 15 - 17
demo/src/main/java/com/sybotan/android/demo/viewmodel/EquipDetailVM.kt

@@ -35,6 +35,7 @@ import java.util.*
 import kotlin.collections.ArrayList
 import kotlin.collections.ArrayList
 import kotlin.collections.HashMap
 import kotlin.collections.HashMap
 import com.sybotan.android.demo.bean.*
 import com.sybotan.android.demo.bean.*
+import com.sybotan.android.demo.tools.ObjectNameUtils
 
 
 
 
 /**
 /**
@@ -66,7 +67,9 @@ class EquipDetailVM(
 
 
             if (!TextUtils.isEmpty(deviceId)) {
             if (!TextUtils.isEmpty(deviceId)) {
                 var equip = repo.getObject(deviceId)
                 var equip = repo.getObject(deviceId)
-                val infos = gson.fromJson(equip!!.infos, HashMap::class.java)
+                val infos = gson.fromJson(equip!!.infos, HashMap::class.java) as HashMap<String, Any>
+                infos.put("localId", equip.localId.toString())
+                infos.put("localName", equip.localName.toString())
                 mEmitter.SendDirective(SPACE_INFOS, infos)
                 mEmitter.SendDirective(SPACE_INFOS, infos)
                 mEmitter.SendDirective(Equip_INFOS, equip)
                 mEmitter.SendDirective(Equip_INFOS, equip)
             }
             }
@@ -146,23 +149,18 @@ class EquipDetailVM(
         equipContent: String,
         equipContent: String,
         beans: ArrayList<Photos>,
         beans: ArrayList<Photos>,
         equipEntity: EquipmentEntity,
         equipEntity: EquipmentEntity,
-        localName: String,
-        localId: String,
         checked: Int,
         checked: Int,
         position: Position,
         position: Position,
         containerId: String,
         containerId: String,
     ) {
     ) {
         viewModelScope.launch {
         viewModelScope.launch {
-            val objects = repo.getObjects()
-            if (!CommonUtils.IsNull(objects)) {
-                for (obj in objects) {
-                    if (deviceId != obj.id && !TextUtils.isEmpty(obj.localId) && obj.localId!!.toUpperCase()
-                            .equals(localId.toUpperCase())
-                    ) {
-                        ToastUtils.showMyToast("已有此编码的设备")
-                        return@launch
-                    }
-                }
+            var localId = ""
+            if (hashMap!!["localId"] != null && !TextUtils.isEmpty(hashMap["localId"].toString())) {
+                localId = hashMap["localId"].toString()
+            }
+            var localName = ""
+            if (hashMap!!["localName"] != null && !TextUtils.isEmpty(hashMap["localName"].toString())) {
+                localId = hashMap["localName"].toString()
             }
             }
             hashMap!!.put("equipContent", equipContent)
             hashMap!!.put("equipContent", equipContent)
             hashMap!!.put("equipPhoto", gson.toJson(beans))
             hashMap!!.put("equipPhoto", gson.toJson(beans))
@@ -308,13 +306,13 @@ class EquipDetailVM(
             floorPipe.objFromLocalId = "该设备"
             floorPipe.objFromLocalId = "该设备"
         } else {
         } else {
             floorPipe.objFromLocalId =
             floorPipe.objFromLocalId =
-                if (from!!.id.startsWith("Eq")) from!!.localId else from!!.localName
+                if (from!!.id.startsWith("Eq")) ObjectNameUtils.getEquipName(from.infos!!) else from!!.localName
         }
         }
         val to = repo.getObject(floorPipe.objTo!!)
         val to = repo.getObject(floorPipe.objTo!!)
         if (to == null) {
         if (to == null) {
             floorPipe.objToLocalId = "该设备"
             floorPipe.objToLocalId = "该设备"
         } else {
         } else {
-            floorPipe.objToLocalId = if (to!!.id.startsWith("Eq")) to!!.localId else to!!.localName
+            floorPipe.objToLocalId = if (to!!.id.startsWith("Eq")) ObjectNameUtils.getEquipName(to.infos!!) else to!!.localName
         }
         }
     }
     }
 
 
@@ -402,13 +400,13 @@ class EquipDetailVM(
                 rel.objFromLocalId = "该设备"
                 rel.objFromLocalId = "该设备"
             } else {
             } else {
                 rel.objFromLocalId =
                 rel.objFromLocalId =
-                    if (from!!.id.startsWith("Eq")) from!!.localId else from!!.localName
+                    if (from!!.id.startsWith("Eq")) ObjectNameUtils.getEquipName(from.infos) else from!!.localName
             }
             }
             val to = repo.getObject(rel.objTo!!)
             val to = repo.getObject(rel.objTo!!)
             if (to == null) {
             if (to == null) {
                 rel.objToLocalId = "该设备"
                 rel.objToLocalId = "该设备"
             } else {
             } else {
-                rel.objToLocalId = if (to!!.id.startsWith("Eq")) to!!.localId else to!!.localName
+                rel.objToLocalId = if (to!!.id.startsWith("Eq")) ObjectNameUtils.getEquipName(to.infos) else to!!.localName
             }
             }
         }
         }
     }
     }

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

@@ -76,68 +76,70 @@ class GraphyVM(
             for (spaceEntity in spaceList) {
             for (spaceEntity in spaceList) {
                 var spaceJobModel = SpaceJobModel()
                 var spaceJobModel = SpaceJobModel()
                 val objectEntity = repo.getObject(spaceEntity.spaceId)
                 val objectEntity = repo.getObject(spaceEntity.spaceId)
-                spaceJobModel.buildingId = buildingId
-                spaceJobModel.id = spaceEntity.spaceId
-                spaceJobModel.localName = objectEntity!!.localName
-                spaceJobModel.name = objectEntity.name
-                spaceJobModel.projectId = projectId
-                val infos = gson.fromJson(objectEntity.infos, InfosForObj::class.java)
-                spaceJobModel.outline = infos.outline
-                spaceJobModel.objectEntity = objectEntity
-                if (from.equals("space")) {
-                    val problems = repo.getProblemByAvalible(floorId)
-                    var hasProblem = false
-                    var list: ArrayList<PointF> = ArrayList()
-                    for (line in spaceJobModel.outline[0]!!) {
-                        if (line.size < 1) {
-                            list.add(PointF(line[0].x, line[0].y))
-                            continue
+                objectEntity?.let {
+                    spaceJobModel.buildingId = buildingId
+                    spaceJobModel.id = spaceEntity.spaceId
+                    spaceJobModel.localName = objectEntity!!.localName
+                    spaceJobModel.name = objectEntity.name
+                    spaceJobModel.projectId = projectId
+                    val infos = gson.fromJson(objectEntity.infos, InfosForObj::class.java)
+                    spaceJobModel.outline = infos.outline
+                    spaceJobModel.objectEntity = objectEntity
+                    if (from.equals("space")) {
+                        val problems = repo.getProblemByAvalible(floorId)
+                        var hasProblem = false
+                        var list: ArrayList<PointF> = ArrayList()
+                        for (line in spaceJobModel.outline[0]!!) {
+                            if (line.size < 1) {
+                                list.add(PointF(line[0].x, line[0].y))
+                                continue
+                            }
+                            for (p in line) {
+                                list.add(PointF(p.x, p.y))
+                            }
                         }
                         }
-                        for (p in line) {
-                            list.add(PointF(p.x, p.y))
+                        for (problem in problems) {
+                            val geomList = gson.fromJson<List<PointF>>(
+                                problem.geom,
+                                object : TypeToken<List<PointF?>?>() {}.type
+                            )
+                            for (gemo in geomList) {
+                                val pointF: android.graphics.Point
+                                if (geomList.size == 1) {
+                                    pointF = android.graphics.Point(
+                                        gemo.x.toInt(),
+                                        -gemo.y.toInt()
+                                    )
+                                } else {
+                                    pointF = android.graphics.Point(
+                                        gemo.x.toInt(),
+                                        gemo.y.toInt()
+                                    )
+                                }
+                                if (Lasso.isPolygonContainsPoint(list, pointF)) {
+                                    hasProblem = true
+                                    break
+                                }
+                            }
                         }
                         }
-                    }
-                    for (problem in problems) {
-                        val geomList = gson.fromJson<List<PointF>>(
-                            problem.geom,
-                            object : TypeToken<List<PointF?>?>() {}.type
-                        )
-                        for (gemo in geomList) {
-                            val pointF: android.graphics.Point
-                            if (geomList.size == 1) {
-                                pointF = android.graphics.Point(
-                                    gemo.x.toInt(),
-                                    -gemo.y.toInt()
-                                )
+                        if (spaceEntity.archState == 1) {
+                            if (hasProblem) {
+                                spaceJobModel.job = "02"
                             } else {
                             } else {
-                                pointF = android.graphics.Point(
-                                    gemo.x.toInt(),
-                                    gemo.y.toInt()
-                                )
-                            }
-                            if (Lasso.isPolygonContainsPoint(list, pointF)) {
-                                hasProblem = true
-                                break
+                                spaceJobModel.job = "01"
                             }
                             }
-                        }
-                    }
-                    if (spaceEntity.archState == 1) {
-                        if (hasProblem) {
-                            spaceJobModel.job = "02"
                         } else {
                         } else {
-                            spaceJobModel.job = "01"
+                            spaceJobModel.job = "03"
                         }
                         }
                     } else {
                     } else {
-                        spaceJobModel.job = "03"
-                    }
-                } else {
-                    if (spaceEntity.equipState == 1) {
-                        spaceJobModel.job = "04"
-                    } else {
-                        spaceJobModel.job = "05"
+                        if (spaceEntity.equipState == 1) {
+                            spaceJobModel.job = "04"
+                        } else {
+                            spaceJobModel.job = "05"
+                        }
                     }
                     }
+                    spaceJobList.add(spaceJobModel)
                 }
                 }
-                spaceJobList.add(spaceJobModel)
             }
             }
             mEmitter.SendDirective(SPACE_JOB, spaceJobList)
             mEmitter.SendDirective(SPACE_JOB, spaceJobList)
 
 
@@ -197,9 +199,55 @@ class GraphyVM(
                         child.deviceId = equip.id
                         child.deviceId = equip.id
                         child.name = equip.name
                         child.name = equip.name
                         val infos = gson.fromJson(equip.infos, InfosforEquip::class.java)
                         val infos = gson.fromJson(equip.infos, InfosforEquip::class.java)
+                        child.digitalDeliveryID = infos.digitalDeliveryID
+                        if (!equip.infos!!.asJsonObject.keySet().isEmpty() && infos.location != null) {
+                            val eqProblems = repo.getEqProblem(equip.id)
+                            //1-蓝 2-绿 3-红
+                            if (eqProblems == null || TextUtils.isEmpty(eqProblems.id)) {
+                                if (infos.equipCheck != null && (infos.equipCheck is Double || infos.equipCheck is Int)) {
+                                    when {
+                                        infos.equipCheck.toInt() == RMTristateSwitch.STATE_LEFT -> {
+                                            child.type = 5
+                                        }
+                                        infos.equipCheck.toInt() == RMTristateSwitch.STATE_MIDDLE -> {
+                                            child.type = 1
+                                        }
+                                        infos.equipCheck.toInt() == RMTristateSwitch.STATE_RIGHT -> {
+                                            child.type = 2
+                                        }
+                                    }
+                                } else {
+                                    child.type = 1
+                                }
+                            } else {
+                                child.type = 3
+                            }
+                            val position = Position()
+                            position.x = infos.location.x.toString()
+                            position.y = infos.location.y.toString()
+                            val z = Z()
+                            z.offset = infos.location.z.toString()
+                            z.region = infos.zRegion
+                            position.z = z
+                            child.position = gson.toJson(position)
+                            model.children.add(child)
+                        }
+                    }
+                }
+                if (!hasParent) {
+                    val spaceModel = SpaceEqModel()
+                    spaceModel.type = equip.classCode
+                    var equipEntity = repo.getEquipByCode(equip.classCode!!)
+                    spaceModel.typeName = equipEntity?.name
+                    val child = Children()
+                    child.deviceId = equip.id
+                    child.name = equip.name
+                    val infos = gson.fromJson(equip.infos, InfosforEquip::class.java)
+                    child.digitalDeliveryID = infos.digitalDeliveryID
+                    if (!equip.infos!!.asJsonObject.keySet().isEmpty()) {
                         val eqProblems = repo.getEqProblem(equip.id)
                         val eqProblems = repo.getEqProblem(equip.id)
-                        //1-蓝 2-绿 3-红
                         if (eqProblems == null || TextUtils.isEmpty(eqProblems.id)) {
                         if (eqProblems == null || TextUtils.isEmpty(eqProblems.id)) {
+                            //type 1-蓝 2-绿 3-红 4-黄 5-紫
                             if (infos.equipCheck is Double || infos.equipCheck is Int) {
                             if (infos.equipCheck is Double || infos.equipCheck is Int) {
                                 when {
                                 when {
                                     infos.equipCheck.toInt() == RMTristateSwitch.STATE_LEFT -> {
                                     infos.equipCheck.toInt() == RMTristateSwitch.STATE_LEFT -> {
@@ -226,49 +274,9 @@ class GraphyVM(
                         z.region = infos.zRegion
                         z.region = infos.zRegion
                         position.z = z
                         position.z = z
                         child.position = gson.toJson(position)
                         child.position = gson.toJson(position)
-                        model.children.add(child)
-                    }
-                }
-                if (!hasParent) {
-                    val spaceModel = SpaceEqModel()
-                    spaceModel.type = equip.classCode
-                    var equipEntity = repo.getEquipByCode(equip.classCode!!)
-                    spaceModel.typeName = equipEntity?.name
-                    val child = Children()
-                    child.deviceId = equip.id
-                    child.name = equip.name
-                    val infos = gson.fromJson(equip.infos, InfosforEquip::class.java)
-                    val eqProblems = repo.getEqProblem(equip.id)
-                    if (eqProblems == null || TextUtils.isEmpty(eqProblems.id)) {
-                        //type 1-蓝 2-绿 3-红 4-黄 5-紫
-                        if (infos.equipCheck is Double || infos.equipCheck is Int) {
-                            when {
-                                infos.equipCheck.toInt() == RMTristateSwitch.STATE_LEFT -> {
-                                    child.type = 5
-                                }
-                                infos.equipCheck.toInt() == RMTristateSwitch.STATE_MIDDLE -> {
-                                    child.type = 1
-                                }
-                                infos.equipCheck.toInt() == RMTristateSwitch.STATE_RIGHT -> {
-                                    child.type = 2
-                                }
-                            }
-                        } else {
-                            child.type = 1
-                        }
-                    } else {
-                        child.type = 3
+                        spaceModel.children.add(child)
+                        models.add(spaceModel)
                     }
                     }
-                    val position = Position()
-                    position.x = infos.location.x.toString()
-                    position.y = infos.location.y.toString()
-                    val z = Z()
-                    z.offset = infos.location.z.toString()
-                    z.region = infos.zRegion
-                    position.z = z
-                    child.position = gson.toJson(position)
-                    spaceModel.children.add(child)
-                    models.add(spaceModel)
                 }
                 }
             }
             }
             mEmitter.SendDirective(SPACE_EQ, models)
             mEmitter.SendDirective(SPACE_EQ, models)

+ 96 - 0
demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceDeliveryCodeVM.kt

@@ -0,0 +1,96 @@
+package com.sybotan.android.demo.viewmodel
+
+import android.app.Activity
+import android.app.Application
+import android.content.Intent
+import android.os.Bundle
+import android.text.TextUtils
+import androidx.lifecycle.viewModelScope
+import com.framework.mvvm.model.db.entity.task.*
+import com.framework.mvvm.model.repository.AdmRepository
+import com.google.gson.Gson
+import com.sybotan.android.demo.activities.BaseActivity
+import com.sybotan.android.demo.retrofit.BaseViewModelInterface
+import com.zbar.lib.CaptureActivity
+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
+
+
+/**
+ * Created by lihao.
+ * Date: 2021/6/9
+ */
+class SpaceDeliveryCodeVM(
+    app: Application,
+    b: BaseViewModelInterface?, activity: BaseActivity?, //建筑id
+    private val buildingId: String, //楼层id
+    private val floorId: String,
+    private val projectId: String
+) : BaseViewModel(app, b, activity), DIAware {
+    private val gson = Gson()
+
+    override val di: DI by closestDI()
+    private val repo: AdmRepository by instance()
+
+
+    fun getFloor() {
+        viewModelScope.launch {
+            val floorEntity = repo.getObject(floorId)
+            mEmitter.SendDirective(FLOOR_INFO, floorEntity)
+
+            val floors = repo.getSpaceByFloorId(floorId)
+            var maxSerialNumber = 1
+            for (floor in floors) {
+                val info = gson.fromJson(floor.infos, InfosforFloor::class.java)
+                if (!TextUtils.isEmpty(info.digitalDeliveryID)) {
+                    val serialNumber = info.digitalDeliveryID.substringAfterLast("-RM").toInt()
+                    if (serialNumber > maxSerialNumber) {
+                        maxSerialNumber = serialNumber
+                    }
+                }
+            }
+            mEmitter.SendDirective(SERIAL_NUMBER, (++maxSerialNumber).toString())
+            mEmitter.SendDirective(FLOOR_INFO, floorEntity)
+        }
+    }
+
+    fun getSpace(spaceId: String) {
+        viewModelScope.launch {
+            val spaceEntity = repo.getObject(spaceId)
+            val info = gson.fromJson(spaceEntity!!.infos, InfosforSpace::class.java)
+            mEmitter.SendDirective(SPACE_DELIVER_CODE, info.digitalDeliveryID)
+        }
+    }
+
+    fun insSerialNumber(spaceId: String, content1: String, content2: String) {
+        viewModelScope.launch {
+            val spaceEntity = repo.getObject(spaceId)
+            if (spaceEntity != null) {
+                val hashMap = gson.fromJson(spaceEntity.infos, HashMap::class.java) as HashMap<String, Any>
+                hashMap.put("digitalDeliveryID", "$content1-RM$content2")
+                spaceEntity.infos = gson.toJsonTree(hashMap)
+                repo.insObject(spaceEntity)
+            }
+            val intent = Intent()
+            intent.putExtra("digitalDeliveryID", "$content1-RM$content2")
+            mActivity.setResult(Activity.RESULT_OK, intent)
+            mActivity.finish()
+        }
+    }
+
+
+    companion object {
+        //楼层
+        const val FLOOR_INFO = "FLOOR_INFO"
+
+        //流水号
+        const val SERIAL_NUMBER = "SERIAL_NUMBER"
+
+        //空间数字化编码
+        const val SPACE_DELIVER_CODE = "SPACE_DELIVER_CODE"
+
+    }
+}

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

@@ -73,6 +73,9 @@ class SpaceDetailVM(
                 }
                 }
                 if (TextUtils.isEmpty(info.inputType)) {
                 if (TextUtils.isEmpty(info.inputType)) {
                     when {
                     when {
+                        info.code.equals("digitalDeliveryID") -> {
+                            info.inputType = "digitalDeliveryID"
+                        }
                         info.dataType.equals("BOOLEAN") -> {
                         info.dataType.equals("BOOLEAN") -> {
                             if (CommonUtils.IsNull(info.options)) {
                             if (CommonUtils.IsNull(info.options)) {
                                 info.options = ArrayList()
                                 info.options = ArrayList()

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

@@ -65,59 +65,62 @@ class SpaceMapVM(
             for (spaceEntity in spaceList) {
             for (spaceEntity in spaceList) {
                 val spaceJobModel = SpaceJobModel()
                 val spaceJobModel = SpaceJobModel()
                 val objectEntity = repo.getObject(spaceEntity.spaceId)
                 val objectEntity = repo.getObject(spaceEntity.spaceId)
-                spaceJobModel.buildingId = buildingId
-                spaceJobModel.id = spaceEntity.spaceId
-                spaceJobModel.localName = objectEntity!!.localName
-                spaceJobModel.name = objectEntity.name
-                spaceJobModel.projectId = projectId
-                val infos = gson.fromJson(objectEntity.infos, InfosForObj::class.java)
-                spaceJobModel.outline = infos.outline
-                spaceJobModel.objectEntity = objectEntity
-                val problems = repo.getProblemByAvalible(floorId)
-                var hasProblem = false
-                val list: ArrayList<PointF> = ArrayList()
-                for (line in spaceJobModel.outline[0]!!) {
-                    if (line.size < 1) {
-                        list.add(PointF(line[0].x, line[0].y))
-                        continue
+                if (objectEntity != null) {
+                    spaceJobModel.buildingId = buildingId
+                    spaceJobModel.id = spaceEntity.spaceId
+                    spaceJobModel.localName = objectEntity!!.localName
+                    spaceJobModel.name = objectEntity.name
+                    spaceJobModel.projectId = projectId
+                    val infos = gson.fromJson(objectEntity.infos, InfosForObj::class.java)
+//                    val infos = SJsonUtil.fromJson(gson.toJson(objectEntity.infos!!.asJsonObject), InfosForObj::class.java)
+                    spaceJobModel.outline = infos!!.outline
+                    spaceJobModel.objectEntity = objectEntity
+                    val problems = repo.getProblemByAvalible(floorId)
+                    var hasProblem = false
+                    val list: ArrayList<PointF> = ArrayList()
+                    for (line in spaceJobModel.outline[0]!!) {
+                        if (line.size < 1) {
+                            list.add(PointF(line[0].x, line[0].y))
+                            continue
+                        }
+                        for (p in line) {
+                            list.add(PointF(p.x, p.y))
+                        }
                     }
                     }
-                    for (p in line) {
-                        list.add(PointF(p.x, p.y))
+                    for (problem in problems) {
+                        val geomList = gson.fromJson<List<PointF>>(
+                            problem.geom,
+                            object : TypeToken<List<PointF?>?>() {}.type
+                        )
+                        for (gemo in geomList) {
+                            val pointF = if (geomList.size == 1) {
+                                android.graphics.Point(
+                                    gemo.x.toInt(),
+                                    -gemo.y.toInt()
+                                )
+                            } else {
+                                android.graphics.Point(
+                                    gemo.x.toInt(),
+                                    gemo.y.toInt()
+                                )
+                            }
+                            if (Lasso.isPolygonContainsPoint(list, pointF)) {
+                                hasProblem = true
+                                break
+                            }
+                        }
                     }
                     }
-                }
-                for (problem in problems) {
-                    val geomList = gson.fromJson<List<PointF>>(
-                        problem.geom,
-                        object : TypeToken<List<PointF?>?>() {}.type
-                    )
-                    for (gemo in geomList) {
-                        val pointF = if (geomList.size == 1) {
-                            android.graphics.Point(
-                                gemo.x.toInt(),
-                                -gemo.y.toInt()
-                            )
+                    if (spaceEntity.archState == 1) {
+                        if (hasProblem) {
+                            spaceJobModel.job = "02"
                         } else {
                         } else {
-                            android.graphics.Point(
-                                gemo.x.toInt(),
-                                gemo.y.toInt()
-                            )
-                        }
-                        if (Lasso.isPolygonContainsPoint(list, pointF)) {
-                            hasProblem = true
-                            break
+                            spaceJobModel.job = "01"
                         }
                         }
-                    }
-                }
-                if (spaceEntity.archState == 1) {
-                    if (hasProblem) {
-                        spaceJobModel.job = "02"
                     } else {
                     } else {
-                        spaceJobModel.job = "01"
+                        spaceJobModel.job = "03"
                     }
                     }
-                } else {
-                    spaceJobModel.job = "03"
+                    spaceJobList.add(spaceJobModel)
                 }
                 }
-                spaceJobList.add(spaceJobModel)
             }
             }
             mEmitter.SendDirective(SPACE_JOB, spaceJobList)
             mEmitter.SendDirective(SPACE_JOB, spaceJobList)
 
 

+ 1 - 1
demo/src/main/res/drawable/shape_rectangle_green_3.xml

@@ -3,7 +3,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
     android:shape="rectangle">
     <corners
     <corners
-        android:radius="3dp"/>
+        android:radius="10dp"/>
     <solid
     <solid
         android:color="@color/BgBlue_3BACB2"/>
         android:color="@color/BgBlue_3BACB2"/>
     <stroke
     <stroke

+ 318 - 0
demo/src/main/res/layout/activity_equip_delivery_code.xml

@@ -0,0 +1,318 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/root"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context=".activities.SpaceDeliveryCodeActivity">
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="40dp"
+            android:orientation="vertical">
+
+            <RelativeLayout
+                android:id="@+id/titleRl"
+                android:layout_width="match_parent"
+                android:layout_height="50dp">
+
+                <ImageView
+                    android:id="@+id/backIv"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:layout_centerVertical="true"
+                    android:layout_marginStart="16dp"
+                    android:contentDescription="back"
+                    android:src="@drawable/ic_round_arrow_back_24"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/titleTv"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_centerInParent="true"
+                    android:text="设备本地编码"
+                    android:textColor="@color/black_272727"
+                    android:textSize="18sp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+            </RelativeLayout>
+
+            <TextView
+                android:id="@+id/secondTitle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="16dp"
+                android:layout_marginTop="16dp"
+                android:text="数字化交付编码"
+                android:textColor="@color/black_272727"
+                android:textSize="15sp" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="设备类型编码"
+                    android:textColor="@color/black_272727"
+                    android:textSize="15sp" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="位置标识"
+                    android:textColor="@color/black_272727"
+                    android:textSize="15sp" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="16dp"
+                android:layout_marginTop="12dp"
+                android:layout_marginRight="16dp"
+                android:orientation="horizontal">
+
+                <EditText
+                    android:id="@+id/edt1"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="2"
+                    android:background="@drawable/bg_round_search"
+                    android:enabled="false"
+                    android:alpha="0.5"
+                    android:gravity="center"
+                    android:hint=""
+                    android:maxLength="6"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="-"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+
+                <EditText
+                    android:id="@+id/edt2"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="2"
+                    android:background="@drawable/bg_round_search"
+                    android:gravity="center"
+                    android:hint="请输入"
+                    android:inputType="number"
+                    android:maxLength="12"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="60dp"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="设备安装点标识"
+                    android:textColor="@color/black_272727"
+                    android:textSize="15sp" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="实例编码"
+                    android:textColor="@color/black_272727"
+                    android:textSize="15sp" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="16dp"
+                android:layout_marginTop="12dp"
+                android:layout_marginRight="16dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="-"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+
+                <TextView
+                    android:id="@+id/edt3"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="2"
+                    android:background="@drawable/bg_round_search"
+                    android:drawableRight="@mipmap/icon_push_down"
+                    android:gravity="center"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="-"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+
+                <EditText
+                    android:id="@+id/edt4"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="2"
+                    android:background="@drawable/bg_round_search"
+                    android:gravity="center"
+                    android:hint="请输入"
+                    android:inputType="number"
+                    android:maxLength="5"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+            </LinearLayout>
+
+            <TextView
+                android:id="@+id/submit"
+                android:layout_width="130dp"
+                android:layout_height="40dp"
+                android:layout_gravity="center"
+                android:layout_marginTop="20dp"
+                android:layout_marginBottom="40dp"
+                android:alpha="0.5"
+                android:background="@drawable/shape_rectangle_green_3"
+                android:enabled="false"
+                android:gravity="center"
+                android:text="提交"
+                android:textColor="@color/white_ffffff"
+                android:textSize="17dp" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <ImageView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:src="@mipmap/icon_arrow_up" />
+
+                <ImageView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:src="@mipmap/icon_arrow_up" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="对象类型编码"
+                    android:textColor="@color/black_272727"
+                    android:textSize="14sp" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="所在物业空间数字化交付编码"
+                    android:textColor="@color/black_272727"
+                    android:textSize="14sp" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="30dp"
+                android:layout_marginTop="12dp"
+                android:layout_marginRight="30dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:id="@+id/tv1"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:background="@drawable/bg_grey_e6e6e6"
+                    android:gravity="center"
+                    android:text="ACAAAP"
+                    android:textColor="@color/black_272727"
+                    android:textSize="16sp" />
+
+                <TextView
+                    android:id="@+id/tv2"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="40dp"
+                    android:layout_weight="1"
+                    android:background="@drawable/bg_grey_e6e6e6"
+                    android:gravity="center"
+                    android:text="B1-RM89"
+                    android:textColor="@color/black_272727"
+                    android:textSize="16sp" />
+            </LinearLayout>
+
+            <ImageView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:src="@mipmap/image1" />
+
+            <ImageView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:src="@mipmap/image2" />
+
+            <ImageView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:src="@mipmap/image3" />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>

+ 0 - 7
demo/src/main/res/layout/activity_equip_detail.xml

@@ -56,13 +56,6 @@
             android:visibility="gone"
             android:visibility="gone"
             app:Type="1" />
             app:Type="1" />
 
 
-        <com.sybotan.android.demo.view.ListItemView
-            android:id="@+id/localId"
-            android:layout_width="match_parent"
-            android:layout_height="44dp"
-            android:layout_marginTop="10dp"
-            app:Type="1" />
-
         <include layout="@layout/view_mtext" />
         <include layout="@layout/view_mtext" />
 
 
         <com.sybotan.android.demo.view.ListItemView
         <com.sybotan.android.demo.view.ListItemView

+ 225 - 0
demo/src/main/res/layout/activity_space_delivery_code.xml

@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context=".activities.SpaceDeliveryCodeActivity">
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <RelativeLayout
+                android:id="@+id/titleRl"
+                android:layout_width="match_parent"
+                android:layout_height="50dp">
+
+                <ImageView
+                    android:id="@+id/backIv"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:layout_centerVertical="true"
+                    android:layout_marginStart="16dp"
+                    android:contentDescription="back"
+                    android:src="@drawable/ic_round_arrow_back_24"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/titleTv"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_centerInParent="true"
+                    android:text="空间本地名称"
+                    android:textColor="@color/black_272727"
+                    android:textSize="18sp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+            </RelativeLayout>
+
+            <TextView
+                android:id="@+id/secondTitle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="16dp"
+                android:layout_marginTop="16dp"
+                android:text="数字化交付编码"
+                android:textColor="@color/black_272727"
+                android:textSize="15sp" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="位置标识"
+                    android:textColor="@color/black_272727"
+                    android:textSize="15sp" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="顺序号"
+                    android:textColor="@color/black_272727"
+                    android:textSize="15sp" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="16dp"
+                android:layout_marginTop="12dp"
+                android:layout_marginRight="16dp"
+                android:orientation="horizontal">
+
+                <EditText
+                    android:id="@+id/edt1"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="2"
+                    android:background="@drawable/bg_round_search"
+                    android:gravity="center"
+                    android:hint="请输入"
+                    android:maxLength="6"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="-RM"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+
+                <EditText
+                    android:id="@+id/edt2"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="2"
+                    android:background="@drawable/bg_round_search"
+                    android:gravity="center"
+                    android:hint="请输入"
+                    android:inputType="number"
+                    android:maxLength="3"
+                    android:textColor="@color/black_272727"
+                    android:textSize="22sp" />
+            </LinearLayout>
+
+            <TextView
+                android:id="@+id/submit"
+                android:layout_width="130dp"
+                android:layout_height="40dp"
+                android:layout_gravity="center"
+                android:layout_marginTop="20dp"
+                android:layout_marginBottom="40dp"
+                android:alpha="0.5"
+                android:background="@drawable/shape_rectangle_green_3"
+                android:enabled="false"
+                android:gravity="center"
+                android:text="提交"
+                android:textColor="@color/white_ffffff"
+                android:textSize="17dp" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <ImageView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:src="@mipmap/icon_arrow_up" />
+
+                <ImageView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:src="@mipmap/icon_arrow_up" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="所在楼层本地编码"
+                    android:textColor="@color/black_272727"
+                    android:textSize="14sp" />
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:gravity="center"
+                    android:text="本机本层空间最大流水号+1\n(多人可能重复)"
+                    android:textColor="@color/black_272727"
+                    android:textSize="14sp" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="30dp"
+                android:layout_marginTop="12dp"
+                android:layout_marginRight="30dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:id="@+id/tv1"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:background="@drawable/bg_grey_e6e6e6"
+                    android:gravity="center"
+                    android:text="RF"
+                    android:textColor="@color/black_272727"
+                    android:textSize="16sp" />
+
+                <TextView
+                    android:id="@+id/tv2"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="40dp"
+                    android:layout_weight="1"
+                    android:background="@drawable/bg_grey_e6e6e6"
+                    android:gravity="center"
+                    android:text="98"
+                    android:textColor="@color/black_272727"
+                    android:textSize="16sp" />
+            </LinearLayout>
+
+            <ImageView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:src="@mipmap/image4" />
+        </LinearLayout>
+    </ScrollView>
+</LinearLayout>

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

@@ -35,23 +35,23 @@
         </RelativeLayout>
         </RelativeLayout>
 
 
         <com.sybotan.android.demo.view.ListItemView
         <com.sybotan.android.demo.view.ListItemView
-            android:visibility="gone"
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
+            android:visibility="gone"
             app:LeftText="物业分区"
             app:LeftText="物业分区"
             app:Type="4" />
             app:Type="4" />
 
 
         <com.sybotan.android.demo.view.ListItemView
         <com.sybotan.android.demo.view.ListItemView
-            android:visibility="gone"
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
+            android:visibility="gone"
             app:LeftText="静态属性信息"
             app:LeftText="静态属性信息"
             app:Type="4" />
             app:Type="4" />
 
 
         <com.sybotan.android.demo.view.ListItemView
         <com.sybotan.android.demo.view.ListItemView
-            android:visibility="gone"
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
+            android:visibility="gone"
             app:LeftText="空间功能类型"
             app:LeftText="空间功能类型"
             app:Type="0" />
             app:Type="0" />
 
 
@@ -60,6 +60,7 @@
         <com.sybotan.android.demo.view.ListItemView
         <com.sybotan.android.demo.view.ListItemView
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
+            android:visibility="gone"
             app:LeftText="对象关系"
             app:LeftText="对象关系"
             app:Type="4" />
             app:Type="4" />
 
 

+ 6 - 5
demo/src/main/res/layout/layout_common_list_item1.xml

@@ -33,18 +33,18 @@
     </RelativeLayout>
     </RelativeLayout>
 
 
     <ImageView
     <ImageView
-        android:visibility="gone"
         android:id="@+id/iv_right"
         android:id="@+id/iv_right"
         android:layout_width="wrap_content"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
         android:layout_alignParentRight="true"
         android:layout_centerVertical="true"
         android:layout_centerVertical="true"
         android:layout_marginRight="15dp"
         android:layout_marginRight="15dp"
-        android:src="@mipmap/cell_jiantouicon" />
+        android:src="@mipmap/cell_jiantouicon"
+        android:visibility="gone" />
 
 
     <TextView
     <TextView
         android:id="@+id/tv_right"
         android:id="@+id/tv_right"
-        android:layout_width="wrap_content"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:layout_centerVertical="true"
         android:layout_centerVertical="true"
         android:layout_marginRight="20dp"
         android:layout_marginRight="20dp"
@@ -53,7 +53,8 @@
         android:singleLine="true"
         android:singleLine="true"
         android:text="人"
         android:text="人"
         android:textColor="@color/black_272727"
         android:textColor="@color/black_272727"
-        android:textSize="15sp" />
+        android:textSize="15sp"
+        android:visibility="gone" />
 
 
     <EditText
     <EditText
         android:id="@+id/et_right"
         android:id="@+id/et_right"
@@ -64,11 +65,11 @@
         android:layout_marginRight="16dp"
         android:layout_marginRight="16dp"
         android:background="@null"
         android:background="@null"
         android:focusable="true"
         android:focusable="true"
-        android:text=""
         android:focusableInTouchMode="true"
         android:focusableInTouchMode="true"
         android:gravity="right"
         android:gravity="right"
         android:hint="请输入"
         android:hint="请输入"
         android:singleLine="true"
         android:singleLine="true"
+        android:text=""
         android:textColor="@color/black_272727"
         android:textColor="@color/black_272727"
         android:textColorHint="@color/gray_a6a6a6"
         android:textColorHint="@color/gray_a6a6a6"
         android:textSize="15sp" />
         android:textSize="15sp" />

+ 1 - 0
demo/src/main/res/layout/view_date.xml

@@ -3,6 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
+    android:background="@drawable/common_line_ffffff_single_all"
     android:orientation="horizontal">
     android:orientation="horizontal">
 
 
     <com.sybotan.android.demo.view.ListItemView
     <com.sybotan.android.demo.view.ListItemView

+ 1 - 0
demo/src/main/res/layout/view_double.xml

@@ -3,6 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
+    android:background="@drawable/common_line_ffffff_single_all"
     android:orientation="horizontal">
     android:orientation="horizontal">
 
 
     <com.sybotan.android.demo.view.ListItemView
     <com.sybotan.android.demo.view.ListItemView

+ 1 - 0
demo/src/main/res/layout/view_enum.xml

@@ -3,6 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
+    android:background="@drawable/common_line_ffffff_single_all"
     android:orientation="horizontal">
     android:orientation="horizontal">
 
 
     <com.sybotan.android.demo.view.ListItemView
     <com.sybotan.android.demo.view.ListItemView

+ 1 - 0
demo/src/main/res/layout/view_int.xml

@@ -3,6 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
+    android:background="@drawable/common_line_ffffff_single_all"
     android:orientation="horizontal">
     android:orientation="horizontal">
 
 
     <com.sybotan.android.demo.view.ListItemView
     <com.sybotan.android.demo.view.ListItemView

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

@@ -2,6 +2,7 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
+    android:background="@drawable/common_line_ffffff_single_all"
     android:paddingBottom="10dp">
     android:paddingBottom="10dp">
 
 
     <LinearLayout
     <LinearLayout
@@ -23,8 +24,6 @@
     </LinearLayout>
     </LinearLayout>
 
 
     <EditText
     <EditText
-        android:focusable="true"
-        android:focusableInTouchMode="true"
         android:id="@+id/mtextContent"
         android:id="@+id/mtextContent"
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="60dp"
         android:layout_height="60dp"
@@ -33,6 +32,8 @@
         android:layout_marginTop="8dp"
         android:layout_marginTop="8dp"
         android:layout_marginRight="28dp"
         android:layout_marginRight="28dp"
         android:background="@null"
         android:background="@null"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
         android:gravity="start"
         android:gravity="start"
         android:hint="请输入"
         android:hint="请输入"
         android:padding="0dp"
         android:padding="0dp"

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

@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
+    android:layout_height="wrap_content"
+    android:background="@drawable/common_line_ffffff_single_all">
 
 
     <androidx.recyclerview.widget.RecyclerView
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/viewRecycler"
         android:id="@+id/viewRecycler"

+ 16 - 3
demo/src/main/res/layout/view_text.xml

@@ -1,15 +1,28 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 <LinearLayout 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_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_marginTop="10dp"
+    android:background="@drawable/common_line_ffffff_single_all"
     android:orientation="horizontal">
     android:orientation="horizontal">
 
 
     <com.sybotan.android.demo.view.ListItemView
     <com.sybotan.android.demo.view.ListItemView
         android:id="@+id/view_text"
         android:id="@+id/view_text"
-        android:layout_width="match_parent"
+        android:layout_width="0dp"
         android:layout_height="44dp"
         android:layout_height="44dp"
-        android:layout_marginTop="10dp"
+        android:layout_weight="1"
         app:Type="1" />
         app:Type="1" />
 
 
+    <ImageView
+        android:id="@+id/iv_right"
+        android:layout_width="7dp"
+        android:layout_height="12dp"
+        android:layout_alignParentRight="true"
+        android:layout_centerVertical="true"
+        android:layout_gravity="center_vertical"
+        android:layout_marginRight="16dp"
+        android:src="@mipmap/cell_jiantouicon"
+        android:visibility="gone" />
+
 </LinearLayout>
 </LinearLayout>

BIN
demo/src/main/res/mipmap-xhdpi/icon_arrow_up.png


BIN
demo/src/main/res/mipmap-xhdpi/icon_push_down.png


BIN
demo/src/main/res/mipmap-xhdpi/image1.png


BIN
demo/src/main/res/mipmap-xhdpi/image2.png


BIN
demo/src/main/res/mipmap-xhdpi/image3.png


BIN
demo/src/main/res/mipmap-xhdpi/image4.png


+ 17 - 0
demo/src/main/res/values/array.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string-array name="install_location_list">
+        <item>屋顶:RF</item>
+        <item>地面:FL</item>
+        <item>半空:HA</item>
+        <item>墙面-正东:E</item>
+        <item>墙面-正南:S</item>
+        <item>墙面-正西:W</item>
+        <item>墙面-正北:N</item>
+        <item>墙面-东南:SE</item>
+        <item>墙面-西南:SW</item>
+        <item>墙面-西北:NW</item>
+        <item>墙面-东北:NE</item>
+    </string-array>
+</resources>