From 979d9cff22806f213b420452ab4a68fcbaf021b6 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期一, 31 五月 2021 17:43:49 +0800
Subject: [PATCH] 1. 修复多项可能引起空指针崩溃的bug; 2. 新建子任务时默认执行人员从全体人员改为当前用户; 3. 新建子任务时默认执行时间强制固定为总任务对应的时段内,确保子任务执行时间不会超出总任务范围。

---
 app/src/main/java/cn/flightfeather/thirdapp/module/inspection/InspectionDetailActivity.kt |  126 +++++++++++++++++++++++++----------------
 1 files changed, 77 insertions(+), 49 deletions(-)

diff --git a/app/src/main/java/cn/flightfeather/thirdapp/module/inspection/InspectionDetailActivity.kt b/app/src/main/java/cn/flightfeather/thirdapp/module/inspection/InspectionDetailActivity.kt
index 252856b..db5a936 100644
--- a/app/src/main/java/cn/flightfeather/thirdapp/module/inspection/InspectionDetailActivity.kt
+++ b/app/src/main/java/cn/flightfeather/thirdapp/module/inspection/InspectionDetailActivity.kt
@@ -3,7 +3,6 @@
 import android.app.Activity
 import android.arch.lifecycle.Observer
 import android.arch.lifecycle.ViewModelProviders
-import android.content.DialogInterface
 import android.content.Intent
 import android.net.Uri
 import android.os.Bundle
@@ -13,15 +12,16 @@
 import android.view.View
 import android.view.animation.AnimationUtils
 import android.widget.LinearLayout
+import cn.flightfeather.thirdapp.CommonApplication
 import cn.flightfeather.thirdapp.R
 import cn.flightfeather.thirdapp.activity.GradeActivity
 import cn.flightfeather.thirdapp.activity.MapActivity
 import cn.flightfeather.thirdapp.activity.ProblemDetailActivity
 import cn.flightfeather.thirdapp.activity.PromiseActivity
 import cn.flightfeather.thirdapp.adapter.IconsPageAdapter
-import cn.flightfeather.thirdapp.bean.Mediafile
-import cn.flightfeather.thirdapp.bean.Scense
-import cn.flightfeather.thirdapp.bean.Subtask
+import cn.flightfeather.thirdapp.bean.entity.Mediafile
+import cn.flightfeather.thirdapp.bean.entity.Scense
+import cn.flightfeather.thirdapp.bean.entity.Subtask
 import cn.flightfeather.thirdapp.bean.vo.ProblemlistVo
 import cn.flightfeather.thirdapp.model.event.InspectionEvent
 import cn.flightfeather.thirdapp.model.event.ProblemEvent
@@ -58,7 +58,10 @@
         const val PROBLEM_RECHECK = 102//闂澶嶆牳
         const val PROBLEM_CHECK = 103//闂瀹℃牳
         const val CHANGE_CHECK = 104//鏁存敼瀹℃牳
+        const val PROBLEM_DELETE = 105
     }
