package cn.flightfeather.thirdapp.module.inspection
|
|
import android.app.Activity
|
import android.arch.lifecycle.Observer
|
import android.arch.lifecycle.ViewModelProviders
|
import android.content.Intent
|
import android.net.Uri
|
import android.os.Bundle
|
import android.support.v4.content.ContextCompat
|
import android.support.v4.view.ViewPager
|
import android.support.v7.app.AlertDialog
|
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.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
|
import cn.flightfeather.thirdapp.module.base.BaseMapActivity
|
import cn.flightfeather.thirdapp.module.task.SceneDetailActivity
|
import cn.flightfeather.thirdapp.util.*
|
import com.amap.api.maps.AMapUtils
|
import com.amap.api.maps.CameraUpdateFactory
|
import com.amap.api.maps.MapView
|
import com.amap.api.maps.model.CameraPosition
|
import com.amap.api.maps.model.LatLng
|
import com.amap.api.maps.model.Marker
|
import com.amap.api.maps.model.MyLocationStyle
|
import kotlinx.android.synthetic.main.fragment_inspection_content.*
|
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.Subscribe
|
import org.greenrobot.eventbus.ThreadMode
|
import org.jetbrains.anko.toast
|
import java.util.*
|
import kotlin.collections.ArrayList
|
import kotlin.math.round
|
|
/**
|
* @author riku
|
* Date: 2019/7/29
|
* 巡查详细子任务执行activity
|
*/
|
class InspectionDetailActivity :BaseMapActivity(), View.OnClickListener {
|
|
companion object {
|
const val REQUEST_CODE_LOCATION = 99
|
const val PROBLEM_LIST = 100//问题列表
|
const val PROBLEM_CHANGE = 101//问题现场整改
|
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
|
|
/**
|
* 加载完成状态,
|
* 分别为[InspectionDetailViewModel.inspection], [InspectionDetailViewModel.subTask], [InspectionDetailViewModel.scene]
|
* 只有三个参数都完成加载时,功能菜单按钮才可点击
|
*/
|
private val loadingStatus = BooleanArray(3){ false }
|
|
private lateinit var viewModel: InspectionDetailViewModel
|
|
//菜单按钮列表
|
private val menuList = ArrayList<LinearLayout>()
|
|
private var problemEditable = false
|
|
private var timer = Timer("track")
|
private var timerTask: TimerTask? = null
|
private var timerTaskRunning = false
|
private var needTracking = false//是否需要记录轨迹
|
|
override fun getLayoutId(): Int = R.layout.fragment_inspection_content
|
|
override fun getMapView(): MapView = mv_main
|
|
override var needMerge: Boolean = false
|
|
override fun initMap() {
|
super.initMap()
|
|
aMap.apply {
|
setRenderFps(60)
|
uiSettings.isZoomControlsEnabled = false
|
uiSettings.isScaleControlsEnabled = true
|
}
|
}
|
|
override fun onMarkerClick(marker: Marker) {
|
val guid = marker.snippet
|
if (guid != null && guid.isNotEmpty()) {
|
val intent = Intent(this@InspectionDetailActivity, ProblemDetailActivity::class.java)
|
var problemListVo: ProblemlistVo? = null
|
for (i in viewModel.problemList.value?.indices ?: 0..0) {
|
if (viewModel.problemList.value!![i].guid == guid) {
|
problemListVo = viewModel.problemList.value!![i]
|
}
|
}
|
intent.putExtra("problemlistVo", problemListVo)
|
intent.putExtra("subTaskSelected", viewModel.subTask.value)
|
intent.putExtra("scenseLat", viewModel.scene.value?.latitude)
|
intent.putExtra("scenseLng", viewModel.scene.value?.longitude)
|
intent.putExtra("editable", problemEditable)
|
intent.putExtra("type", PROBLEM_LIST)
|
startActivity(intent)
|
}
|
}
|
|
override fun onMapInitStart() {
|
|
}
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
EventBus.getDefault().register(this)
|
|
viewModel = ViewModelProviders.of(this).get(InspectionDetailViewModel::class.java)
|
|
super.onCreate(savedInstanceState)
|
|
// 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 {
|
onDataLoaded(0)
|
}
|
})
|
|
viewModel.subTask.observe(this, Observer {
|
it?.let {
|
updateUIBySubTask(it)
|
taskStatus = it.status
|
onDataLoaded(1)
|
}
|
})
|
|
viewModel.scene.observe(this, Observer {
|
it?.let {
|
updateUIByScene(it)
|
drawMarkers()
|
onDataLoaded(2)
|
}
|
})
|
|
viewModel.problemList.observe(this, Observer {
|
it?.let {
|
updateUIByProblem(it)
|
drawMarkers()
|
}
|
})
|
|
viewModel.newProblem.observe(this, Observer {
|
it?.let {
|
val lat = it.latitude ?: viewModel.scene.value?.latitude ?: 0.0
|
val lng = it.longitude ?: viewModel.scene.value?.longitude ?: 0.0
|
val nextIndex = myLatLngList.size
|
myLatLngList.add(
|
MyLatLng(
|
LatLng(lat, lng),
|
drawableId = problemMarkerList[nextIndex],
|
selected = true
|
)
|
)
|
drawMarkers()
|
}
|
})
|
|
viewModel.subTask.value = intent.getSerializableExtra("subTask") as Subtask?
|
viewModel.subTask.value?.let {
|
viewModel.getInspectionData(it.stguid)
|
viewModel.getSceneInfo(it.scenseid)
|
}
|
}
|
|
override fun onResume() {
|
startTracking()
|
super.onResume()
|
}
|
|
override fun onPause() {
|
trackingDone()
|
super.onPause()
|
}
|
|
override fun onDestroy() {
|
trackingDone()
|
super.onDestroy()
|
}
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
//更新场景坐标
|
if (requestCode == REQUEST_CODE_LOCATION && resultCode == Activity.RESULT_OK) {
|
data?.let {intent ->
|
val longitude = intent.getSerializableExtra("Longitude") as Double
|
val latitude = intent.getSerializableExtra("Latitude") as Double
|
if (longitude > 0 && latitude > 0) {
|
viewModel.scene.value?.let {
|
it.longitude = longitude
|
it.latitude = latitude
|
viewModel.updateScene(it)
|
}
|
}
|
}
|
}
|
}
|
|
//初始化位置
|
override fun initLocation() {
|
val myLocationStyle = MyLocationStyle()
|
//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
|
// 连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
|
myLocationStyle.interval(3000) //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
|
myLocationStyle.showMyLocation(true)
|
myLocationStyle.radiusFillColor(ContextCompat.getColor(this, R.color.transparent))
|
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动
|
aMap.apply {
|
this.myLocationStyle = myLocationStyle//设置定位蓝点的Style
|
uiSettings.isMyLocationButtonEnabled = false//设置默认定位按钮是否显示,非必需设置。
|
isMyLocationEnabled = true// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
|
}
|
}
|
|
//初始化功能面版viewpager
|
private fun initIconViewPager() {
|
ll_patrol_show.apply{
|
visibility = View.INVISIBLE
|
setOnClickListener(this@InspectionDetailActivity)
|
}
|
ll_patrol_hide.apply {
|
visibility = View.VISIBLE
|
setOnClickListener(this@InspectionDetailActivity)
|
}
|
|
val iconPage1 = View.inflate(this, R.layout.page_patrol_icons_first, null)
|
val iconPage2 = View.inflate(this, R.layout.page_patrol_icons_second, null)
|
|
menuList.apply{
|
add(iconPage1.findViewById(R.id.ln_patrol_problem_recheck))
|
add(iconPage1.findViewById(R.id.ln_patrol_take_evidence))
|
add(iconPage1.findViewById(R.id.ln_patrol_problem_list))
|
add(iconPage1.findViewById(R.id.ln_patrol_change))
|
add(iconPage1.findViewById(R.id.ln_patrol_camera))
|
add(iconPage1.findViewById(R.id.ln_patrol_newgit))
|
add(iconPage1.findViewById(R.id.ln_patrol_promiss))
|
add(iconPage1.findViewById(R.id.ln_patrol_rate))
|
add(iconPage2.findViewById(R.id.ln_patrol_navi))
|
add(iconPage2.findViewById(R.id.ln_patrol_chose_latlng))
|
add(iconPage2.findViewById(R.id.ln_patrol_edit))
|
add(iconPage2.findViewById(R.id.ln_patrol_share))
|
add(iconPage2.findViewById(R.id.ln_patrol_check))
|
add(iconPage2.findViewById(R.id.ln_patrol_change_check))
|
//判断用户权限,只有管理员可见问题审核图标
|
if (viewModel.userTypeId != Domain.USER_ADMIN.toByte()) {
|
menuList[menuList.lastIndex - 1].visibility = View.INVISIBLE
|
menuList.last().visibility = View.INVISIBLE
|
}
|
}
|
|
vp_patrol_icons.adapter = IconsPageAdapter(ArrayList<View>().apply {
|
add(iconPage1)
|
add(iconPage2)
|
})
|
|
vp_patrol_icons.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
|
|
}
|
|
override fun onPageSelected(position: Int) {
|
//当页面改变时,切换到对应的小圆点
|
if (position == 0) {
|
iv_patrol_pointer.setImageResource(R.drawable.select_first_point)
|
} else if (position == 1) {
|
iv_patrol_pointer.setImageResource(R.drawable.select_second_point)
|
}
|
}
|
|
override fun onPageScrollStateChanged(state: Int) {
|
|
}
|
})
|
}
|
|
/**
|
* 判断三个所需参数是否加载完成
|
*/
|
private fun onDataLoaded(index: Int) {
|
loadingStatus[index] = true
|
var result = true
|
loadingStatus.forEach {
|
result = result.and(it)
|
}
|
if (result) {
|
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("请等待数据加载完成")
|
}
|
}
|
|
/**
|
* 根据任务状态刷新界面
|
* 状态共有3种
|
* @see [cn.flightfeather.thirdapp.util.Domain.TASK_STATUS_RUNNING],
|
* [cn.flightfeather.thirdapp.util.Domain.TASK_STATUS_FINISHED],
|
* [cn.flightfeather.thirdapp.util.Domain.TASK_STATUS_WAITING]
|
*/
|
private fun updateUIBySubTask(s: Subtask) {
|
tv_subtask_name_bar.text = s.name
|
tv_subtask_status_bar.text = s.status
|
tv_subtask_name.text = s.name
|
tv_subtask_type.text = s.type
|
|
val startDay = DateFormatter.dateFormat.format(s.planstarttime)
|
val startMin = DateFormatter.timeFormat.format(s.planstarttime)
|
val endDay = DateFormatter.dateFormat.format(s.planendtime)
|
val endMin = DateFormatter.timeFormat.format(s.planendtime)
|
val t = "$startDay $startMin - ${if (startDay == endDay) "" else endDay} $endMin"
|
tv_subtask_plan_time.text = t
|
|
val executeTime = if (s.executionstarttime != null && s.executionendtime != null) {
|
DateFormatter.dateTimeFormat.format(s.executionstarttime) + " - " + DateFormatter.timeFormat.format(s.executionendtime)
|
} else {
|
Domain.TASK_STATUS_WAITING
|
}
|
tv_subtask_execute_time.text = executeTime
|
|
tv_subtask_executors.text = s.executorrealtimes.replace(Constant.CONNECTOR, Constant.CONNECTOR_FOR_VIEW)
|
|
//添加 用户类型为“主管部门”或“管理员”,编号为2或0时,按钮iv_startEndTask没有点击事件
|
if (viewModel.userTypeId != Domain.USER_COMPTENT.toByte()
|
// && viewModel.userTypeId != Domain.USER_ADMIN.toByte()
|
) {
|
iv_start_end_task.setOnClickListener(this)
|
} else {
|
iv_start_end_task.alpha = 0.5f
|
}
|
|
refreshTaskButton (s.status)
|
|
startTracking()
|
}
|
|
/**
|
* 根据场景刷新界面
|
*/
|
private fun updateUIByScene(s: Scense) {
|
tv_scense_name.text = s.name
|
tv_scense_type.text = s.type
|
|
val address = s.cityname + s.districtname + " " + s.location
|
tv_scense_address.text = address
|
|
val contact1 = s.contacts ?: "" + " " + s.contactst ?: ""
|
tv_scense_contact1.text = contact1
|
tv_call_contact1.setOnClickListener {
|
//打电话
|
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:${s.contactst}"))
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
startActivity(intent)
|
}
|
|
//将场景位置添加到地图上
|
myLatLngList.add(
|
MyLatLng(
|
LatLng(s.latitude ?: 0.0, s.longitude ?: 0.0),
|
drawableId = R.drawable.icon_mark_skyblue_sel,
|
selected = true
|
)
|
)
|
aMap.animateCamera(
|
CameraUpdateFactory.newCameraPosition(
|
CameraPosition(LatLng(s.latitude, s.longitude), zoomLevel, 0F, 0F)
|
)
|
)
|
}
|
|
/**
|
* 根据问题刷新界面
|
*/
|
private fun updateUIByProblem(ps: ArrayList<ProblemlistVo>) {
|
for (i in ps.indices) {
|
val it = ps[i]
|
val lat = it.latitude ?: viewModel.scene.value?.latitude ?: 0.0
|
val lng = it.longitude ?: viewModel.scene.value?.longitude ?: 0.0
|
myLatLngList.add(
|
MyLatLng(
|
LatLng(lat, lng),
|
snippet = it.guid,
|
drawableId = problemMarkerList[i],
|
selected = true
|
)
|
)
|
}
|
}
|
|
private fun refreshMenuStatus(status: String) {
|
menuList.let {m ->
|
when (status) {
|
Domain.TASK_STATUS_WAITING -> {
|
for (i in m.indices) {
|
if (i <= 7 || i == 12 || i == 13) {
|
m[i].alpha = 0.2F
|
m[i].setOnClickListener(showNeedStartTaskListener())
|
} else {
|
m[i].alpha = 1F
|
m[i].setOnClickListener(this)
|
}
|
}
|
}
|
Domain.TASK_STATUS_RUNNING -> {
|
m.forEach {
|
it.alpha = 1F
|
it.setOnClickListener(this)
|
}
|
}
|
Domain.TASK_STATUS_FINISHED -> {
|
for (i in m.indices) {
|
if (i == 1) {
|
m[i].alpha = 0.2F
|
m[i].isClickable = false
|
} else {
|
m[i].alpha = 1F
|
m[i].setOnClickListener(this)
|
}
|
}
|
}
|
}
|
if (viewModel.userTypeId == Domain.USER_COMPTENT.toByte()) {
|
for (i in m.indices) {
|
when (i) {
|
1, in 3..4, in 7..11 -> {
|
m[i].alpha = 0.2F
|
m[i].isClickable = false
|
}
|
}
|
}
|
}
|
}
|
}
|
|
//向下收缩图标面板
|
private fun hideMenu() {
|
ll_patrol_icons.run {
|
startAnimation(AnimationUtils.loadAnimation(this@InspectionDetailActivity, R.anim.bottom_menu_exit))
|
visibility = View.GONE
|
}
|
|
ll_patrol_show.visibility = View.VISIBLE
|
}
|
|
//向上显示图标面板
|
private fun showMenu() {
|
ll_patrol_icons.run {
|
visibility = View.VISIBLE
|
startAnimation(AnimationUtils.loadAnimation(this@InspectionDetailActivity, R.anim.bottom_menu_enter))
|
}
|
|
ll_patrol_show.visibility = View.GONE
|
}
|
|
//向上收缩任务详情
|
private fun hideTaskDetail() {
|
ll_patrol_task_detail.run {
|
startAnimation(AnimationUtils.loadAnimation(this@InspectionDetailActivity, R.anim.top_menu_exit))
|
visibility = View.GONE
|
}
|
|
}
|
|
//向下显示任务详情
|
private fun showTaskDetail() {
|
ll_patrol_task_detail.run {
|
visibility = View.VISIBLE
|
startAnimation(AnimationUtils.loadAnimation(this@InspectionDetailActivity, R.anim.top_menu_enter))
|
}
|
}
|
|
//显示请开始任务的OnClickListener
|
private fun showNeedStartTaskListener(): View.OnClickListener {
|
return View.OnClickListener {
|
val dialog = AlertDialog.Builder(this)
|
if (viewModel.userTypeId == Domain.USER_COMPTENT.toByte()) {
|
dialog.setTitle("任务还未开始")
|
dialog.setMessage("无可查看的详细信息")
|
} else {
|
dialog.setTitle("请先开始任务")
|
dialog.setMessage("点击界面右上角的'开始'按钮,来开始任务")
|
}
|
dialog.setPositiveButton("确定", null)
|
dialog.show()
|
}
|
}
|
|
private fun startOrEndTaskDialog(status: String?) {
|
if (status == Domain.TASK_STATUS_FINISHED) {
|
return
|
}
|
AlertDialog.Builder(this).apply {
|
when (status) {
|
Domain.TASK_STATUS_WAITING -> {
|
setTitle("要开始任务吗?")
|
// val items = arrayOf("顶层任务", "子任务", "无固定场景巡查任务")
|
// setSingleChoiceItems(items, 0) { _, w ->
|
// needTracking = w == 1
|
// }
|
}
|
Domain.TASK_STATUS_RUNNING -> {
|
setTitle("要结束任务吗?")
|
setMessage("结束任务后问题取证功能将不可用")
|
}
|
}
|
setPositiveButton("确定"){ _, _ ->
|
viewModel.startOrEndTask(status)
|
if (status == Domain.TASK_STATUS_WAITING) {
|
startTracking()
|
}
|
}
|
setNegativeButton("取消", null)
|
}.show()
|
}
|
|
private fun refreshTaskButton(status: String) {
|
when (status) {
|
Domain.TASK_STATUS_WAITING -> {
|
iv_start_end_task.isSelected = false
|
}
|
Domain.TASK_STATUS_RUNNING -> {
|
iv_start_end_task.isSelected = true
|
}
|
Domain.TASK_STATUS_FINISHED -> {
|
iv_start_end_task.isSelected = true
|
}
|
}
|
}
|
|
private fun startTracking() {
|
if (
|
viewModel.subTask.value == null ||
|
viewModel.subTask.value?.status != Domain.TASK_STATUS_RUNNING
|
) return
|
|
//当继续执行正在进行中的任务时,根据是否有历史轨迹记录来判断是否开启
|
needTracking = true
|
|
if (!needTracking || timerTaskRunning) return
|
|
aMap.moveCamera(CameraUpdateFactory.zoomTo(22F))
|
|
val t = aMap.myLocationStyle
|
t.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE)
|
aMap.myLocationStyle = t
|
|
timerTask = object : TimerTask() {
|
override fun run() {
|
if (!timerTaskRunning) {
|
timerTaskRunning = true
|
}
|
|
val lng = round(longitudeCurrent * 1000000) / 1000000
|
val lat = round(latitudeCurrent * 1000000) / 1000000
|
|
viewModel.inspection.value?.apply {
|
if (extension1 == null) {
|
extension1 = "${lng},${lat}"
|
myLatLngList.add(
|
MyLatLng(
|
LatLng(lat, lng),
|
drawableId = R.drawable.icon_mark_start_blue,
|
selected = true
|
)
|
)
|
} else {
|
val last = extension1.split(";").last().split(",").takeIf { it.size == 2 }?.map {
|
it.toDoubleOrNull() ?: 0.0
|
} ?: listOf(lng, lat)
|
val l1 = LatLng(lat, lng)
|
val l2 = LatLng(last[1], last[0])
|
val distance = AMapUtils.calculateLineDistance(l1, l2)
|
if (distance >= 1 && distance < 1000 && lat != 0.0 && lng != 0.0) {
|
extension1 = "${extension1};${lng},${lat}"
|
//道路监测点和道路类型的场景,直接展示轨迹;其余场景只有管理员和政府部门可以查看
|
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))
|
}
|
}
|
}
|
}
|
}
|
}
|
timer.schedule(timerTask, 0, 10000)
|
}
|
|
private fun trackingDone() {
|
if (!timerTaskRunning) return
|
|
aMap.moveCamera(CameraUpdateFactory.zoomTo(zoomLevel))
|
|
val t = aMap.myLocationStyle
|
t.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)
|
aMap.myLocationStyle = t
|
|
timerTaskRunning = false
|
timerTask?.let {
|
it.cancel()
|
viewModel.updateInspection(viewModel.inspection.value)
|
timer.purge()
|
}
|
}
|
|
@Subscribe
|
fun onPutProblem(problemEvent: ProblemEvent) {
|
if (problemEvent.type == null) {
|
viewModel.inspection.value?.let {
|
it.problemcount = if (it.problemcount == null) {
|
1
|
} else {
|
it.problemcount + 1
|
}
|
// fixme: 2020/9/1 此处原本的逻辑是新增一个问题后,同步更新巡查信息中的问题数,错误,应该将此更新操作直接由新增问题接口统一完成
|
viewModel.updateInspection(it)
|
}
|
|
viewModel.inspection.value?.guid?.let {
|
viewModel.getProblems(it)
|
}
|
}
|
}
|
|
@Subscribe(threadMode = ThreadMode.BACKGROUND)
|
fun onUpdateInspection(inspectionEvent: InspectionEvent) {
|
viewModel.updateInspection(inspectionEvent.inspection)
|
}
|
|
//开始导航
|
private fun startNavi() {
|
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?) {
|
when (v?.id) {
|
//底部viewPager隐藏
|
R.id.ll_patrol_hide -> hideMenu()
|
//底部viewPager显示
|
R.id.ll_patrol_show -> showMenu()
|
//顶部详情界面显示隐藏
|
R.id.ll_show_hide_detail -> if (v.isSelected) {
|
hideTaskDetail()
|
v.isSelected = false
|
} else {
|
showTaskDetail()
|
v.isSelected = true
|
}
|
//回退按钮
|
R.id.iv_patrol_back -> finish()
|
//任务开始结束按钮
|
R.id.iv_start_end_task -> startOrEndTaskDialog(viewModel.subTask.value?.status)
|
|
/* 底部菜单按钮 */
|
//问题复核
|
R.id.ln_patrol_problem_recheck -> {
|
val intent = Intent(this, MenuRecheckActivity::class.java).apply {
|
putExtra("subTask", viewModel.subTask.value)
|
putExtra("inspection", viewModel.inspection.value)
|
putExtra("lat", viewModel.scene.value?.latitude)
|
putExtra("lng", viewModel.scene.value?.longitude)
|
}
|
startActivity(intent)
|
}
|
//问题拍照取证
|
R.id.ln_patrol_take_evidence -> {
|
val intent = Intent(this, MenuEvidenceActivity::class.java).apply {
|
putExtra("subTask", viewModel.subTask.value)
|
putExtra("inspection", viewModel.inspection.value)
|
putExtra("scene", viewModel.scene.value)
|
putExtra("lat", latitudeCurrent)
|
putExtra("lng", longitudeCurrent)
|
}
|
startActivity(intent)
|
}
|
//问题清单
|
R.id.ln_patrol_problem_list -> {
|
val intent = Intent(this, MenuProblemListActivity::class.java).apply {
|
putExtra("subTask", viewModel.subTask.value)
|
putExtra("inspection", viewModel.inspection.value)
|
putExtra("scene", viewModel.scene.value)
|
putExtra("lat", viewModel.scene.value?.latitude)
|
putExtra("lng", viewModel.scene.value?.longitude)
|
}
|
startActivity(intent)
|
}
|
//整改清单
|
R.id.ln_patrol_change -> {
|
val intent = Intent(this, MenuChangeActivity::class.java).apply {
|
putExtra("subTask", viewModel.subTask.value)
|
putExtra("inspection", viewModel.inspection.value)
|
putExtra("lat", viewModel.scene.value?.latitude)
|
putExtra("lng", viewModel.scene.value?.longitude)
|
}
|
startActivity(intent)
|
}
|
//任意拍照
|
R.id.ln_patrol_camera -> {
|
val intent = Intent(this, MenuCameraActivity::class.java).apply {
|
putExtra("subTask", viewModel.subTask.value)
|
putExtra("inspection", viewModel.inspection.value)
|
putExtra("scene", viewModel.scene.value)
|
putExtra("lat", latitudeCurrent)
|
putExtra("lng", longitudeCurrent)
|
}
|
startActivity(intent)
|
}
|
//技防措施
|
R.id.ln_patrol_newgit -> {
|
val intent = Intent(this, MenuNewGitActivity::class.java).apply {
|
putExtra("subTask", viewModel.subTask.value)
|
putExtra("inspection", viewModel.inspection.value)
|
putExtra("scene", viewModel.scene.value)
|
putExtra("lat", latitudeCurrent)
|
putExtra("lng", longitudeCurrent)
|
}
|
startActivity(intent)
|
}
|
//整改承诺
|
R.id.ln_patrol_promiss -> {
|
// initPromiss();
|
val calendar = java.util.Calendar.getInstance()
|
calendar.time = viewModel.subTask.value?.getExecutionstarttime()
|
val path = "FlightFeather/Photo/" + viewModel.scene.value?.getDistrictname() + "/" + calendar.get(java.util.Calendar.YEAR) + "年" + (calendar.get(java.util.Calendar.MONTH) + 1) + "月/" + (calendar.get(java.util.Calendar.MONTH) + 1) + "月" + calendar.get(java.util.Calendar.DAY_OF_MONTH) + "日/" + viewModel.scene.value?.getName() + "/签字/"
|
val fileName1 = "签字 " + UUIDGenerator.generateUUID(4) + ".jpg"
|
val mediaFile = Mediafile()
|
mediaFile.guid = UUIDGenerator.generate16ShortUUID()
|
mediaFile.iguid = viewModel.inspection.value?.getGuid()
|
mediaFile.longitude = longitudeCurrent
|
mediaFile.latitude = latitudeCurrent
|
mediaFile.address = "${viewModel.scene.value?.cityname
|
?: ""} + ${viewModel.scene.value?.districtname
|
?: ""} + ${viewModel.scene.value?.townname
|
?: ""} + ${viewModel.scene.value?.location ?: ""}"
|
mediaFile.filetype = 1
|
mediaFile.businesstype = "签字"
|
mediaFile.businesstypeid = 6.toByte()
|
mediaFile.path = path
|
mediaFile.description = fileName1
|
mediaFile.savetime = Date()
|
mediaFile.ischanged = false
|
val exetension1 = viewModel.scene.value?.getCitycode() + "/" + viewModel.scene.value?.getDistrictcode() + "/" + DateFormatter.dateFormat2.format(calendar.time) + "/" + viewModel.scene.value?.getGuid() + "/"
|
mediaFile.extension1 = exetension1
|
mediaFile.remark = "未上传"
|
|
val intent4 = Intent(this, PromiseActivity::class.java)
|
intent4.putExtra("problemlistVoList", viewModel.problemList.value)
|
intent4.putExtra("mediaFilePreData", mediaFile)
|
intent4.putExtra("inspectionCurrent", viewModel.inspection.value)
|
startActivity(intent4)
|
}
|
//综合评分
|
R.id.ln_patrol_rate -> {
|
// fixme: 2020/8/3 此处以徐汇区作为测试,首先使用新的评分规则,之后逐步替换
|
val intentEvaluation = if (viewModel.scene.value?.districtcode == "310104") {
|
Intent(this, MenuGradeActivity::class.java)
|
}else {
|
Intent(this, GradeActivity::class.java)
|
}
|
intentEvaluation.putExtra("inspectionGuid", viewModel.inspection.value?.guid)
|
intentEvaluation.putExtra("subtask", viewModel.subTask.value)
|
intentEvaluation.putExtra("scense", viewModel.scene.value)
|
startActivity(intentEvaluation)
|
}
|
//导航
|
R.id.ln_patrol_navi -> {
|
startNavi()
|
}
|
//修改场景位置
|
R.id.ln_patrol_chose_latlng -> {
|
val intent = Intent(this, MapActivity::class.java)
|
startActivityForResult(intent, REQUEST_CODE_LOCATION)
|
}
|
//修改场景信息
|
R.id.ln_patrol_edit -> {
|
val intent = Intent(this, SceneDetailActivity::class.java)
|
intent.putExtra("mode", 1)
|
intent.putExtra("updateScene", viewModel.scene.value)
|
startActivity(intent)
|
}
|
//一键分享问题
|
R.id.ln_patrol_share -> {
|
if (viewModel.problemList.value.isNullOrEmpty()) {
|
toast("暂无问题, 无需分享")
|
return
|
}
|
val intent = Intent(this, ShareProblemActivity::class.java)
|
intent.putExtra("problemVoList", viewModel.problemList.value)
|
startActivity(intent)
|
}
|
//问题审核
|
R.id.ln_patrol_check -> {
|
val intent = Intent(this, MenuProblemCheckActivity::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)
|
}
|
startActivity(intent)
|
}
|
//整改审核
|
R.id.ln_patrol_change_check -> {
|
val intent = Intent(this, MenuChangeCheckActivity::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)
|
}
|
startActivity(intent)
|
}
|
}
|
}
|
}
|