package com.future.driver.ui.to_city
|
|
import android.os.Bundle
|
import android.os.CountDownTimer
|
import android.os.Handler
|
import android.os.Looper
|
import android.view.Gravity
|
import android.view.View
|
import androidx.recyclerview.widget.LinearLayoutManager
|
import cn.sinata.xldutils.utils.*
|
import com.amap.api.location.AMapLocationListener
|
import com.amap.api.maps.AMap
|
import com.amap.api.maps.model.LatLng
|
import com.amap.api.maps.model.Marker
|
import com.amap.api.maps.model.Polyline
|
import com.amap.api.services.core.LatLonPoint
|
import com.future.driver.R
|
import com.future.driver.base.BaseEvent
|
import com.future.driver.base.MyApplication
|
import com.future.driver.base.MyBaseActivity
|
import com.future.driver.base.gaode.AMapKit
|
import com.future.driver.base.gaode.AMapKit.addMarker
|
import com.future.driver.base.gaode.AMapKit.getIcon
|
import com.future.driver.base.gaode.AMapKit.getTimeType
|
import com.future.driver.base.gaode.AMapKit.initMap
|
import com.future.driver.base.gaode.AMapKit.moveCamera
|
import com.future.driver.base.gaode.gpsnav.GPSNaviActivity
|
import com.future.driver.bean.OrderCityBean
|
import com.future.driver.bean.OrderSimpleData
|
import com.future.driver.netUtls.*
|
import com.future.driver.ui.DialogUtil
|
import com.future.driver.ui.adapter.CityOverMoneyAdapter
|
import com.future.driver.ui.adapter.TripItemAdapter
|
import com.future.driver.ui.main.FillOutActivity
|
import com.future.driver.ui.main.OrderOverActivity
|
import com.future.driver.utils.DateUtil
|
import com.future.driver.utils.MyUtils
|
import com.google.gson.Gson
|
import com.trello.rxlifecycle3.android.ActivityEvent
|
import io.reactivex.Observable
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.disposables.Disposable
|
import io.reactivex.schedulers.Schedulers
|
import kotlinx.android.synthetic.main.activity_trip_city.*
|
import kotlinx.android.synthetic.main.dialog_select_pay_type.view.*
|
import kotlinx.android.synthetic.main.dialog_sure_and_del.view.*
|
import kotlinx.android.synthetic.main.item_city_over.*
|
import kotlinx.android.synthetic.main.item_city_over.view.*
|
import kotlinx.android.synthetic.main.item_map_market.view.*
|
import org.greenrobot.eventbus.EventBus
|
import org.jetbrains.anko.startActivity
|
import org.jetbrains.anko.toast
|
import java.util.*
|
import java.util.concurrent.TimeUnit
|
import kotlin.Comparator
|
|
/***
|
* 跨城 trip页
|
*/
|
class TripCityActivity : MyBaseActivity() {
|
|
/***
|
* // 流程操作状态(3=开始出发预约点,4=到达预约点,5=开始服务,6=服务结束)
|
* 页面一共4个marker 1:预约地点 2:起点 3终点 4:司机点
|
*/
|
val orderType by lazy {
|
intent.getStringExtra("orderType")
|
}
|
|
var orderId = ""
|
|
val tripItemAdapter by lazy {
|
TripItemAdapter()
|
}
|
|
val overAdapter by lazy {
|
CityOverMoneyAdapter()
|
}
|
|
var isTimeStart = false //限制计时器
|
|
var makeMarkerList = mutableListOf<Marker>()
|
var startMarkerList = mutableListOf<Marker>()
|
var endMarkerList = mutableListOf<Marker>()
|
|
var carMarker: Marker? = null
|
var markerLine: Polyline? = null
|
lateinit var aMap: AMap
|
lateinit var orderBean: OrderCityBean
|
lateinit var currentOrderBean: OrderCityBean.CityDataBean //当前订单
|
var currentPositionOrder = 0 //订单下标
|
|
override fun setContentView() {
|
setContentView(R.layout.activity_trip_city)
|
}
|
|
override fun initView() {
|
setTitleText("已完成")
|
tv_Right.text = "申请改派"
|
orderId = intent.getStringExtra("orderId")
|
|
MyApplication.recordOrderId = orderId
|
MyApplication.recordOrderType = orderType
|
|
recycler_view_order_list.layoutManager = LinearLayoutManager(this)
|
recycler_view_order_list.adapter = tripItemAdapter
|
callOrder()
|
initMineLocation()
|
onclick()
|
addSockectCancel()
|
MyApplication.getInstance()!!.initUpPoint()
|
}
|
|
private fun addSockectCancel() {
|
checkOrderStatue()
|
MyApplication.addOrderView(qeeOrderView)
|
}
|
|
var qeeOrderView = object : MyApplication.OrderStatueView {
|
override fun orderInfo(data: OrderSimpleData?) {
|
data?.let {
|
when(it.orderType){
|
1,2,3 -> {
|
if (it.status == 10 || it.status == 12) {
|
removeItem(it.orderId.toString())
|
Handler(Looper.getMainLooper()).post {
|
MyApplication.getTTsManager().setVideoText("有用户订单被取消或改派")
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
|
var handler: Handler? = null
|
fun checkOrderStatue() {
|
var map = getMapByAny()
|
map["orderId"] = orderId
|
map["orderType"] = orderType
|
callNet(false, Api.orderStateSocket, map) {
|
val orderSimpleData =
|
Gson().fromJson(
|
it,
|
OrderSimpleData::class.java
|
)
|
orderSimpleData?.let {
|
if (it.status == 10 || it.status == 12) {
|
removeItem(it.orderId.toString())
|
Handler(Looper.getMainLooper()).post {
|
MyApplication.getTTsManager().setVideoText("有用户订单被取消或改派")
|
}
|
}
|
}
|
|
}
|
handler?.postDelayed({ checkOrderStatue() }, 3000)
|
}
|
|
|
override fun onBackPressed() {
|
EventBus.getDefault().post(BaseEvent(BaseEvent.UPDATA_MAIN_CAR))
|
MyApplication.removeOrderView(qeeOrderView)
|
super.onBackPressed()
|
}
|
|
override fun finish() {
|
MyApplication.removeOrderView(qeeOrderView)
|
EventBus.getDefault().post(BaseEvent(BaseEvent.UPDATA_MAIN_CAR))
|
super.finish()
|
}
|
|
|
private fun onclick() {
|
tv_Right.clickDelay {
|
startActivity<SelectPeopleActivity>(
|
"orderId" to orderId,
|
"orderType" to orderType
|
)
|
}
|
iv_change_list.clickDelay {
|
if (tripItemAdapter.data.size > 0) {
|
tripItemAdapter.isShowAll = !tripItemAdapter.isShowAll
|
tripItemAdapter.notifyDataSetChanged()
|
if (tripItemAdapter.isShowAll) {
|
iv_change_list.rotationX = 180f
|
} else {
|
iv_change_list.rotationX = 0f
|
}
|
}
|
|
}
|
iv_move.setOnClickListener {
|
currentOrderBean.let {
|
when (it.orderState) {
|
2, 3 -> {
|
moveCamera(
|
aMap,
|
getMakeById(
|
makeMarkerList,
|
it.orderId.toString()
|
)!!.position,
|
carMarker!!.position
|
)
|
}
|
4 -> {
|
moveCamera(aMap, carMarker!!.position)
|
}
|
5, 6 -> {
|
moveCamera(
|
aMap,
|
carMarker!!.position,
|
getMakeById(endMarkerList, it.orderId.toString())!!.position
|
)
|
}
|
}
|
}
|
}
|
|
iv_police.clickDelay {
|
orderBean.let {
|
MyUtils.getInstans().CallPhone(this, it.data.emergencyCall)
|
}
|
}
|
iv_to_gd.clickDelay {
|
currentOrderBean.let {
|
when (it.orderState) {
|
2, 3 -> {
|
// startAMapNavi(makeMarker!!)
|
startActivity<GPSNaviActivity>(
|
"start" to carMarker!!.position,
|
"end" to getMakeById(makeMarkerList, it.orderId.toString())!!.position
|
)
|
}
|
|
4 -> {
|
showToast("没有终点,无法导航")
|
}
|
|
5, 6 -> {
|
// startAMapNavi(endMarker!!)
|
startActivity<GPSNaviActivity>(
|
"start" to carMarker!!.position,
|
"end" to getMakeById(endMarkerList, it.orderId.toString())!!.position
|
)
|
}
|
}
|
}
|
}
|
|
slide_btn.onSwipeListener = {
|
currentOrderBean.let {
|
when (it.orderState) {
|
2, 3, 4 -> {
|
it.orderState++
|
callStatue(it.orderState,{
|
tripItemAdapter.notifyDataSetChanged()
|
showStatueMapUI(it)
|
if (it.orderState == 5){
|
changeTopOrder()
|
}
|
}) {
|
it.orderState--
|
}
|
return@let
|
}
|
5, 6 -> {
|
if (haveGoing()){
|
toast("还有未上车的乘客")
|
return@let
|
}
|
tripItemAdapter.data[currentPositionOrder].orderState = 6
|
tripItemAdapter.notifyDataSetChanged()
|
when (orderType) {
|
"3" -> {
|
var isAllOver = getIsOver() //是否所有子订单都完成了
|
if (isAllOver) {
|
//去订单完成页面
|
callStatue(it.orderState,{
|
allOver()
|
}) {
|
|
}
|
} else {
|
callStatue(it.orderState,{
|
currentPositionOrder++
|
changeCurrentOrder(currentPositionOrder)
|
}) {
|
|
}
|
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
|
/***
|
* 是否有没上车的客户
|
*/
|
private fun haveGoing(): Boolean {
|
var have = false
|
orderBean?.let {
|
for (item in it.data.orders){
|
if (item.orderState <= 4){
|
have = true
|
}
|
}
|
}
|
return have
|
}
|
|
/***
|
* 全部完成 走流程
|
*/
|
private fun allOver() {
|
if (tripItemAdapter.data.size == 0) {
|
toast("订单已取消")
|
onBackPressed()
|
} else {
|
if(isAllChange()){
|
onBackPressed()
|
return
|
}
|
tv_Right.gone()
|
setTitleText("已完成")
|
map_view.gone()
|
slide_btn.gone()
|
iv_move.gone()
|
iv_to_gd.gone()
|
cl_over_view.visible()
|
EventBus.getDefault().post(BaseEvent(BaseEvent.FINISH_RECORD))
|
recycler_view_money.layoutManager = LinearLayoutManager(this)
|
recycler_view_money.adapter = overAdapter
|
orderBean?.let {
|
tv_money_pint.text = it.data.serverMoney.toString()+"元"
|
}
|
overAdapter.data.addAll(orderBean.data.orders)
|
overAdapter.notifyDataSetChanged()
|
tv_all_money_num.text = "¥"+getAllByOrder()
|
}
|
}
|
|
//全部是改派
|
private fun isAllChange(): Boolean {
|
var b = true
|
for (item in tripItemAdapter.data){
|
if (item.orderState != 11){
|
b = false
|
}
|
}
|
return b
|
}
|
|
private fun showRecordDialog(){
|
val onlySureDialog = DialogUtil.getOnlySureDialog(this, "即将开始行程,\n行程中平台自动开启录音") {}
|
val view = DialogUtil.getView(onlySureDialog)
|
view.tv_view_two_base.gravity = Gravity.CENTER
|
view.view_hint_close_base.visibility = View.INVISIBLE
|
view.tv_count_timer.visible()
|
val timer = object: CountDownTimer(3000, 1000){
|
override fun onTick(millisUntilFinished: Long) {
|
view.tv_count_timer.text = "${(millisUntilFinished/1000)+1}S"
|
}
|
|
override fun onFinish() {
|
view.tv_sure_base.callOnClick()
|
}
|
}.start()
|
onlySureDialog.setOnDismissListener {
|
timer.cancel()
|
}
|
EventBus.getDefault().post(BaseEvent(BaseEvent.START_RECORD))
|
}
|
|
private fun getAllByOrder(): String? {
|
var num = 0.0
|
for (item in tripItemAdapter.data) {
|
num += item.payMoney
|
}
|
return doubleTwo(num)
|
}
|
|
|
private fun getMakeById(data: List<Marker>, toString: String): Marker? {
|
for (item in data) {
|
if (item.`object`.toString() == toString) {
|
return item
|
}
|
}
|
return null
|
}
|
|
private fun getIsOver(): Boolean {
|
var b = true
|
for (item in tripItemAdapter.data) {
|
if (item.orderState < 6) {
|
b = false
|
}
|
}
|
return b
|
}
|
|
private fun callStatue(i: Int, click: () -> Unit, clickFail: () -> Unit) {
|
var map = getMapByAny()
|
map["orderId"] = orderId
|
map["orderType"] = orderType
|
map["state"] = i
|
map["lat"] = MyApplication.getLocation().latitude
|
map["lon"] = MyApplication.getLocation().longitude
|
callNet(Api.process, map,{
|
click()
|
}) {
|
clickFail()
|
}
|
}
|
|
|
private fun showMoneyTypeDialog() {
|
var pop = DialogUtil.getPopupwindow(this, R.layout.dialog_select_pay_type)
|
var payType = 1 //支付方式(1=快运平台收款,2=其他方式收款)
|
pop.showDown(window.decorView)
|
pop.contentView.tv_cancel.setOnClickListener {
|
pop.dismiss()
|
}
|
pop.contentView.tv_ok.setOnClickListener {
|
pop.dismiss()
|
if (payType == 1) {
|
callStatue(6,{
|
startActivity<FillOutActivity>("orderId" to orderId, "orderType" to orderType)
|
finish()
|
}) {
|
|
}
|
} else {
|
DialogUtil.getDelAndSureDialog(this, "请确定是否收款?", {}, {
|
pop.dismiss()
|
val map = getMapByAny()
|
map["orderId"] = orderId
|
map["orderType"] = orderType
|
map["type"] = payType
|
callStatue(6,{
|
callNet(Api.confirmFees, map) {
|
finish()
|
startActivity<OrderOverActivity>(
|
"orderId" to orderId,
|
"orderType" to orderType
|
)
|
}
|
}) {
|
|
}
|
})
|
}
|
}
|
pop.contentView.tv_select_ok.setOnClickListener {
|
pop.contentView.tv_select_ok.alpha = 1f
|
pop.contentView.tv_select_ok.textSize = 16f
|
pop.contentView.tv_select_or.alpha = 0.6f
|
pop.contentView.tv_select_or.textSize = 14f
|
payType = 1
|
}
|
pop.contentView.tv_select_or.setOnClickListener {
|
pop.contentView.tv_select_ok.alpha = 0.6f
|
pop.contentView.tv_select_ok.textSize = 14f
|
pop.contentView.tv_select_or.alpha = 1f
|
pop.contentView.tv_select_or.textSize = 16f
|
payType = 2
|
}
|
}
|
|
|
/***
|
* 定位时司机与线路的改变
|
*/
|
private fun initMineLocation() {
|
AMapKit.initLocation(this, AMapLocationListener {
|
it?.let {
|
MyApplication.aMapLocation = it
|
carMarker!!.position = LatLng(it.latitude, it.longitude)
|
}
|
currentOrderBean.let {
|
when (it.orderState) {
|
2, 3 -> {
|
changeCarThree(false)
|
}
|
5, 6 -> {
|
changeCarFive(false)
|
}
|
}
|
}
|
})
|
}
|
|
private fun changeCarThree(isMove: Boolean) {
|
if (makeMarkerList.isNotEmpty() && carMarker != null) {
|
AMapKit.initRouteLine(
|
this,
|
carMarker!!.position,
|
getMakeById(makeMarkerList, currentOrderBean.orderId.toString())!!.position,
|
getAllMarkPointStartByCurrent(),
|
object : (MutableList<LatLng>, Float, Long) -> Unit {
|
override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
|
setCarMarkerText("距预约点" + AMapKit.getTance(p2))
|
addline(p1)
|
if (isMove)
|
moveCamera(
|
aMap,
|
getMakeById(
|
makeMarkerList,
|
currentOrderBean.orderId.toString()
|
)!!.position,
|
carMarker!!.position
|
)
|
}
|
})
|
}
|
}
|
|
/***
|
* 获取除当前订单外的所有开始点列表
|
*/
|
private fun getAllMarkPointStartByCurrent(): List<LatLonPoint>? {
|
var list = mutableListOf<LatLonPoint>()
|
for (item in tripItemAdapter.data) {
|
if (item != currentOrderBean) {
|
var latLonPoint = LatLonPoint(item.startLat, item.startLon)
|
list.add(latLonPoint)
|
}
|
}
|
return list
|
}
|
|
fun setCarMarkerText(text: String) {
|
var view = creatCarView(text)
|
carMarker!!.setIcon(getIcon(view))
|
}
|
|
private fun changeCarFive(isMove: Boolean) {
|
if (carMarker != null && endMarkerList.isNotEmpty()) {
|
AMapKit.initRouteLine(
|
this,
|
carMarker!!.position,
|
getMakeById(endMarkerList, currentOrderBean.orderId.toString())!!.position,
|
object : (MutableList<LatLng>, Float, Long) -> Unit {
|
override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
|
addline(p1)
|
var view =
|
creatCarView("剩余" + AMapKit.getTance(p2) + "\n" + "预计还需" + p3.toInt() + "分钟")
|
carMarker!!.setIcon(getIcon(view))
|
if (isMove) {
|
moveCamera(
|
aMap,
|
carMarker!!.position,
|
getMakeById(
|
endMarkerList,
|
currentOrderBean.orderId.toString()
|
)!!.position
|
)
|
}
|
}
|
})
|
}
|
}
|
|
fun callOrder() {
|
var map = getMapByAny()
|
map["orderId"] = orderId
|
callNet(Api.queryCityOrderInfo, map) {
|
orderBean = gson.fromJson(it, OrderCityBean::class.java)
|
// orderBean.data.orders.sortWith(MyComparator())
|
tv_line.text = orderBean.data.line
|
tv_people_num.text = orderBean.data.peopleNumber.toString() + "人"
|
tripItemAdapter.data.clear()
|
tripItemAdapter.data.addAll(orderBean.data.orders)
|
tripItemAdapter.notifyDataSetChanged()
|
var firstPosition = getstartPosition(6)
|
if (firstPosition == -1){
|
onBackPressed()
|
toast("暂无订单")
|
return@callNet
|
}
|
changeCurrentOrder(firstPosition)
|
if (getIsOver()) {
|
allOver()
|
}
|
}
|
}
|
|
class MyComparator : Comparator<OrderCityBean.CityDataBean> {
|
override fun compare(
|
o1: OrderCityBean.CityDataBean?,
|
o2: OrderCityBean.CityDataBean?
|
): Int {
|
if (o1!!.orderState > o2!!.orderState) {
|
return -1
|
} else {
|
return 1
|
}
|
}
|
}
|
|
/***
|
* 获取订单中首个状态小于 statue 的订单位置
|
*/
|
private fun getstartPosition(statue:Int): Int {
|
for (position in tripItemAdapter.data.indices) {
|
var item = tripItemAdapter.data[position]
|
if (item.orderState < statue) {
|
return position
|
}
|
}
|
return tripItemAdapter.data.size - 1
|
}
|
|
private fun showUi(orderBean: OrderCityBean.CityDataBean?) {
|
orderBean?.let {
|
showStatueMapUI(it)
|
}
|
}
|
|
private fun getAllMark() {
|
if (makeMarkerList.isNullOrEmpty()) {
|
for (position in tripItemAdapter.data.indices) {
|
//add makeMarker
|
var item = tripItemAdapter.data[position]
|
val view = createView(R.layout.item_map_market_make, this)
|
view.iv_img.setImageResource(R.mipmap.trip_yuyue)
|
view.tv_hint.text = "预约点" + (position + 1).toString()
|
var makeMarker =
|
addMarker(aMap, item.startLat, item.startLon, view, item.orderId.toString())
|
makeMarker!!.isVisible = true
|
makeMarkerList.add(makeMarker!!)
|
|
// val viewStart = createView(R.layout.item_map_market, this)
|
// viewStart.iv_img.setImageResource(R.mipmap.starting_point)
|
// var startMarker =
|
// addMarker(aMap, item.startLat, item.startLon, viewStart, item.orderId.toString())
|
// startMarker!!.isVisible = false
|
// startMarkerList.add(startMarker!!)
|
|
val viewEnd = createView(R.layout.item_map_market, this)
|
viewEnd.iv_img.setImageResource(R.mipmap.end_point)
|
viewEnd.tv_hint.text = "终点" + (position + 1).toString()
|
viewEnd.tv_hint.visible()
|
var endMarker =
|
addMarker(aMap, item.endLat, item.endLon, viewEnd, item.orderId.toString())
|
endMarker!!.isVisible = true
|
endMarkerList.add(endMarker!!)
|
}
|
startMarkerList = makeMarkerList
|
} else {
|
for (position in makeMarkerList.indices) {
|
var item = makeMarkerList[position]
|
// setMakeMarkerText("预约点"+(position+1).toString(),item)
|
item.isVisible = false
|
}
|
for (position in startMarkerList.indices) {
|
var item = makeMarkerList[position]
|
item.isVisible = true
|
}
|
for (position in endMarkerList.indices) {
|
var item = makeMarkerList[position]
|
item.isVisible = true
|
}
|
}
|
if (carMarker == null) {
|
val carView = creatCarView("")
|
carMarker = addMarker(
|
aMap,
|
MyApplication.getLocation().latitude,
|
MyApplication.getLocation().longitude,
|
carView,
|
""
|
)
|
}
|
carMarker!!.isVisible = false
|
if (markerLine != null) {
|
markerLine!!.isVisible = false
|
}
|
}
|
|
fun setMakeMarkerText(text: String, marker: Marker) {
|
var view = createMarkView(text)
|
marker!!.setIcon(getIcon(view))
|
}
|
|
fun creatCarView(content: String): View {
|
val carView = createView(R.layout.item_map_market, this)
|
carView.iv_img.setImageResource(R.mipmap.car_trip)
|
carView.tv_hint.visible()
|
carView.tv_hint.text = content
|
return carView
|
}
|
|
fun createMarkView(content: String): View {
|
val view = createView(R.layout.item_map_market_make, this)
|
view.iv_img.setImageResource(R.mipmap.trip_yuyue)
|
view.tv_hint.text = content
|
return view
|
}
|
|
fun creatCarViewHint(content: String): View {
|
val carView = createView(R.layout.item_map_market, this)
|
carView.iv_img.setImageResource(R.mipmap.car_trip)
|
carView.tv_hint.visible()
|
carView.tv_hint.setColorBuild(this, content, R.color.main_yellow, 4, content.length)
|
return carView
|
}
|
|
// 流程操作状态(3=开始出发预约点,4=到达预约点,5=开始服务,6=服务结束)
|
private fun showStatueMapUI(it: OrderCityBean.CityDataBean) {
|
getAllMark()
|
var orderPosition = (currentPositionOrder + 1).toString()
|
when (it.orderState) {
|
2, 3 -> {
|
if (it.reassign == 1) {
|
tv_Right.visible()
|
}
|
iv_to_gd.visible()
|
// var marker = getMakeById(makeMarkerList, currentOrderBean.orderId.toString())
|
// marker?.isVisible = true
|
allMarkVisible()
|
carMarker?.isVisible = true
|
changeCarThree(true)
|
closeTimeStart()
|
if (it.orderState == 2) {
|
slide_btn.changeButtonText("出发前往预约点$orderPosition")
|
setTitleText("准备出发")
|
} else {
|
slide_btn.changeButtonText("到达预约地点$orderPosition")
|
setTitleText("去接客户")
|
}
|
}
|
4 -> {
|
iv_to_gd.gone()
|
if (it.reassign == 1) {
|
}
|
closeLine()
|
carMarker?.isVisible = true
|
startTimeStart(
|
((System.currentTimeMillis() - DateUtil.dateToStamp(
|
DateUtil.TYPE0,
|
it.waitTime
|
)) / 1000).toInt()
|
)
|
moveCamera(aMap, carMarker!!.position)
|
setTitleText("等待客户")
|
slide_btn.changeButtonText("乘客" + orderPosition + "已上车")
|
|
}
|
5, 6 -> {
|
closeTimeStart()
|
iv_to_gd.visible()
|
allStartVisible()
|
allEndVisible()
|
// getMakeById(startMarkerList, currentOrderBean.orderId.toString())!!.isVisible = true
|
// getMakeById(endMarkerList, currentOrderBean.orderId.toString())!!.isVisible = true
|
carMarker?.isVisible = true
|
changeCarFive(true)
|
setTitleText("服务中")
|
slide_btn.changeButtonText("送达乘客$orderPosition")
|
if (!MyApplication.isRecording)
|
EventBus.getDefault().post(BaseEvent(BaseEvent.START_RECORD))
|
}
|
}
|
}
|
|
private fun allMarkVisible() {
|
for (item in makeMarkerList) {
|
item.isVisible = true
|
}
|
}
|
|
private fun allStartVisible() {
|
for (item in startMarkerList) {
|
item.isVisible = true
|
}
|
}
|
|
private fun allEndVisible() {
|
for (item in endMarkerList) {
|
item.isVisible = true
|
}
|
}
|
|
private fun startTimeStart(waitTime: Int) {
|
if (!isTimeStart) {
|
isTimeStart = true
|
refreshTime(waitTime) {
|
var view = creatCarViewHint("您已等待" + getTimeType(it))
|
carMarker!!.setIcon(getIcon(view))
|
}
|
}
|
}
|
|
private var timeDisposable: Disposable? = null
|
|
private fun refreshTime(waitTime: Int, click: (num: Int) -> Unit) {
|
if (null != timeDisposable && !timeDisposable!!.isDisposed) {
|
timeDisposable!!.dispose()
|
}
|
timeDisposable = Observable
|
.interval(1, TimeUnit.SECONDS)
|
.take(100000000)
|
.subscribeOn(Schedulers.computation())
|
.observeOn(AndroidSchedulers.mainThread())
|
.compose(bindUntilEvent(ActivityEvent.DESTROY))
|
.subscribe { aLong ->
|
var num = waitTime + aLong
|
click(num.toInt())
|
}
|
}
|
|
private fun closeTimeStart() {
|
if (timeDisposable != null) {
|
timeDisposable!!.dispose()
|
}
|
}
|
|
override fun onDestroy() {
|
super.onDestroy()
|
if (handler != null) {
|
handler?.removeCallbacksAndMessages(null)
|
}
|
closeTimeStart()
|
}
|
|
|
private fun addline(allLine: MutableList<LatLng>) {
|
closeLine()
|
markerLine = AMapKit.drawLine(this, aMap, allLine)
|
}
|
|
fun closeLine() {
|
if (markerLine != null) {
|
markerLine!!.remove()
|
}
|
}
|
|
fun getTance(startLatLng: LatLng, endLatLng: LatLng, onclick: (tance: Float) -> Unit) {
|
AMapKit.initRouteLine(
|
this,
|
startLatLng,
|
endLatLng,
|
object : (MutableList<LatLng>, Float, Long) -> Unit {
|
override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
|
onclick(p2)
|
}
|
})
|
}
|
|
override fun setOnclick() {
|
|
}
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
aMap = initMap(savedInstanceState, map_view)
|
}
|
|
override fun onEventMainThread(event: BaseEvent?) {
|
super.onEventMainThread(event)
|
when (event!!.code) {
|
BaseEvent.REAGASSIGN_SUCCESS -> {
|
callOrder()
|
}
|
BaseEvent.BACK_CAR_OVER -> {
|
finish()
|
}
|
BaseEvent.CITY_CHANGE_ORDER -> {
|
if (tripItemAdapter.data[event.type] != currentOrderBean) {
|
changeCurrentOrder(event.type)
|
}
|
}
|
}
|
}
|
|
|
/***
|
* 当某个订单跑到已上车 其他订单自动顶上
|
*/
|
fun changeTopOrder(){
|
var currentOrderTop = ""
|
var currentOrderTopPosition = -1
|
var order: OrderCityBean.CityDataBean? = null
|
orderBean?.let {
|
for (item in it.data.orders.indices){
|
if (it.data.orders[item].orderState <= 4){
|
order = it.data.orders[item]
|
currentOrderTop = order!!.orderId.toString()
|
currentOrderTopPosition = item
|
}
|
}
|
}
|
if (currentOrderTop.isNotEmpty()){
|
callChangeLocation(currentOrderTop) {
|
tripItemAdapter.data.removeAt(currentOrderTopPosition)
|
tripItemAdapter.data.add(getstartPosition(6), order)
|
changeCurrentOrder(getstartPosition(6))
|
tripItemAdapter.notifyDataSetChanged()
|
MyApplication.getTTsManager().setVideoText("去接下一位乘客"+order!!.nickName)
|
}
|
}
|
}
|
|
|
fun changeCurrentOrder(position: Int) {
|
// toast("切换当前position是$position")
|
currentOrderBean = tripItemAdapter.data[position]
|
currentPositionOrder = position
|
clearAllMarker()
|
showStatueMapUI(currentOrderBean)
|
setCurrentApplication()
|
}
|
|
private fun setCurrentApplication() {
|
MyApplication.currentOrderId = currentOrderBean.orderId.toString()
|
MyApplication.currentOrderType = orderType
|
orderId = currentOrderBean.orderId.toString()
|
}
|
|
private fun removeItem(orderId: String?) {
|
Handler(Looper.getMainLooper()).post {
|
for (position in tripItemAdapter.data.indices) {
|
var item = tripItemAdapter.data[position]
|
if (item.orderId.toString() == orderId) {
|
tripItemAdapter.data.removeAt(position)
|
tripItemAdapter.notifyDataSetChanged()
|
if (getIsOver()) {
|
allOver()
|
} else {
|
callOrder()
|
}
|
return@post
|
}
|
}
|
}
|
|
}
|
|
private fun clearAllMarker() {
|
for (item in makeMarkerList) {
|
item.remove()
|
}
|
for (item in endMarkerList) {
|
item.remove()
|
}
|
makeMarkerList.clear()
|
endMarkerList.clear()
|
}
|
|
|
private fun callChangeLocation(orderId: String, function: () -> Unit) {
|
var map = getMapByAny()
|
map["orderId"] = orderId
|
callNet(this, Api.setOrderCrossCitySort, map) {
|
function()
|
}
|
}
|
|
}
|