diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java new file mode 100644 index 0000000..da9c966 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java @@ -0,0 +1,4 @@ +package com.casic.br.operationsite.model; + +public class InspectionPointModel { +} diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java new file mode 100644 index 0000000..da9c966 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java @@ -0,0 +1,4 @@ +package com.casic.br.operationsite.model; + +public class InspectionPointModel { +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index c093f36..cb7a9c2 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -155,4 +155,32 @@ @Query("pwd") pwd: String, @Query("Speed") Speed: String ): String + + /** + * 自动巡检点位列表 + */ + @GET("/") + suspend fun getPoints( + @Header("token") token: String, + @Query("projectId") projectId: String, + @Query("deviceId") deviceId: String + ): String + + /** + * 添加自动巡检点位 + */ + @POST("/") + suspend fun addPoint( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** + * 删除自动巡检点位 + */ + @GET("/") + suspend fun deletePoint( + @Header("token") token: String, + @Query("id") id: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java new file mode 100644 index 0000000..da9c966 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java @@ -0,0 +1,4 @@ +package com.casic.br.operationsite.model; + +public class InspectionPointModel { +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index c093f36..cb7a9c2 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -155,4 +155,32 @@ @Query("pwd") pwd: String, @Query("Speed") Speed: String ): String + + /** + * 自动巡检点位列表 + */ + @GET("/") + suspend fun getPoints( + @Header("token") token: String, + @Query("projectId") projectId: String, + @Query("deviceId") deviceId: String + ): String + + /** + * 添加自动巡检点位 + */ + @POST("/") + suspend fun addPoint( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** + * 删除自动巡检点位 + */ + @GET("/") + suspend fun deletePoint( + @Header("token") token: String, + @Query("id") id: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 08a5f66..d2b25a8 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -224,4 +224,25 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig") return service.executeDeviceCommand(action, "admin", "admin", speed.toString()) } + + suspend fun getPoints(deviceId: String): String { + return api.getPoints(AuthenticationHelper.token!!, RuntimeCache.projectId, deviceId) + } + + suspend fun addPoint(deviceId: String, horizontalAngle: String, verticalAngle: String): String { + val param = JsonObject() + param.addProperty("projectId", RuntimeCache.projectId) + param.addProperty("deviceId", deviceId) + param.addProperty("horizontalAngle", horizontalAngle) + param.addProperty("verticalAngle", verticalAngle) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.addPoint(AuthenticationHelper.token!!, requestBody) + } + + suspend fun deletePoint(id: String): String { + return api.deletePoint(AuthenticationHelper.token!!, id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java new file mode 100644 index 0000000..da9c966 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java @@ -0,0 +1,4 @@ +package com.casic.br.operationsite.model; + +public class InspectionPointModel { +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index c093f36..cb7a9c2 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -155,4 +155,32 @@ @Query("pwd") pwd: String, @Query("Speed") Speed: String ): String + + /** + * 自动巡检点位列表 + */ + @GET("/") + suspend fun getPoints( + @Header("token") token: String, + @Query("projectId") projectId: String, + @Query("deviceId") deviceId: String + ): String + + /** + * 添加自动巡检点位 + */ + @POST("/") + suspend fun addPoint( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** + * 删除自动巡检点位 + */ + @GET("/") + suspend fun deletePoint( + @Header("token") token: String, + @Query("id") id: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 08a5f66..d2b25a8 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -224,4 +224,25 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig") return service.executeDeviceCommand(action, "admin", "admin", speed.toString()) } + + suspend fun getPoints(deviceId: String): String { + return api.getPoints(AuthenticationHelper.token!!, RuntimeCache.projectId, deviceId) + } + + suspend fun addPoint(deviceId: String, horizontalAngle: String, verticalAngle: String): String { + val param = JsonObject() + param.addProperty("projectId", RuntimeCache.projectId) + param.addProperty("deviceId", deviceId) + param.addProperty("horizontalAngle", horizontalAngle) + param.addProperty("verticalAngle", verticalAngle) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.addPoint(AuthenticationHelper.token!!, requestBody) + } + + suspend fun deletePoint(id: String): String { + return api.deletePoint(AuthenticationHelper.token!!, id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt index c826e89..a52fbec 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt @@ -2,4 +2,5 @@ object RuntimeCache { var projectId = "" + var treeIds = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java new file mode 100644 index 0000000..da9c966 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java @@ -0,0 +1,4 @@ +package com.casic.br.operationsite.model; + +public class InspectionPointModel { +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index c093f36..cb7a9c2 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -155,4 +155,32 @@ @Query("pwd") pwd: String, @Query("Speed") Speed: String ): String + + /** + * 自动巡检点位列表 + */ + @GET("/") + suspend fun getPoints( + @Header("token") token: String, + @Query("projectId") projectId: String, + @Query("deviceId") deviceId: String + ): String + + /** + * 添加自动巡检点位 + */ + @POST("/") + suspend fun addPoint( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** + * 删除自动巡检点位 + */ + @GET("/") + suspend fun deletePoint( + @Header("token") token: String, + @Query("id") id: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 08a5f66..d2b25a8 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -224,4 +224,25 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig") return service.executeDeviceCommand(action, "admin", "admin", speed.toString()) } + + suspend fun getPoints(deviceId: String): String { + return api.getPoints(AuthenticationHelper.token!!, RuntimeCache.projectId, deviceId) + } + + suspend fun addPoint(deviceId: String, horizontalAngle: String, verticalAngle: String): String { + val param = JsonObject() + param.addProperty("projectId", RuntimeCache.projectId) + param.addProperty("deviceId", deviceId) + param.addProperty("horizontalAngle", horizontalAngle) + param.addProperty("verticalAngle", verticalAngle) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.addPoint(AuthenticationHelper.token!!, requestBody) + } + + suspend fun deletePoint(id: String): String { + return api.deletePoint(AuthenticationHelper.token!!, id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt index c826e89..a52fbec 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt @@ -2,4 +2,5 @@ object RuntimeCache { var projectId = "" + var treeIds = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt index 827d98f..440400d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt @@ -12,6 +12,7 @@ import com.casic.br.operationsite.adapter.TabPageViewAdapter import com.casic.br.operationsite.databinding.ActivityDeviceControlBinding import com.casic.br.operationsite.extensions.initImmersionBar +import com.casic.br.operationsite.fragments.AutoInspectionFragment import com.casic.br.operationsite.fragments.BaseSettingsFragment import com.casic.br.operationsite.fragments.DeviceControllerFragment import com.casic.br.operationsite.fragments.MethaneMonitorFragment @@ -33,7 +34,7 @@ } private val fragmentPages by lazy { ArrayList() } - private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置") + private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置", "巡检配置") private var isRtspPlaying = false init { @@ -41,6 +42,7 @@ fragmentPages.add(MethaneMonitorFragment()) fragmentPages.add(VoiceSettingsFragment()) fragmentPages.add(BaseSettingsFragment()) + fragmentPages.add(AutoInspectionFragment()) } override fun handleMessage(msg: Message): Boolean { diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java new file mode 100644 index 0000000..da9c966 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java @@ -0,0 +1,4 @@ +package com.casic.br.operationsite.model; + +public class InspectionPointModel { +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index c093f36..cb7a9c2 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -155,4 +155,32 @@ @Query("pwd") pwd: String, @Query("Speed") Speed: String ): String + + /** + * 自动巡检点位列表 + */ + @GET("/") + suspend fun getPoints( + @Header("token") token: String, + @Query("projectId") projectId: String, + @Query("deviceId") deviceId: String + ): String + + /** + * 添加自动巡检点位 + */ + @POST("/") + suspend fun addPoint( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** + * 删除自动巡检点位 + */ + @GET("/") + suspend fun deletePoint( + @Header("token") token: String, + @Query("id") id: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 08a5f66..d2b25a8 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -224,4 +224,25 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig") return service.executeDeviceCommand(action, "admin", "admin", speed.toString()) } + + suspend fun getPoints(deviceId: String): String { + return api.getPoints(AuthenticationHelper.token!!, RuntimeCache.projectId, deviceId) + } + + suspend fun addPoint(deviceId: String, horizontalAngle: String, verticalAngle: String): String { + val param = JsonObject() + param.addProperty("projectId", RuntimeCache.projectId) + param.addProperty("deviceId", deviceId) + param.addProperty("horizontalAngle", horizontalAngle) + param.addProperty("verticalAngle", verticalAngle) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.addPoint(AuthenticationHelper.token!!, requestBody) + } + + suspend fun deletePoint(id: String): String { + return api.deletePoint(AuthenticationHelper.token!!, id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt index c826e89..a52fbec 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt @@ -2,4 +2,5 @@ object RuntimeCache { var projectId = "" + var treeIds = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt index 827d98f..440400d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt @@ -12,6 +12,7 @@ import com.casic.br.operationsite.adapter.TabPageViewAdapter import com.casic.br.operationsite.databinding.ActivityDeviceControlBinding import com.casic.br.operationsite.extensions.initImmersionBar +import com.casic.br.operationsite.fragments.AutoInspectionFragment import com.casic.br.operationsite.fragments.BaseSettingsFragment import com.casic.br.operationsite.fragments.DeviceControllerFragment import com.casic.br.operationsite.fragments.MethaneMonitorFragment @@ -33,7 +34,7 @@ } private val fragmentPages by lazy { ArrayList() } - private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置") + private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置", "巡检配置") private var isRtspPlaying = false init { @@ -41,6 +42,7 @@ fragmentPages.add(MethaneMonitorFragment()) fragmentPages.add(VoiceSettingsFragment()) fragmentPages.add(BaseSettingsFragment()) + fragmentPages.add(AutoInspectionFragment()) } override fun handleMessage(msg: Message): Boolean { diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index db25c40..ad1fd6c 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -454,6 +454,9 @@ val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() + if (RuntimeCache.treeIds.isNotEmpty()) { + RuntimeCache.treeIds.clear() + } it.data.forEach { x -> val location = x.latestLocation if (location.gdLat.isNotBlank() && location.gdLng.isNotBlank()) { @@ -474,6 +477,7 @@ * */ if (x.deviceType == "1") { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin_tree)) + RuntimeCache.treeIds.add(x.id) } else if (x.deviceType == "6") { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin_device)) } diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java new file mode 100644 index 0000000..da9c966 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java @@ -0,0 +1,4 @@ +package com.casic.br.operationsite.model; + +public class InspectionPointModel { +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index c093f36..cb7a9c2 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -155,4 +155,32 @@ @Query("pwd") pwd: String, @Query("Speed") Speed: String ): String + + /** + * 自动巡检点位列表 + */ + @GET("/") + suspend fun getPoints( + @Header("token") token: String, + @Query("projectId") projectId: String, + @Query("deviceId") deviceId: String + ): String + + /** + * 添加自动巡检点位 + */ + @POST("/") + suspend fun addPoint( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** + * 删除自动巡检点位 + */ + @GET("/") + suspend fun deletePoint( + @Header("token") token: String, + @Query("id") id: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 08a5f66..d2b25a8 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -224,4 +224,25 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig") return service.executeDeviceCommand(action, "admin", "admin", speed.toString()) } + + suspend fun getPoints(deviceId: String): String { + return api.getPoints(AuthenticationHelper.token!!, RuntimeCache.projectId, deviceId) + } + + suspend fun addPoint(deviceId: String, horizontalAngle: String, verticalAngle: String): String { + val param = JsonObject() + param.addProperty("projectId", RuntimeCache.projectId) + param.addProperty("deviceId", deviceId) + param.addProperty("horizontalAngle", horizontalAngle) + param.addProperty("verticalAngle", verticalAngle) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.addPoint(AuthenticationHelper.token!!, requestBody) + } + + suspend fun deletePoint(id: String): String { + return api.deletePoint(AuthenticationHelper.token!!, id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt index c826e89..a52fbec 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt @@ -2,4 +2,5 @@ object RuntimeCache { var projectId = "" + var treeIds = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt index 827d98f..440400d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt @@ -12,6 +12,7 @@ import com.casic.br.operationsite.adapter.TabPageViewAdapter import com.casic.br.operationsite.databinding.ActivityDeviceControlBinding import com.casic.br.operationsite.extensions.initImmersionBar +import com.casic.br.operationsite.fragments.AutoInspectionFragment import com.casic.br.operationsite.fragments.BaseSettingsFragment import com.casic.br.operationsite.fragments.DeviceControllerFragment import com.casic.br.operationsite.fragments.MethaneMonitorFragment @@ -33,7 +34,7 @@ } private val fragmentPages by lazy { ArrayList() } - private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置") + private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置", "巡检配置") private var isRtspPlaying = false init { @@ -41,6 +42,7 @@ fragmentPages.add(MethaneMonitorFragment()) fragmentPages.add(VoiceSettingsFragment()) fragmentPages.add(BaseSettingsFragment()) + fragmentPages.add(AutoInspectionFragment()) } override fun handleMessage(msg: Message): Boolean { diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index db25c40..ad1fd6c 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -454,6 +454,9 @@ val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() + if (RuntimeCache.treeIds.isNotEmpty()) { + RuntimeCache.treeIds.clear() + } it.data.forEach { x -> val location = x.latestLocation if (location.gdLat.isNotBlank() && location.gdLng.isNotBlank()) { @@ -474,6 +477,7 @@ * */ if (x.deviceType == "1") { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin_tree)) + RuntimeCache.treeIds.add(x.id) } else if (x.deviceType == "6") { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin_device)) } diff --git a/app/src/main/java/com/casic/br/operationsite/vm/InspectionViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/InspectionViewModel.kt new file mode 100644 index 0000000..1eeccc2 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/vm/InspectionViewModel.kt @@ -0,0 +1,69 @@ +package com.casic.br.operationsite.vm + +import androidx.lifecycle.ViewModel +import com.casic.br.operationsite.extensions.getResponseHeader +import com.casic.br.operationsite.model.InspectionPointModel +import com.casic.br.operationsite.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.unpackingResponse + +class InspectionViewModel : ViewModel() { + fun getPoints( + deviceId: String, + onLoading: () -> Unit, + onSuccess: (InspectionPointModel) -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.getPoints(deviceId) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess(unpackingResponse(response)) + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) + + fun addPoint( + deviceId: String, + horizontalAngle: String, + verticalAngle: String, + onLoading: () -> Unit, + onSuccess: () -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.addPoint(deviceId, horizontalAngle, verticalAngle) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess() + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) + + fun deletePoint( + id: String, + onLoading: () -> Unit, + onSuccess: () -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.deletePoint(id) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess() + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java new file mode 100644 index 0000000..da9c966 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java @@ -0,0 +1,4 @@ +package com.casic.br.operationsite.model; + +public class InspectionPointModel { +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index c093f36..cb7a9c2 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -155,4 +155,32 @@ @Query("pwd") pwd: String, @Query("Speed") Speed: String ): String + + /** + * 自动巡检点位列表 + */ + @GET("/") + suspend fun getPoints( + @Header("token") token: String, + @Query("projectId") projectId: String, + @Query("deviceId") deviceId: String + ): String + + /** + * 添加自动巡检点位 + */ + @POST("/") + suspend fun addPoint( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** + * 删除自动巡检点位 + */ + @GET("/") + suspend fun deletePoint( + @Header("token") token: String, + @Query("id") id: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 08a5f66..d2b25a8 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -224,4 +224,25 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig") return service.executeDeviceCommand(action, "admin", "admin", speed.toString()) } + + suspend fun getPoints(deviceId: String): String { + return api.getPoints(AuthenticationHelper.token!!, RuntimeCache.projectId, deviceId) + } + + suspend fun addPoint(deviceId: String, horizontalAngle: String, verticalAngle: String): String { + val param = JsonObject() + param.addProperty("projectId", RuntimeCache.projectId) + param.addProperty("deviceId", deviceId) + param.addProperty("horizontalAngle", horizontalAngle) + param.addProperty("verticalAngle", verticalAngle) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.addPoint(AuthenticationHelper.token!!, requestBody) + } + + suspend fun deletePoint(id: String): String { + return api.deletePoint(AuthenticationHelper.token!!, id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt index c826e89..a52fbec 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt @@ -2,4 +2,5 @@ object RuntimeCache { var projectId = "" + var treeIds = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt index 827d98f..440400d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt @@ -12,6 +12,7 @@ import com.casic.br.operationsite.adapter.TabPageViewAdapter import com.casic.br.operationsite.databinding.ActivityDeviceControlBinding import com.casic.br.operationsite.extensions.initImmersionBar +import com.casic.br.operationsite.fragments.AutoInspectionFragment import com.casic.br.operationsite.fragments.BaseSettingsFragment import com.casic.br.operationsite.fragments.DeviceControllerFragment import com.casic.br.operationsite.fragments.MethaneMonitorFragment @@ -33,7 +34,7 @@ } private val fragmentPages by lazy { ArrayList() } - private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置") + private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置", "巡检配置") private var isRtspPlaying = false init { @@ -41,6 +42,7 @@ fragmentPages.add(MethaneMonitorFragment()) fragmentPages.add(VoiceSettingsFragment()) fragmentPages.add(BaseSettingsFragment()) + fragmentPages.add(AutoInspectionFragment()) } override fun handleMessage(msg: Message): Boolean { diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index db25c40..ad1fd6c 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -454,6 +454,9 @@ val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() + if (RuntimeCache.treeIds.isNotEmpty()) { + RuntimeCache.treeIds.clear() + } it.data.forEach { x -> val location = x.latestLocation if (location.gdLat.isNotBlank() && location.gdLng.isNotBlank()) { @@ -474,6 +477,7 @@ * */ if (x.deviceType == "1") { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin_tree)) + RuntimeCache.treeIds.add(x.id) } else if (x.deviceType == "6") { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin_device)) } diff --git a/app/src/main/java/com/casic/br/operationsite/vm/InspectionViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/InspectionViewModel.kt new file mode 100644 index 0000000..1eeccc2 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/vm/InspectionViewModel.kt @@ -0,0 +1,69 @@ +package com.casic.br.operationsite.vm + +import androidx.lifecycle.ViewModel +import com.casic.br.operationsite.extensions.getResponseHeader +import com.casic.br.operationsite.model.InspectionPointModel +import com.casic.br.operationsite.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.unpackingResponse + +class InspectionViewModel : ViewModel() { + fun getPoints( + deviceId: String, + onLoading: () -> Unit, + onSuccess: (InspectionPointModel) -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.getPoints(deviceId) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess(unpackingResponse(response)) + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) + + fun addPoint( + deviceId: String, + horizontalAngle: String, + verticalAngle: String, + onLoading: () -> Unit, + onSuccess: () -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.addPoint(deviceId, horizontalAngle, verticalAngle) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess() + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) + + fun deletePoint( + id: String, + onLoading: () -> Unit, + onSuccess: () -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.deletePoint(id) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess() + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt index 7f41593..8f8dad8 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt @@ -45,7 +45,6 @@ onFailed(it.message ?: "Unknown error") }) - fun getTubeGasHistory( deviceCode: String, projectId: String, diff --git a/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt new file mode 100644 index 0000000..e36cd13 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/fragments/AutoInspectionFragment.kt @@ -0,0 +1,94 @@ +package com.casic.br.operationsite.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import androidx.lifecycle.ViewModelProvider +import com.casic.br.operationsite.databinding.FragmentAutoInspectionBinding +import com.casic.br.operationsite.utils.RuntimeCache +import com.casic.br.operationsite.vm.InspectionViewModel +import com.pengxh.kt.lite.base.KotlinBaseFragment +import com.pengxh.kt.lite.extensions.show + +class AutoInspectionFragment : KotlinBaseFragment() { + + private val inspectionViewModel by lazy { ViewModelProvider(this)[InspectionViewModel::class.java] } + private var selectedTree = "" + + override fun initViewBinding( + inflater: LayoutInflater, container: ViewGroup? + ): FragmentAutoInspectionBinding { + return FragmentAutoInspectionBinding.inflate(inflater, container, false) + } + + override fun setupTopBarLayout() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (RuntimeCache.treeIds.isEmpty()) { + "当前施工现场没有安全树".show(requireContext()) + return + } + + selectedTree = RuntimeCache.treeIds.first() + val adapter = ArrayAdapter( + requireContext(), android.R.layout.simple_spinner_item, RuntimeCache.treeIds + ).apply { + setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + } + binding.treeSpinner.adapter = adapter + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + binding.treeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + selectedTree = RuntimeCache.treeIds[position] + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.addPointButton.setOnClickListener { + + + //0~360° + val horizontalAngle = binding.horizontalAngleView.text.toString().trim() + if (horizontalAngle.toDouble() < 0 || horizontalAngle.toDouble() > 360) { + "水平角度设置错误".show(requireContext()) + return@setOnClickListener + } + + //-30~90° + val verticalAngle = binding.verticalAngleView.text.toString().trim() + if (verticalAngle.toDouble() < -30 || verticalAngle.toDouble() > 90) { + "垂直角度设置错误".show(requireContext()) + return@setOnClickListener + } + + inspectionViewModel.addPoint( + selectedTree, + horizontalAngle, + verticalAngle, + onLoading = {}, + onSuccess = { + "添加成功".show(requireContext()) + }, + onFailed = { + it.show(requireContext()) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java new file mode 100644 index 0000000..da9c966 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/model/InspectionPointModel.java @@ -0,0 +1,4 @@ +package com.casic.br.operationsite.model; + +public class InspectionPointModel { +} diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt index c093f36..cb7a9c2 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitService.kt @@ -155,4 +155,32 @@ @Query("pwd") pwd: String, @Query("Speed") Speed: String ): String + + /** + * 自动巡检点位列表 + */ + @GET("/") + suspend fun getPoints( + @Header("token") token: String, + @Query("projectId") projectId: String, + @Query("deviceId") deviceId: String + ): String + + /** + * 添加自动巡检点位 + */ + @POST("/") + suspend fun addPoint( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String + + /** + * 删除自动巡检点位 + */ + @GET("/") + suspend fun deletePoint( + @Header("token") token: String, + @Query("id") id: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt index 08a5f66..d2b25a8 100644 --- a/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/operationsite/retrofit/RetrofitServiceManager.kt @@ -224,4 +224,25 @@ val service = RetrofitFactory.createRetrofit("http://$httpConfig") return service.executeDeviceCommand(action, "admin", "admin", speed.toString()) } + + suspend fun getPoints(deviceId: String): String { + return api.getPoints(AuthenticationHelper.token!!, RuntimeCache.projectId, deviceId) + } + + suspend fun addPoint(deviceId: String, horizontalAngle: String, verticalAngle: String): String { + val param = JsonObject() + param.addProperty("projectId", RuntimeCache.projectId) + param.addProperty("deviceId", deviceId) + param.addProperty("horizontalAngle", horizontalAngle) + param.addProperty("verticalAngle", verticalAngle) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.addPoint(AuthenticationHelper.token!!, requestBody) + } + + suspend fun deletePoint(id: String): String { + return api.deletePoint(AuthenticationHelper.token!!, id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt index c826e89..a52fbec 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/RuntimeCache.kt @@ -2,4 +2,5 @@ object RuntimeCache { var projectId = "" + var treeIds = ArrayList() } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt index 827d98f..440400d 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/DeviceControlActivity.kt @@ -12,6 +12,7 @@ import com.casic.br.operationsite.adapter.TabPageViewAdapter import com.casic.br.operationsite.databinding.ActivityDeviceControlBinding import com.casic.br.operationsite.extensions.initImmersionBar +import com.casic.br.operationsite.fragments.AutoInspectionFragment import com.casic.br.operationsite.fragments.BaseSettingsFragment import com.casic.br.operationsite.fragments.DeviceControllerFragment import com.casic.br.operationsite.fragments.MethaneMonitorFragment @@ -33,7 +34,7 @@ } private val fragmentPages by lazy { ArrayList() } - private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置") + private val pageTitles = arrayOf("相机控制", "激光监测", "语音设置", "基础配置", "巡检配置") private var isRtspPlaying = false init { @@ -41,6 +42,7 @@ fragmentPages.add(MethaneMonitorFragment()) fragmentPages.add(VoiceSettingsFragment()) fragmentPages.add(BaseSettingsFragment()) + fragmentPages.add(AutoInspectionFragment()) } override fun handleMessage(msg: Message): Boolean { diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt index db25c40..ad1fd6c 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt @@ -454,6 +454,9 @@ val allMarkerOptions = ArrayList() val latitudeList: MutableList = ArrayList() val longitudeList: MutableList = ArrayList() + if (RuntimeCache.treeIds.isNotEmpty()) { + RuntimeCache.treeIds.clear() + } it.data.forEach { x -> val location = x.latestLocation if (location.gdLat.isNotBlank() && location.gdLng.isNotBlank()) { @@ -474,6 +477,7 @@ * */ if (x.deviceType == "1") { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin_tree)) + RuntimeCache.treeIds.add(x.id) } else if (x.deviceType == "6") { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin_device)) } diff --git a/app/src/main/java/com/casic/br/operationsite/vm/InspectionViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/InspectionViewModel.kt new file mode 100644 index 0000000..1eeccc2 --- /dev/null +++ b/app/src/main/java/com/casic/br/operationsite/vm/InspectionViewModel.kt @@ -0,0 +1,69 @@ +package com.casic.br.operationsite.vm + +import androidx.lifecycle.ViewModel +import com.casic.br.operationsite.extensions.getResponseHeader +import com.casic.br.operationsite.model.InspectionPointModel +import com.casic.br.operationsite.retrofit.RetrofitServiceManager +import com.pengxh.kt.lite.extensions.launch +import com.pengxh.kt.lite.extensions.unpackingResponse + +class InspectionViewModel : ViewModel() { + fun getPoints( + deviceId: String, + onLoading: () -> Unit, + onSuccess: (InspectionPointModel) -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.getPoints(deviceId) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess(unpackingResponse(response)) + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) + + fun addPoint( + deviceId: String, + horizontalAngle: String, + verticalAngle: String, + onLoading: () -> Unit, + onSuccess: () -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.addPoint(deviceId, horizontalAngle, verticalAngle) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess() + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) + + fun deletePoint( + id: String, + onLoading: () -> Unit, + onSuccess: () -> Unit, + onFailed: (String) -> Unit + ) = launch({ + onLoading() + val response = RetrofitServiceManager.deletePoint(id) + val header = response.getResponseHeader() + if (header.first == 200) { + onSuccess() + } else { + onFailed(header.second) + } + }, { + it.printStackTrace() + onFailed(it.message ?: "Unknown error") + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt index 7f41593..8f8dad8 100644 --- a/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt +++ b/app/src/main/java/com/casic/br/operationsite/vm/TubeViewModel.kt @@ -45,7 +45,6 @@ onFailed(it.message ?: "Unknown error") }) - fun getTubeGasHistory( deviceCode: String, projectId: String, diff --git a/app/src/main/res/layout/fragment_auto_inspection.xml b/app/src/main/res/layout/fragment_auto_inspection.xml new file mode 100644 index 0000000..8a7dfbe --- /dev/null +++ b/app/src/main/res/layout/fragment_auto_inspection.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file