Browse Source

feat 设备筛选

lihao1 3 years ago
parent
commit
206b7317e0

+ 3 - 0
demo/build.gradle

@@ -274,4 +274,7 @@ dependencies {
     androidTestImplementation("androidx.test.ext:junit:1.1.3")
     androidTestImplementation("androidx.test.ext:junit-ktx:1.1.3")
     testImplementation("junit:junit:4.13.2")
+
+    implementation 'cn.hutool:hutool-all:5.4.7'
+    implementation group: 'org.locationtech.jts', name: 'jts-core', version: '1.16.1'
 }

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

@@ -80,6 +80,7 @@ data class InfosforBuild(
     val floorMap: String,
     val state: String,
     val height: Int,
+    val floorSequenceID: Int,
 )
 
 data class InfosforEquip(

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

@@ -224,6 +224,10 @@ class AdmRepository(
         return db.objectDao().getContainerObjs(deviceId)
     }
 
+    suspend fun getMajors(): List<MajorEntity> {
+        return db.majorDao().getMajors()
+    }
+
     suspend fun getInfoByClassCodeAndCode(
         classCode: String,
         parentClassCode: String,

+ 2 - 2
demo/src/main/java/com/sybotan/android/demo/DemoApp.kt

@@ -29,6 +29,7 @@ import android.content.Context
 import android.content.SharedPreferences
 import android.util.Log
 import androidx.core.content.edit
+import cn.hutool.core.util.IdUtil
 import com.arashivision.sdkcamera.InstaCameraSDK
 import com.arashivision.sdkmedia.InstaMediaSDK
 import com.framework.app.DEVICE_ID
@@ -90,10 +91,9 @@ class DemoApp : Application(), DIAware {
         // Copy sample pictures from assets to local
         copyHdrSourceFromAssets()
         val deviceId = sp.getString(DEVICE_ID, "") ?: ""
-
         if (deviceId.isEmpty()) {
             sp.edit {
-                putString(DEVICE_ID, "${UUID.randomUUID()}")
+                putString(DEVICE_ID, "${IdUtil.simpleUUID()}")
             }
         }
 

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

@@ -408,7 +408,7 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                     pop.showAtLocation(root, Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL, 0, 0)
                     pop.setOnItemClickListener {
                         if (!CommonUtils.IsNull(list)) {
-                            val equip = it
+                            val equip = equipObjects.get(it)
                             val localIdString = (localId.getView(R.id.et_right)) as EditText
                             val dialog = ObjectRelationDialog(
                                 this@EquipDetailActivity,
@@ -460,7 +460,7 @@ class EquipDetailActivity : BaseActivity(), View.OnTouchListener {
                     pop.showAtLocation(root, Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL, 0, 0)
                     pop.setOnItemClickListener {
                         if (!CommonUtils.IsNull(list)) {
-                            val equip = it
+                            val equip = equipObjects.get(it)
                             val localIdString = (localId.getView(R.id.et_right)) as EditText
                             val dialog = PipeDialog(
                                 this@EquipDetailActivity,

+ 104 - 25
demo/src/main/java/com/sybotan/android/demo/activities/GraphyActivity.kt

@@ -47,6 +47,7 @@ import androidx.appcompat.widget.LinearLayoutCompat
 import androidx.recyclerview.widget.GridLayoutManager
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import cn.hutool.core.collection.CollectionUtil
 import cn.sagacloud.android.cadengine.FloorScene
 import cn.sagacloud.android.cadengine.Lasso
 import cn.sagacloud.android.cadengine.Opt
@@ -58,6 +59,7 @@ import com.arashivision.sdkcamera.camera.InstaCameraManager
 import com.arashivision.sdkcamera.camera.callback.ICameraChangedCallback
 import com.arashivision.sdkcamera.camera.callback.ICaptureStatusListener
 import com.bumptech.glide.Glide
+import com.framework.mvvm.model.db.entity.dict.MajorEntity
 import com.framework.mvvm.model.db.entity.task.ObjectEntity
 import com.framework.mvvm.model.db.entity.task.InfosforEquip
 import com.framework.mvvm.mv.AdmViewModel
@@ -77,6 +79,7 @@ import com.sybotan.android.demo.retrofit.BaseViewModelInterface
 import com.sybotan.android.demo.retrofit.Constant
 import com.sybotan.android.demo.tools.*
 import com.sybotan.android.demo.view.MaxHeightRecyclerView
+import com.sybotan.android.demo.view.SelectListSinglePopupWindow
 import com.sybotan.android.demo.viewmodel.GraphyVM
 import com.sybotan.android.graphy.SGraphyView
 import com.sybotan.android.graphy.events.SGraphyViewMoveEvent
@@ -148,6 +151,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
 
     /** 楼层地图 */
     private lateinit var floorMap: String
+    private var major: String = ""
 
     /**
      * space 结构核查
@@ -181,6 +185,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
      */
     val beans: ArrayList<Photos> = ArrayList()
     lateinit var pictureAdapter: PictureAdapter
+    lateinit var spaceEqList: ArrayList<SpaceEqModel>
 
     @Subscribe
     fun test(msg: SGraphyViewMoveEvent) {
@@ -223,6 +228,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
     private lateinit var sift: TextView
     private lateinit var checkAll: CheckBox
     private lateinit var onlySpace: CheckBox
+    private lateinit var root: LinearLayout
 
     /**
      * 创建Activity时的回调函数
@@ -374,6 +380,7 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
         checkAll = findViewById(R.id.checkAll)
         onlySpace = findViewById(R.id.onlySpace)
         sift = findViewById(R.id.sift)
+        root = findViewById(R.id.root)
 
     }
 
@@ -1264,27 +1271,34 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
 
                 /** 查询空间下的设备(所在关系) */
                 GraphyVM.SPACE_EQ -> {
-                    val list = params as List<SpaceEqModel>
+                    spaceEqList = params as ArrayList<SpaceEqModel>
                     for (item in scene.equipList) {
                         scene.removeItem(item)
                     }
                     scene.equipList.clear()
-                    initEquipChoose(list)
-                    refreshEquip(list)
+                    initEquipChoose(spaceEqList)
+                    refreshEquip(spaceEqList)
                     checkAll.setOnCheckedChangeListener { buttonView, isChecked ->
                         if (isChecked) {
-                            for (model in list) {
+                            for (model in spaceEqList) {
                                 model.isCheck = false
                                 equipClassList.add(model.type!!)
                             }
                         } else {
-                            for (model in list) {
+                            equipClassList.clear()
+                            for (model in spaceEqList) {
                                 model.isCheck = true
-                                equipClassList.remove(model.type!!)
                             }
                         }
-                        initEquipChoose(list)
-                        refreshEquip(list)
+                        initEquipChoose(spaceEqList)
+                        refreshEquip(spaceEqList)
+                    }
+                    onlySpace.setOnCheckedChangeListener { buttonView, isChecked ->
+                        initEquipChoose(spaceEqList)
+                        refreshEquip(spaceEqList)
+                    }
+                    sift.setOnClickListener {
+                        graphyVM.getMajor()
                     }
                 }
 
@@ -1295,6 +1309,26 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                     piprRv.adapter = adapter
                 }
 
+                /** 专业列表 */
+                GraphyVM.MAJORS_LIST -> {
+                    val majors = params as ArrayList<MajorEntity>
+                    val popupWindow = SelectListSinglePopupWindow(this)
+                    popupWindow.setGenList(majors, Constant.TYPE3)
+                    popupWindow.setBtn(true, "全部")
+                    popupWindow.showAtLocation(root, Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL, 0, 0)
+                    popupWindow.setOnItemClickListener {
+                        if (it == -1) {
+                            this.major = ""
+                            sift.setText("专业:全部")
+                        } else {
+                            this.major = majors.get(it).code
+                            sift.setText("专业:${majors.get(it).label}")
+                        }
+                        initEquipChoose(spaceEqList)
+                        refreshEquip(spaceEqList)
+                    }
+                }
+
                 /** 添加管线 */
                 GraphyVM.ADD_PIPE -> {
                     pipeLl.visibility = View.GONE
@@ -1390,10 +1424,41 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
         graphyVM.getSpaceJob(from, scene.spaceList)
     }
 
-    private fun initEquipChoose(list: List<SpaceEqModel>) {
+    private fun initEquipChoose(list: ArrayList<SpaceEqModel>) {
         //流式布局
         equipWwv.removeAllViews()
-        for (model in list) {
+        var equipList = ArrayList<SpaceEqModel>()
+        CollectionUtil.addAll(equipList as Collection<Any>?, MutableList(list.size) {})
+        Collections.copy(equipList, list)
+//        equipList = deepClone(list) as ArrayList<SpaceEqModel>
+        if (onlySpace.isChecked) {
+            val iterator = equipList.iterator()
+            while (iterator.hasNext()) {
+                val item = iterator.next()
+                val childIterator = item.children.iterator()
+                while (childIterator.hasNext()) {
+                    val child = childIterator.next()
+                    var position = gson.fromJson(child.position, Position::class.java)
+                    val isContain = Lasso.isPolygonContainsPoint(scene.choseSpace!!.mPoints, android.graphics.Point(position.x.toFloat().toInt(), position.y.toFloat().toInt()))
+                    if (!isContain) {
+                        childIterator.remove()
+                    }
+                }
+                if (CommonUtils.IsNull(item.children)) {
+                    iterator.remove()
+                }
+            }
+        }
+        if (!TextUtils.isEmpty(major)) {
+            val iterator = equipList.iterator()
+            while (iterator.hasNext()) {
+                val item = iterator.next()
+                if (!item.type!!.startsWith(major)) {
+                    iterator.remove()
+                }
+            }
+        }
+        for (model in equipList) {
             val textview = TextView(this)
             textview.apply {
                 setText(model.typeName + "-" + model.type + "(${model.children.size})")
@@ -1404,27 +1469,27 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
                 if (equipClassList.contains(model.type)) {
                     model.isCheck = false
                 }
-                if (model.isCheck) {
-                    background = resources.getDrawable(R.drawable.shape_filter_normal)
-                    textColor = resources.getColor(R.color.grey_900)
-                } else {
+                if (!model.isCheck || checkAll.isChecked) {
                     background = resources.getDrawable(R.drawable.shape_filter_selected)
                     textColor = resources.getColor(R.color.white)
+                } else {
+                    background = resources.getDrawable(R.drawable.shape_filter_normal)
+                    textColor = resources.getColor(R.color.grey_900)
                 }
                 setOnClickListener {
                     model.isCheck = !model.isCheck
-                    if (model.isCheck) {
-                        equipClassList.remove(model.type!!)
-                        textview.background =
-                            resources.getDrawable(R.drawable.shape_filter_normal)
-                        textview.textColor = resources.getColor(R.color.grey_900)
-                    } else {
+                    if (!model.isCheck || checkAll.isChecked) {
                         equipClassList.add(model.type!!)
                         textview.background =
                             resources.getDrawable(R.drawable.shape_filter_selected)
                         textview.textColor = resources.getColor(R.color.white)
+                    } else {
+                        equipClassList.remove(model.type!!)
+                        textview.background =
+                            resources.getDrawable(R.drawable.shape_filter_normal)
+                        textview.textColor = resources.getColor(R.color.grey_900)
                     }
-                    refreshEquip(list)
+                    refreshEquip(equipList)
                 }
                 equipWwv.addView(this)
             }
@@ -1518,26 +1583,40 @@ class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCal
         return ois.readObject()
     }
 
+    @Throws(Exception::class)
+    fun deepClone(data: ArrayList<SpaceEqModel>): Any? {
+        // 序列化
+        val bos = ByteArrayOutputStream()
+        val oos = ObjectOutputStream(bos)
+        oos.writeObject(data)
+        // 反序列化
+        val bis = ByteArrayInputStream(bos.toByteArray())
+        val ois = ObjectInputStream(bis)
+        return ois.readObject()
+    }
+
     /**
      * 刷新地图上设备
      */
     private fun refreshEquip(list: List<SpaceEqModel>) {
         graphyHelper.removeAllEquip()
         for (model in list) {
-            if (!model.children.isEmpty() && !model.isCheck) {
+            if (!model.children.isEmpty() && (!model.isCheck || checkAll.isChecked)) {
                 for (child in model.children) {
+                    val position = gson.fromJson(child.position, Position::class.java)
                     val point = Point()
-                    var position = gson.fromJson(child.position, Position::class.java)
                     point.mX = position.x.toFloat()
                     point.mY = -position.y.toFloat()
+                    val isContains = Lasso.isPolygonContainsPoint(scene.choseSpace!!.mPoints, android.graphics.Point(point.mX.toInt(), -point.mY.toInt()))
                     point.remark = child.remark
                     point.type = model.type
                     point.equipState = child.type
                     point.equipType = child.type
                     point.position = child.position
                     point.deviceId = child.deviceId
-
-                    graphyHelper.addEquip(point)
+                    if (((onlySpace.isChecked && isContains) || !onlySpace.isChecked) && (TextUtils.isEmpty(major) || point.type!!.startsWith(major))) {
+                        graphyHelper.addEquip(point)
+                    }
                 }
             }
         }

+ 7 - 2
demo/src/main/java/com/sybotan/android/demo/adapter/PersonalSelectSingleAdapter.java

@@ -12,6 +12,7 @@ import android.widget.TextView;
 import androidx.recyclerview.widget.RecyclerView;
 
 
+import com.framework.mvvm.model.db.entity.dict.MajorEntity;
 import com.framework.mvvm.model.db.entity.task.ObjectEntity;
 import com.framework.mvvm.model.db.entity.task.Options;
 import com.sybotan.android.demo.R;
@@ -24,7 +25,7 @@ import java.util.List;
  * Created by cunwen on 16/6/21.
  */
 public class PersonalSelectSingleAdapter extends RecyclerView.Adapter<PersonalSelectSingleAdapter.BuildViewHolder> {
-    private List<ObjectEntity> items = new ArrayList<>();
+    private List<?> items = new ArrayList<>();
     private Context context;
     private int selectPosition;
     private String type;
@@ -32,7 +33,7 @@ public class PersonalSelectSingleAdapter extends RecyclerView.Adapter<PersonalSe
     private int redPosition;
     private Boolean flag;
 
-    public void setItems(List<ObjectEntity> items, Context context, int position, String type) {
+    public void setItems(List<?> items, Context context, int position, String type) {
         this.items = items;
         this.context = context;
         this.selectPosition = position;
@@ -62,6 +63,10 @@ public class PersonalSelectSingleAdapter extends RecyclerView.Adapter<PersonalSe
                 holder.choice_name.setText(options.getClassCode() + ":" + options.getLocalId());
             }
         }
+        if (type.equals(Constant.TYPE3)) {
+            MajorEntity options = (MajorEntity) item;
+            holder.choice_name.setText(options.getLabel());
+        }
         if (selectPosition > 0 && selectPosition - 1 == position) {
             holder.choice_name.setTextColor(context.getResources().getColor(R.color.blue_2f48b7));
         } else {

+ 1 - 1
demo/src/main/java/com/sybotan/android/demo/entitiies/Build.kt

@@ -22,7 +22,7 @@ data class Floor(
     val buildingId: String,
     val count: Double,
     val createTime: String,
-    val floorSequenceID: Double,
+    val floorSequenceID: Int,
     val id: String,
     val infos: Info,
     val lastUpdate: String,

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

@@ -21,4 +21,5 @@ public class Constant {
 
     public static final String TYPE1 = "String";
     public static final String TYPE2 = "equip";
+    public static final String TYPE3 = "major";
 }

+ 4 - 2
demo/src/main/java/com/sybotan/android/demo/tools/IdGenerator.java

@@ -5,6 +5,8 @@ import android.text.TextUtils;
 
 import java.util.UUID;
 
+import cn.hutool.core.util.IdUtil;
+
 
 /**
  * 实体对象id生成器
@@ -36,9 +38,9 @@ public class IdGenerator {
 
         String prefix = getPrefix(objType);
         if (TextUtils.isEmpty(prefix))
-            return UUID.randomUUID().toString().replace("-", "");
+            return IdUtil.simpleUUID();
 
-        return prefix + projectId.substring(2) + UUID.randomUUID().toString();
+        return prefix + projectId.substring(2) + IdUtil.simpleUUID();
     }
 
     private static String getPrefix(String objType) {

+ 4 - 2
demo/src/main/java/com/sybotan/android/demo/tools/UploadImage.java

@@ -23,6 +23,8 @@ import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.UUID;
 
+import cn.hutool.core.util.IdUtil;
+
 /**
  * Created by 何鑫欣 on 2017/8/8.
  */
@@ -47,7 +49,7 @@ public class UploadImage {
     private static String result;
 
     public static String uploadFile(File file, String imageUrl) {
-        String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
+        String BOUNDARY = IdUtil.simpleUUID(); // 边界标识 随机生成
         String PREFIX = "--", LINE_END = "\r\n";
         String CONTENT_TYPE = "multipart/form-data"; // 内容类型
         String RequestURL = imageUrl;
@@ -118,7 +120,7 @@ public class UploadImage {
         String CHARSET = "utf-8"; // 设置编码
         String SUCCESS = "1";
         String FAILURE = "0";
-        String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
+        String BOUNDARY = IdUtil.simpleUUID(); // 边界标识 随机生成
         String PREFIX = "--", LINE_END = "\r\n";
         String CONTENT_TYPE = "multipart/form-data"; // 内容类型
         String RequestURL = imageUrl;

+ 21 - 4
demo/src/main/java/com/sybotan/android/demo/view/SelectListSinglePopupWindow.java

@@ -13,6 +13,7 @@ import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnTouchListener;
+import android.view.ViewGroup;
 import android.view.ViewGroup.LayoutParams;
 import android.view.animation.Animation;
 import android.view.inputmethod.EditorInfo;
@@ -89,7 +90,12 @@ public class SelectListSinglePopupWindow extends PopupWindow {
             }
         });
         //设置按钮监听
-//        btn1.setOnClickListener(itemsOnClick);
+        btn1.setOnClickListener(view -> {
+            if (mOnItemClickListener != null) {
+                mOnItemClickListener.onItemClick(-1);
+            }
+            dismiss();
+        });
         btn1.setTag(0);
 
         recyclerview = (RecyclerView) mMenuView.findViewById(R.id.recyclerview);
@@ -103,7 +109,7 @@ public class SelectListSinglePopupWindow extends PopupWindow {
             @Override
             public void onItemClick(View view, int position) {
                 if (mOnItemClickListener != null) {
-                    mOnItemClickListener.onItemClick(itemList.get(position));
+                    mOnItemClickListener.onItemClick(position);
                 }
                 dismiss();
             }
@@ -208,6 +214,17 @@ public class SelectListSinglePopupWindow extends PopupWindow {
         adapter.notifyDataSetChanged();
     }
 
+    public void setGenList(List<?> list, String type) {
+        searchLinear.setVisibility(View.GONE);
+        adapter.setItems(list, context, position, type);
+        ViewGroup.LayoutParams mParams1 = recyclerview.getLayoutParams();
+        mParams1.height = (int) (55 * (list.size() >= 6 ? 6 : list.size()) * dm.density);
+        recyclerview.setLayoutParams(mParams1);
+        recyclerview.setVerticalScrollBarEnabled(true);
+        recyclerview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
+        adapter.notifyDataSetChanged();
+    }
+
 
     private int gravity = Gravity.BOTTOM;
 
@@ -235,9 +252,9 @@ public class SelectListSinglePopupWindow extends PopupWindow {
     }
 
 
-    private SelectListPopupWindow.OnRecyclerViewItemClickListener mOnItemClickListener = null;
+    private OnRecyclerViewItemClickListener mOnItemClickListener = null;
 
-    public void setOnItemClickListener(SelectListPopupWindow.OnRecyclerViewItemClickListener listener) {
+    public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
         this.mOnItemClickListener = listener;
     }
 

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

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

+ 4 - 3
demo/src/main/java/com/sybotan/android/demo/viewmodel/EquipDetailVM.kt

@@ -9,6 +9,7 @@ import android.app.Activity.RESULT_OK
 import android.app.Application
 import android.text.TextUtils
 import androidx.lifecycle.viewModelScope
+import cn.hutool.core.util.IdUtil
 import cn.sagacloud.android.cadengine.types.*
 import com.framework.mvvm.model.db.entity.*
 import com.framework.mvvm.model.db.entity.task.*
@@ -220,7 +221,7 @@ class EquipDetailVM(
                     if (order != 0) {
                         var phUuid = ""
                         if (TextUtils.isEmpty(photo.id)) {
-                            phUuid = UUID.randomUUID().toString().replace("-", "")
+                            phUuid = IdUtil.simpleUUID()
                         } else {
                             phUuid = photo.id
                         }
@@ -548,7 +549,7 @@ class EquipDetailVM(
             }
 
             val relEntity = RelationEntity(
-                id = UUID.randomUUID().toString(),
+                id = IdUtil.simpleUUID(),
                 projectId = projectId,
                 buildingId = buildingId,
                 floorId = floorId,
@@ -611,7 +612,7 @@ class EquipDetailVM(
             }
 
             val relEntity = PipeEntity(
-                id = UUID.randomUUID().toString(),
+                id = IdUtil.simpleUUID(),
                 projectId = projectId,
                 buildingId = buildingId,
                 floorId = floorId,

+ 12 - 24
demo/src/main/java/com/sybotan/android/demo/viewmodel/GraphyVM.kt

@@ -5,6 +5,7 @@ import android.app.Application
 import android.graphics.PointF
 import android.text.TextUtils
 import androidx.lifecycle.viewModelScope
+import cn.hutool.core.util.IdUtil
 import cn.sagacloud.android.cadengine.Lasso
 import cn.sagacloud.android.cadengine.items.SpaceItem
 import cn.sagacloud.android.cadengine.items.TunableSpaceItem
@@ -366,8 +367,6 @@ class GraphyVM(
     }
 
 
-
-
     fun getMap() {
         viewModelScope.launch {
             val floors = repo.getFloors()
@@ -398,7 +397,7 @@ class GraphyVM(
                 val proEntity = repo.getEqProblem(deviceId)
                 if (proEntity == null) {
                     val entity = ProblemEquipEntity(
-                        id = UUID.randomUUID().toString(),
+                        id = IdUtil.simpleUUID(),
                         floorId = floorId,
                         projectId = projectId,
                         buildingId = buildingId,
@@ -495,6 +494,13 @@ class GraphyVM(
         }
     }
 
+    fun getMajor() {
+        viewModelScope.launch {
+            val majors = repo.getMajors()
+            mEmitter.SendDirective(MAJORS_LIST, majors)
+        }
+    }
+
     companion object {
         //app版本更新
         const val UPDATE_APP = "UPDATE_APP"
@@ -502,9 +508,6 @@ class GraphyVM(
         //地图加载
         const val MAP_LOAD = "MAP_LOAD"
 
-        //查询设备类
-        const val EQUIP_CLASS = "EQUIP_CLASS"
-
         //查询空间和任务
         const val SPACE_JOB = "SPACE_JOB"
 
@@ -526,24 +529,6 @@ class GraphyVM(
         //查询空间下的管道Equip_INFOS
         const val SPACE_PIPE = "SPACE_PIPE"
 
-        //查询空间详情查看info值
-        const val SPACE_INFOS = "SPACE_INFOS"
-
-        //查询设备详情
-        const val EQUIP_INFO = "EQUIP_INFO"
-
-        //设备对象实例
-        const val Equip_INFOS = "Equip_INFOS"
-
-        //关系二级列表
-        const val EQUIP_REL = "EQUIP_REL"
-
-        //可建立关系对象实例列表
-        const val REL_OBJECT = "REL_OBJECT"
-
-        //可建立管道对象实例列表
-        const val PIPE_OBJECT = "PIPE_OBJECT"
-
         //管道二级列表
         const val PIPE = "PIPE"
 
@@ -555,6 +540,9 @@ class GraphyVM(
 
         //无模型设备
         const val CONTAINER_EQUIP = "CONTAINER_EQUIP"
+
+        //专业列表
+        const val MAJORS_LIST = "MAJORS_LIST"
     }
 
 }

+ 5 - 4
demo/src/main/java/com/sybotan/android/demo/viewmodel/SpaceMapVM.kt

@@ -4,6 +4,7 @@ import android.app.Application
 import android.graphics.PointF
 import android.text.TextUtils
 import androidx.lifecycle.viewModelScope
+import cn.hutool.core.util.IdUtil
 import cn.sagacloud.android.cadengine.Lasso
 import cn.sagacloud.android.cadengine.items.PipeLineItem
 import cn.sagacloud.android.cadengine.items.PointItem
@@ -164,7 +165,7 @@ class SpaceMapVM(
             val toString = if (point != null && !TextUtils.isEmpty(point.data.id)) {
                 point.data.id!!
             } else {
-                UUID.randomUUID().toString().replace("-", "")
+                IdUtil.simpleUUID()
             }
 
             val problem = ProblemArchEntity(
@@ -193,7 +194,7 @@ class SpaceMapVM(
             for ((order, photo) in photos.withIndex()) {
                 if (order != 0) {
                     val uuid = if (TextUtils.isEmpty(photo.id)) {
-                        UUID.randomUUID().toString().replace("-", "")
+                        IdUtil.simpleUUID()
                     } else {
                         photo.id
                     }
@@ -298,7 +299,7 @@ class SpaceMapVM(
             pointZ.z = toString.toFloat()
             val toJson = gson.toJsonTree(pointZ)
             val qrcode = QrCodeEntity(
-                id = UUID.randomUUID().toString(),
+                id = IdUtil.simpleUUID(),
                 qrCode = result!!,
                 objId = choseSpace!!.data.id!!,
                 projectId = projectId,
@@ -411,7 +412,7 @@ class SpaceMapVM(
             var entity = repo.getServeAreaByObjId(deviceId)
             if (entity == null) {
                 entity = ServeAreaEntity(
-                    id = UUID.randomUUID().toString(),
+                    id = IdUtil.simpleUUID(),
                     projectId = projectId,
                     buildingId = buildingId,
                     floorId = floorId,

+ 2 - 2
demo/src/main/res/layout/activity_graphy.xml

@@ -24,6 +24,7 @@
 <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:background="@color/white"
@@ -143,8 +144,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:gravity="center_horizontal"
-                android:orientation="horizontal"
-                android:visibility="gone">
+                android:orientation="horizontal">
 
                 <CheckBox
                     android:id="@+id/checkAll"