Browse Source

@task: relation

bai 3 years ago
parent
commit
c2c568cd01

+ 91 - 15
demo/src/main/java/com/sybotan/android/demo/activities/poc/RelationActivity.kt

@@ -3,12 +3,16 @@ package com.sybotan.android.demo.activities.poc
 import android.support.v7.app.AppCompatActivity
 import android.os.Bundle
 import android.view.View
+import android.widget.Button
+import android.widget.ImageView
 import android.widget.ListView
 import android.widget.TextView
 import com.sybotan.android.demo.R
 import com.sybotan.android.demo.activities.BaseActivity
 import com.sybotan.android.demo.adapter.ExpandAdapter
 import com.sybotan.android.demo.adapter.RelationAdapter
+import com.sybotan.android.demo.adapter.ServerRelAdapter
+import com.sybotan.android.demo.bean.request.ReqEqToRel
 import com.sybotan.android.demo.bean.result.SpaceEqModel
 import com.sybotan.android.demo.entitiies.Build
 import com.sybotan.android.demo.entitiies.EqEntity
@@ -18,7 +22,6 @@ import com.sybotan.android.demo.viewmodel.BuildVM
 import com.sybotan.android.demo.viewmodel.RelationVM
 
 
-
 class RelationActivity : BaseActivity() {
     companion object {
         // 设备服务于空间
@@ -30,7 +33,7 @@ class RelationActivity : BaseActivity() {
         // 设备 控制 设备
         const val EQ_EQ_CTRL = "eq_eq_ctrl"
 
-        // 设备 电 设备
+        // 设备 电 设备
         const val EQ_EQ_POWER = "eq_eq_power"
 
         // 设备 测量 设备
@@ -38,7 +41,17 @@ class RelationActivity : BaseActivity() {
 
         // 设备连接管道
         const val EQ_PIPE_CNCT = "eq_pipe_cnct"
+
+        // 设备服务于空间
+        const val TYPE_EQ_SP = "eq_sp"
+
+        // 设备与设备之间的关系
+        const val TYPE_EQ_EQ = "eq_eq"
+
+        // 设备与管道之间的关系
+        const val TYPE_EQ_PIPE = "eq_pipe"
     }
+
     private lateinit var mSpaceId: String
     private lateinit var mMajorTv: TextView
     private lateinit var mMinorTv: TextView
@@ -46,68 +59,131 @@ class RelationActivity : BaseActivity() {
     private lateinit var mMajorLv: ListView
     private lateinit var mMinorLv: ListView
 
+    private lateinit var mAddBtn: Button
     private lateinit var type: String
     private lateinit var code: String
+
+    private lateinit var mBackIv: ImageView
+    private lateinit var mTitleTv: TextView
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_relation)
+        findView()
+        initView()
+        initViewModel()
+        setListener()
+    }
+
+    private fun findView() {
+        mBackIv = findViewById(R.id.backIv)
+        mTitleTv = findViewById(R.id.titleTv)
+        mAddBtn = findViewById(R.id.addBtn)
         mMajorTv = findViewById(R.id.majorTv)
         mMajorLv = findViewById(R.id.majorLv)
         mMajorLv.divider = null
         mMinorTv = findViewById(R.id.minorTv)
         mMinorLv = findViewById(R.id.minorLv)
         mMinorLv.divider = null
+    }
 
+    private fun initView() {
         val bundle = intent.getBundleExtra("params")
         mSpaceId = bundle?.getString("spaceId") ?: ""
         type = bundle?.getString("type") ?: ""
         code = bundle?.getString("code") ?: ""
-        println("mSpaceId: $mSpaceId")
-        println("type: $type")
-        println("code: $code")
 
         when (code) {
             EQ_SP_SERVE -> {
                 mMinorTv.visibility = View.GONE
                 mMinorLv.visibility = View.GONE
                 mMajorTv.visibility = View.GONE
-
+                mTitleTv.text = "选择服务于当前空间的设备"
             }
 
             EQ_EQ_VV -> {
                 mMinorTv.visibility = View.VISIBLE
                 mMinorLv.visibility = View.VISIBLE
+                mMajorTv.visibility = View.VISIBLE
+                mMajorTv.text = "主"
+                mMinorTv.text = "从"
+                mTitleTv.text = "当前空间内设备与设备(阀门)"
             }
 
             EQ_EQ_CTRL -> {
+                mMinorTv.visibility = View.VISIBLE
+                mMinorLv.visibility = View.VISIBLE
+                mMajorTv.visibility = View.VISIBLE
+                mMajorTv.text = "主"
+                mMinorTv.text = "从"
+                mTitleTv.text = "当前空间内设备与设备(控制)"
 
             }
             EQ_EQ_POWER -> {
-
+                mMinorTv.visibility = View.VISIBLE
+                mMinorLv.visibility = View.VISIBLE
+                mMajorTv.visibility = View.VISIBLE
+                mMajorTv.text = "主"
+                mMinorTv.text = "从"
+                mTitleTv.text = "当前空间内设备与设备(电量)"
             }
             EQ_EQ_SS -> {
-
+                mMinorTv.visibility = View.VISIBLE
+                mMinorLv.visibility = View.VISIBLE
+                mMajorTv.visibility = View.VISIBLE
+                mMajorTv.text = "主"
+                mMinorTv.text = "从"
+                mTitleTv.text = "当前空间内设备与设备(测量)"
             }
 
             EQ_PIPE_CNCT -> {
+                mMinorTv.visibility = View.VISIBLE
+                mMinorLv.visibility = View.VISIBLE
+                mMajorTv.visibility = View.VISIBLE
+                mMajorTv.text = "设备"
+                mMinorTv.text = "管道类型"
+                mTitleTv.text = "当前空间内设备与管道"
+            }
+        }
+    }
+
+    private fun setListener() {
 
+        mAddBtn.setOnClickListener {
+            when (code) {
+                EQ_SP_SERVE -> {
+                    val list = serverRelEqs.map { it.deviceId }
+                    val rel = ReqEqToRel(eq_id = list, target_id = mSpaceId, rel = EQ_SP_SERVE)
+                    mVm.addEq(rel)
+                }
             }
+
         }
-        initViewModel()
+        mBackIv.setOnClickListener {
+            finish()
+        }
+
     }
 
 
     private lateinit var mEqs: List<RelationEq>
+    private var serverRelEqs = mutableListOf<RelationEq>()
 
-
+    private lateinit var mVm: RelationVM
     private fun initViewModel() {
-        val mVm = RelationVM(BaseViewModelInterface { name, params ->
+        mVm = RelationVM(BaseViewModelInterface { name, params ->
             mEqs = params as List<RelationEq>
-
-            val adapter = RelationAdapter(mEqs, this@RelationActivity) { eq ->
-
+            when (name) {
+                EQ_SP_SERVE -> {
+                    val adapter = ServerRelAdapter(mEqs, this@RelationActivity) { eq ->
+                        serverRelEqs.clear()
+                        serverRelEqs.addAll(eq)
+                        println("serverRelEqs size : ${serverRelEqs.size}")
+                    }
+                    mMajorLv.setAdapter(adapter)
+                }
             }
-            mMajorLv.setAdapter(adapter)
+
         }, this)
         mVm.getEqs(mSpaceId)
     }

+ 5 - 2
demo/src/main/java/com/sybotan/android/demo/adapter/RelationAdapter.kt

@@ -12,10 +12,13 @@ import com.sybotan.android.demo.entitiies.RelationEq
 class RelationAdapter(
     val eqs: List<RelationEq>,
     val context: Context,
+    val code: String,
     val block: (eq: RelationEq) -> Unit
 ) : BaseAdapter() {
     private val holders = mutableListOf<Holder>()
 
+    private var eq: RelationEq? = null
+
     override fun getCount(): Int {
         return eqs.size
     }
@@ -25,7 +28,7 @@ class RelationAdapter(
     }
 
     override fun getItemId(position: Int): Long {
-        return position.toLong()
+        return eqs[position].deviceId.hashCode().toLong()
     }
 
     override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
@@ -52,7 +55,7 @@ class RelationAdapter(
             if (!cb.isSelected) {
                 cb.isSelected = true
                 cb.isChecked = true
-               // checkType = type
+                // checkType = type
                 //  checkTypes.add(type)
 
             } else {

+ 72 - 0
demo/src/main/java/com/sybotan/android/demo/adapter/ServerRelAdapter.kt

@@ -0,0 +1,72 @@
+package com.sybotan.android.demo.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.BaseAdapter
+import android.widget.CheckBox
+import com.sybotan.android.demo.R
+import com.sybotan.android.demo.entitiies.RelationEq
+
+class ServerRelAdapter(
+    val eqs: List<RelationEq>,
+    val context: Context,
+    val block: (eq: List<RelationEq>) -> Unit
+) : BaseAdapter() {
+    private val holders = mutableListOf<Holder>()
+
+    private val mResults = mutableListOf<RelationEq>()
+
+    override fun getCount(): Int {
+        return eqs.size
+    }
+
+    override fun getItem(position: Int): RelationEq {
+        return eqs[position]
+    }
+
+    override fun getItemId(position: Int): Long {
+        return eqs[position].deviceId.hashCode().toLong()
+    }
+
+    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
+        var view = convertView
+        val holder: Holder
+        if (view == null) {
+            holder = Holder()
+            view = LayoutInflater.from(context).inflate(R.layout.item_relation, parent, false)
+            holder.relationCb = view.findViewById(R.id.relationCb)
+
+            view.tag = holder
+        } else {
+            holder = view.tag as Holder
+        }
+        // holders.add(holder)
+        val eq = eqs[position]
+        holder.relationCb.text = eq.type
+        holder.relationCb.setOnClickListener {
+            holders.forEach { h ->
+                h.relationCb.isSelected = false
+                h.relationCb.isChecked = false
+            }
+            val cb = it as CheckBox
+            if (!cb.isSelected) {
+                cb.isSelected = true
+                cb.isChecked = true
+                mResults.add(eq)
+            } else {
+                cb.isSelected = false
+                cb.isChecked = false
+                mResults.remove(eq)
+            }
+
+            block(mResults)
+        }
+        return view!!
+    }
+
+    inner class Holder {
+        lateinit var relationCb: CheckBox
+    }
+}

+ 8 - 0
demo/src/main/java/com/sybotan/android/demo/bean/request/ReqEqToRel.kt

@@ -0,0 +1,8 @@
+package com.sybotan.android.demo.bean.request
+
+data class ReqEqToRel(
+    val eq_id: List<String>,
+    val target_id: String,
+    val rel: String,
+    val target: String = "action"
+)

+ 14 - 0
demo/src/main/java/com/sybotan/android/demo/bean/result/ResEqRel.kt

@@ -0,0 +1,14 @@
+package com.sybotan.android.demo.bean.result
+
+data class ResEqRel(
+    val code: Int,
+    val datas: Datas
+)
+
+data class Datas(
+    val action: Actions
+)
+
+data class Actions(
+    val relId: List<Int>
+)

+ 5 - 13
demo/src/main/java/com/sybotan/android/demo/retrofit/API.java

@@ -2,21 +2,9 @@ package com.sybotan.android.demo.retrofit;
 
 
 import com.sybotan.android.demo.bean.BaseModel;
-import com.sybotan.android.demo.bean.result.AddPipeModel;
-import com.sybotan.android.demo.bean.result.PipeListModel;
-import com.sybotan.android.demo.bean.result.SpaceEqModel;
-import com.sybotan.android.demo.bean.result.ResDeviceModel;
-import com.sybotan.android.demo.bean.result.SpacePipeModel;
+import com.sybotan.android.demo.bean.result.*;
 import com.sybotan.android.demo.entitiies.Build;
-import com.sybotan.android.demo.bean.result.AddProblemModel;
-import com.sybotan.android.demo.bean.result.BindQrcodeModel;
-import com.sybotan.android.demo.bean.result.CloseProblemModel;
-import com.sybotan.android.demo.bean.result.ProblemsModel;
-import com.sybotan.android.demo.bean.result.QrcodeModel;
-import com.sybotan.android.demo.bean.result.SetJobModel;
-import com.sybotan.android.demo.bean.result.SetProblemModel;
 import com.sybotan.android.demo.entitiies.DeviceType;
-import com.sybotan.android.demo.bean.result.SpaceJobModel;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -194,4 +182,8 @@ public interface API {
     @POST("clmt/query/space_eq")
     Observable<BaseModel<List<RelationEq>>> getRelationEqs(@Body RequestBody body);
 
+    // 添加设备与服务的关系
+    @POST("clmt/job/add_eq_sp_rel")
+    Observable<BaseModel<ResEqRel>> addEqToRel(@Body RequestBody body);
+
 }

+ 14 - 2
demo/src/main/java/com/sybotan/android/demo/viewmodel/RelationVM.kt

@@ -1,7 +1,10 @@
 package com.sybotan.android.demo.viewmodel
 
 import com.sybotan.android.demo.activities.BaseActivity
+import com.sybotan.android.demo.bean.request.ReqEqToRel
 import com.sybotan.android.demo.bean.request.ReqRelationEq
+import com.sybotan.android.demo.bean.result.ResDeviceModel
+import com.sybotan.android.demo.bean.result.ResEqRel
 import com.sybotan.android.demo.entitiies.RelationEq
 import com.sybotan.android.demo.retrofit.BaseObserver
 import com.sybotan.android.demo.retrofit.BaseViewModelInterface
@@ -10,10 +13,10 @@ import com.sybotan.android.demo.retrofit.RetrofitFactory
 class RelationVM(b: BaseViewModelInterface, a: BaseActivity) : BaseViewModel(b, a) {
     companion object {
         // 设备服务于空间
-        const val EQ_SP_SERVE = "EQ_SP_SERVE"
+        const val EQ_SP_SERVE = "eq_sp_serve"
 
         // 设备 阀门 设备
-        const val EQ_EQ_VV = "EQ_EQ_VV"
+        const val EQ_EQ_VV = "eq_eq_vv"
 
         // 设备 控制 设备
         const val EQ_EQ_CTRL = "EQ_EQ_CTRL"
@@ -39,4 +42,13 @@ class RelationVM(b: BaseViewModelInterface, a: BaseActivity) : BaseViewModel(b,
 
     }
 
+    fun addEq(rel: ReqEqToRel) {
+        val observable = RetrofitFactory.getInstance().addEqToRel(getRequestBody(rel))
+        this.sendRequest(observable, object : BaseObserver<ResEqRel>(mActivity, this) {
+            override fun onSuccess(t: ResEqRel?) {
+                mActivity.finish()
+            }
+        }, true)
+    }
+
 }