+
+    private var taskStatus: String = Domain.TASK_STATUS_FINISHED
 
     /**
      * 鍔犺浇瀹屾垚鐘舵�侊紝
@@ -126,35 +129,17 @@
 
         super.onCreate(savedInstanceState)
 
-        initIconViewPager()
+//        initIconViewPager()
         initLocation()
 
         ll_show_hide_detail.setOnClickListener(this)
         iv_patrol_back.setOnClickListener(this)
         ll_patrol_task_detail.visibility = View.GONE
 
+        hideMenu()
+
         viewModel.inspection.observe(this, Observer {
             it?.apply {
-                showMenu()
-                if (extension1 != null) {
-                    val list = extension1.split(";").map{str ->
-                        str.split(",").map {str2 ->
-                            str2.toDoubleOrNull() ?: 0.0
-                        }.takeIf { l-> l.size == 2 }.let {latLng->
-                            LatLng(latLng?.get(1) ?: 0.0, latLng?.get(0) ?: 0.0)
-                        }
-                    }
-                    drawPolyline(list)
-                    list.firstOrNull()?.let {p->
-                        myLatLngList.add(
-                                MyLatLng(
-                                        p,
-                                        drawableId = R.drawable.icon_mark_start_blue,
-                                        selected = true
-                                )
-                        )
-                    }
-                }
                 onDataLoaded(0)
             }
         })
@@ -162,7 +147,7 @@
         viewModel.subTask.observe(this, Observer {
             it?.let {
                 updateUIBySubTask(it)
-                refreshMenuStatus(it.status)
+                taskStatus = it.status
                 onDataLoaded(1)
             }
         })
@@ -325,9 +310,37 @@
             result = result.and(it)
         }
         if (result) {
-            menuList.forEach {
-                it.setOnClickListener(this)
+            initIconViewPager()
+            showMenu()
+            refreshMenuStatus(taskStatus)
+
+            viewModel.inspection.value?.extension1?.let{
+                val list = it.split(";").map{str ->
+                    str.split(",").map {str2 ->
+                        str2.toDoubleOrNull() ?: 0.0
+                    }.takeIf { l-> l.size == 2 }.let {latLng->
+                        LatLng(latLng?.get(1) ?: 0.0, latLng?.get(0) ?: 0.0)
+                    }
+                }
+                //閬撹矾鐩戞祴鐐瑰拰閬撹矾绫诲瀷鐨勫満鏅紝鐩存帴灞曠ず杞ㄨ抗锛涘叾浣欏満鏅彧鏈夌鐞嗗憳鍜屾斂搴滈儴闂ㄥ彲浠ユ煡鐪�
+                if (
+                        (viewModel.scene.value?.typeid?.toString() == Constant.SCENE_TYPE9 || viewModel.scene.value?.typeid?.toString() == Constant.SCENE_TYPE10)
+                        || (CommonApplication.getInstance().currentUser.usertypeid == 0.toByte() || CommonApplication.getInstance().currentUser.usertypeid == 2.toByte())
+                ) {
+                    drawPolyline(list)
+                }
+
+                list.firstOrNull()?.let {p->
+                    myLatLngList.add(
+                            MyLatLng(
+                                    p,
+                                    drawableId = R.drawable.icon_mark_start_blue,
+                                    selected = true
+                            )
+                    )
+                }
             }
+
         } else {
             toast("璇风瓑寰呮暟鎹姞杞藉畬鎴�")
         }
@@ -364,7 +377,8 @@
 
         //娣诲姞 鐢ㄦ埛绫诲瀷涓衡�滀富绠¢儴闂ㄢ�濇垨鈥滅鐞嗗憳鈥濓紝缂栧彿涓�2鎴�0鏃讹紝鎸夐挳iv_startEndTask娌℃湁鐐瑰嚮浜嬩欢
         if (viewModel.userTypeId != Domain.USER_COMPTENT.toByte()
-                && viewModel.userTypeId != Domain.USER_ADMIN.toByte()) {
+//                && viewModel.userTypeId != Domain.USER_ADMIN.toByte()
+        ) {
             iv_start_end_task.setOnClickListener(this)
         } else {
             iv_start_end_task.alpha = 0.5f
@@ -385,7 +399,7 @@
         val address = s.cityname + s.districtname + " " + s.location
         tv_scense_address.text = address
 
-        val contact1 = s.contacts + " " + s.contactst
+        val contact1 = s.contacts ?: "" + " " + s.contactst ?: ""
         tv_scense_contact1.text = contact1
         tv_call_contact1.setOnClickListener {
             //鎵撶數璇�
@@ -569,13 +583,13 @@
     }
 
     private fun startTracking() {
-        if (viewModel.scene.value?.typeid?.toString() != Constant.SCENE_TYPE9
-                || viewModel.subTask.value?.status != Domain.TASK_STATUS_RUNNING) return
+        if (
+                viewModel.subTask.value == null ||
+                viewModel.subTask.value?.status != Domain.TASK_STATUS_RUNNING
+        ) return
 
         //褰撶户缁墽琛屾鍦ㄨ繘琛屼腑鐨勪换鍔℃椂锛屾牴鎹槸鍚︽湁鍘嗗彶杞ㄨ抗璁板綍鏉ュ垽鏂槸鍚﹀紑鍚�
-        if (viewModel.inspection.value?.extension1 != null) {
-            needTracking = true
-        }
+        needTracking = true
 
         if (!needTracking || timerTaskRunning) return
 
@@ -591,8 +605,8 @@
                     timerTaskRunning = true
                 }
 
-                val lng = round(longitudeCurrent * 1000) / 1000
-                val lat = round(latitudeCurrent * 1000) / 1000
+                val lng = round(longitudeCurrent * 1000000) / 1000000
+                val lat = round(latitudeCurrent * 1000000) / 1000000
 
                 viewModel.inspection.value?.apply {
                     if (extension1 == null) {
@@ -611,9 +625,15 @@
                         val l1 = LatLng(lat, lng)
                         val l2 = LatLng(last[1], last[0])
                         val distance = AMapUtils.calculateLineDistance(l1, l2)
-                        if (distance >= 5) {
+                        if (distance >= 1 && distance < 1000 && lat != 0.0 && lng != 0.0) {
                             extension1 = "${extension1};${lng},${lat}"
-                            drawPolyline(LatLng(lat, lng))
+                            //閬撹矾鐩戞祴鐐瑰拰閬撹矾绫诲瀷鐨勫満鏅紝鐩存帴灞曠ず杞ㄨ抗锛涘叾浣欏満鏅彧鏈夌鐞嗗憳鍜屾斂搴滈儴闂ㄥ彲浠ユ煡鐪�
+                            if (
+                                    (viewModel.scene.value?.typeid?.toString() == Constant.SCENE_TYPE9 || viewModel.scene.value?.typeid?.toString() == Constant.SCENE_TYPE10)
+                                    || (CommonApplication.getInstance().currentUser.usertypeid == 0.toByte() || CommonApplication.getInstance().currentUser.usertypeid == 2.toByte())
+                            ) {
+                                drawPolyline(LatLng(lat, lng))
+                            }
                         }
                     }
                 }
@@ -623,7 +643,7 @@
     }
 
     private fun trackingDone() {
-        if (!needTracking || !timerTaskRunning) return
+        if (!timerTaskRunning) return
 
         aMap.moveCamera(CameraUpdateFactory.zoomTo(zoomLevel))
 
@@ -648,6 +668,7 @@
                 } else {
                     it.problemcount + 1
                 }
+                // fixme: 2020/9/1 姝ゅ鍘熸湰鐨勯�昏緫鏄柊澧炰竴涓棶棰樺悗锛屽悓姝ユ洿鏂板贰鏌ヤ俊鎭腑鐨勯棶棰樻暟锛岄敊璇紝搴旇灏嗘鏇存柊鎿嶄綔鐩存帴鐢辨柊澧為棶棰樻帴鍙g粺涓�瀹屾垚
                 viewModel.updateInspection(it)
             }
 
@@ -664,10 +685,16 @@
 
     //寮�濮嬪鑸�
     private fun startNavi() {
-        val sourceLatLng = LatLng(viewModel.scene.value?.getLatitude()!!, viewModel.scene.value?.getLongitude()!!)
-
-        val amapNavi = AmapNavi(this)
-        amapNavi.startNavi(sourceLatLng.latitude, sourceLatLng.longitude)
+        if (viewModel.scene.value != null) {
+            val sourceLatLng = LatLng(
+                    viewModel.scene.value!!.latitude,
+                    viewModel.scene.value!!.longitude
+            )
+            val amapNavi = AmapNavi(this)
+            amapNavi.startNavi(sourceLatLng.latitude, sourceLatLng.longitude)
+        } else {
+            toast("瀵艰埅鐩墠涓嶅彲鐢紝璇风◢鍚庡啀璇�")
+        }
     }
 
     override fun onClick(v: View?) {
@@ -716,8 +743,9 @@
                 val intent = Intent(this, MenuProblemListActivity::class.java).apply {
                     putExtra("subTask", viewModel.subTask.value)
                     putExtra("inspection", viewModel.inspection.value)
-                    putExtra("scenseLat", viewModel.scene.value?.latitude)
-                    putExtra("scenseLng", viewModel.scene.value?.longitude)
+                    putExtra("scene", viewModel.scene.value)
+                    putExtra("lat", viewModel.scene.value?.latitude)
+                    putExtra("lng", viewModel.scene.value?.longitude)
                 }
                 startActivity(intent)
             }
@@ -726,8 +754,8 @@
                 val intent = Intent(this, MenuChangeActivity::class.java).apply {
                     putExtra("subTask", viewModel.subTask.value)
                     putExtra("inspection", viewModel.inspection.value)
-                    putExtra("scenseLat", viewModel.scene.value?.latitude)
-                    putExtra("scenseLng", viewModel.scene.value?.longitude)
+                    putExtra("lat", viewModel.scene.value?.latitude)
+                    putExtra("lng", viewModel.scene.value?.longitude)
                 }
                 startActivity(intent)
             }
@@ -835,7 +863,7 @@
                 }
                 startActivity(intent)
             }
-            //闂瀹℃牳
+            //鏁存敼瀹℃牳
             R.id.ln_patrol_change_check -> {
                 val intent = Intent(this, MenuChangeCheckActivity::class.java).apply {
                     putExtra("subTask", viewModel.subTask.value)

--
Gitblit v1.9.3