package com.fuban.user.ui.crosscity
|
|
import android.app.Activity
|
import android.content.Intent
|
import android.view.View
|
import androidx.core.os.bundleOf
|
import cn.sinata.xldutils.utils.*
|
import com.fuban.user.FBApplication
|
import com.fuban.user.R
|
import com.fuban.user.interfaces.StringCallback
|
import com.fuban.user.network.HttpManager
|
import com.fuban.user.network.entity.DriverInfo
|
import com.fuban.user.network.entity.Line
|
import com.fuban.user.network.entity.Shift
|
import com.fuban.user.network.request
|
import com.fuban.user.ui.TransparentStatusBarActivity
|
import com.fuban.user.dialog.H5Dialog
|
import com.fuban.user.dialog.PassengerDialog
|
import com.fuban.user.dialog.SeatDialog
|
import com.fuban.user.utils.Const
|
import kotlinx.android.synthetic.main.activity_target_cross_order.*
|
import org.jetbrains.anko.sdk27.coroutines.onClick
|
import org.jetbrains.anko.startActivity
|
import org.jetbrains.anko.startActivityForResult
|
|
|
class TargetCrossOrderActivity : TransparentStatusBarActivity() {
|
override fun setContentView() = R.layout.activity_target_cross_order
|
|
private val driver by lazy {
|
intent.getParcelableExtra<DriverInfo>("driver")
|
}
|
private var startId:Int? = null //出发站点
|
private var endId:Int? = null //到达站点
|
private var startCity = ""
|
private var endCity = ""
|
private var line :Line? = null
|
private var shift :Shift? = null
|
|
private var passengerCount = 0//乘客数
|
private var passengers = "" //乘车人ids
|
private var startLat = 0.0
|
private var startLon = 0.0
|
private var endLat = 0.0
|
private var endLon = 0.0
|
private var distance = 0.0 //预估距离,通过价格接口获取
|
|
private val remarks by lazy {
|
arrayOf(remark_1,remark_2,remark_3,remark_4)
|
}
|
|
override fun initClick() {
|
tv_start_city.onClick {
|
startActivityForResult<ChooseCityActivity>(Const.RequestCode.START_SITE)
|
}
|
tv_end_city.onClick {
|
if (startId != null)
|
startActivityForResult<ChooseCityActivity>(Const.RequestCode.END_SITE,"startId" to startId)
|
else
|
myToast("请先选择起点")
|
}
|
tv_shift.onClick {
|
if (line != null)
|
startActivityForResult<ShiftActivity>(Const.RequestCode.CROSS_SHIFT,"data" to line, "driverId" to driver.id)
|
else
|
myToast("请先选择线路")
|
}
|
rg_whole.setOnCheckedChangeListener { group, checkedId ->
|
gp_seat.visibility = if (checkedId == R.id.rb_whole) View.GONE else View.VISIBLE
|
getPrice()
|
}
|
tv_start.onClick {
|
getAnchors(true)
|
}
|
|
tv_end.onClick {
|
getAnchors(false)
|
}
|
tv_passenger_num.onClick {
|
if (shift!=null){
|
val passengerCountDialog = PassengerDialog()
|
passengerCountDialog.arguments = bundleOf("max" to shift?.laveSeat)
|
passengerCountDialog.setCallback(object : PassengerDialog.Callback{
|
override fun onOk(num: Int,ids:String) {
|
passengers = ids
|
if (num!=passengerCount){ //人数发生变换,重新选座,算价
|
tv_seat.text = ""
|
passengerCount = num
|
tv_passenger_num.text = "${num}人"
|
getPrice()
|
}
|
}
|
})
|
passengerCountDialog.show(supportFragmentManager,"num")
|
}else
|
myToast("请先选择班次")
|
}
|
tv_seat.onClick {
|
getSeatInfo()
|
}
|
tv_action.onClick{
|
if (!checkLogin())
|
return@onClick
|
if (line == null){
|
myToast("请选择线路")
|
return@onClick
|
}
|
if (shift == null){
|
myToast("请选择班次")
|
return@onClick
|
}
|
if (startLat == 0.0){
|
myToast("请选择上车点")
|
return@onClick
|
}
|
if (endLat == 0.0){
|
myToast("请选择下车点")
|
return@onClick
|
}
|
if (rb_pin.isChecked&&tv_seat.text.isEmpty()){
|
myToast("请选择座位")
|
return@onClick
|
}
|
tv_action.isEnabled = false
|
HttpManager.getH5(11).request(this@TargetCrossOrderActivity,success = {_,data->
|
tv_action.isEnabled = true
|
data?.apply {
|
val h5Dialog = H5Dialog()
|
h5Dialog.arguments = bundleOf("title" to "《直通车乘车须知》","content" to optString("content"))
|
h5Dialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
makeOrder()
|
}
|
})
|
h5Dialog.show(supportFragmentManager,"h5")
|
}
|
}){_,_->
|
tv_action.isEnabled = true
|
}
|
}
|
}
|
|
override fun initView() {
|
title = "确认班次"
|
driver.run {
|
iv_avatar.setImageURI(avatar)
|
tv_name.text = "$name $licensePlate"
|
tv_car_info.text = "$brand·$carColor"
|
tv_score.text = String.format("%.1f", fraction)
|
}
|
}
|
|
/**
|
* 查询线路
|
*/
|
private fun queryLine(){
|
showDialog()
|
HttpManager.queryLines(startId!!,endId!!).request(this,success = { _, data->
|
data?.apply {
|
when(size){
|
0-> {
|
myToast("没有可用线路,请重新选择")
|
endId = null
|
tv_end_city.text = ""
|
}
|
1-> line = this[0]
|
else->{
|
startActivityForResult<ChooseLineActivity>(Const.RequestCode.CROSS_LINE,"data" to this,"isScan" to true)
|
}
|
}
|
}
|
}){_,_->
|
endId = null
|
tv_end_city.text = ""
|
}
|
}
|
|
/**
|
* 查询有效范围
|
*/
|
private fun getAnchors(isStart:Boolean){
|
if (shift!=null){
|
showDialog()
|
HttpManager.queryLocation(if (isStart) startId!! else endId!!).request(this){_,data->
|
startActivityForResult<ChooseMapPositionActivity>(if (isStart) Const.RequestCode.START_ADDRESS else Const.RequestCode.END_ADDRESS,
|
"isStart" to isStart,"city" to if (isStart) startCity else endCity,"siteId" to if (isStart) startId else endId,
|
"data" to data)
|
}
|
}else{
|
myToast("请先选择班次")
|
}
|
}
|
|
private fun getSeatInfo(){
|
if (shift != null){
|
showDialog()
|
HttpManager.querySeat(shift!!.lineShiftDriverId).request(this){_,data->
|
data?.apply {
|
val seatDialog = SeatDialog()
|
seatDialog.arguments = bundleOf("max" to totalNumber,"seat" to content,"count" to passengerCount)
|
seatDialog.setCallback(object : StringCallback {
|
override fun onRlt(rlt: String) {
|
tv_seat.text = rlt
|
getPrice()
|
}
|
})
|
seatDialog.show(supportFragmentManager,"seat")
|
}
|
}
|
}else
|
myToast("请先选择班次")
|
}
|
|
/**
|
* 计算预估价格
|
*/
|
private fun getPrice(){
|
if (line!=null&&shift!=null&&startLat!=0.0&&endLat!=0.0&&(tv_seat.text.isNotEmpty()||rb_whole.isChecked))
|
HttpManager.queryOrderMoney(line!!.id,"$startLon,$startLat","$endLon,$endLat",passengerCount,tv_seat.text.toString(),
|
if (rb_whole.isChecked) 2 else 1,shift!!.serverCarModelId,shift!!.totalSeat).request(this){_,data->
|
data?.apply {
|
tv_money.text = SpanBuilder(String.format("预估金额:¥%.2f",optDouble("price"))).color(this@TargetCrossOrderActivity,0,5,R.color.black)
|
.size(0,5,13).build()
|
distance = optDouble("distance")
|
}
|
}
|
else
|
tv_money.text = SpanBuilder("预估金额:¥--").color(this,0,5,R.color.black)
|
.size(0,5,13).build()
|
}
|
|
private fun makeOrder() {
|
showDialog()
|
HttpManager.orderCrossCity(shift!!.carId,
|
line!!.id,
|
shift!!.lineShiftDriverId,
|
shift!!.driverId,
|
distance,
|
2,
|
startLat,
|
startLon,
|
endLat,
|
endLon,
|
tv_shift.text.toString() + ":00",
|
FBApplication.lat,
|
FBApplication.lon,
|
tv_start.text.toString(),
|
tv_end.text.toString(),
|
FBApplication.address,
|
remarks.filter { it.isChecked }.joinToString(",") { it.text },
|
passengerCount,
|
tv_seat.text.toString(),passengers,
|
if (rb_whole.isChecked) 2 else 1,
|
shift!!.serverCarModelId,
|
shift!!.totalSeat
|
).request(this){ _, data ->
|
// startActivity<MainActivity>()
|
setResult(Activity.RESULT_OK)
|
startActivity<PayCrossActivity>("id" to data?.optInt("id"))
|
finish()
|
}
|
}
|
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
if (resultCode == Activity.RESULT_OK&&data!=null){
|
when (requestCode) {
|
Const.RequestCode.START_SITE -> {
|
startId = data.getIntExtra("id",0)
|
startCity = data.getStringExtra("city")?:""
|
tv_start_city.text = data.getStringExtra("name")
|
endId = null
|
tv_end.text = ""
|
line = null
|
shift = null
|
tv_shift.text = ""
|
tv_start.text = ""
|
tv_end.text = ""
|
tv_seat.text = ""
|
tv_count.text = ""
|
startLat = 0.0
|
endLat = 0.0
|
}
|
Const.RequestCode.END_SITE -> {
|
endId = data.getIntExtra("id",0)
|
endCity = data.getStringExtra("city")?:""
|
tv_end_city.text = data.getStringExtra("name")
|
line = null
|
shift = null
|
tv_shift.text = ""
|
tv_start.text = ""
|
tv_end.text = ""
|
tv_seat.text = ""
|
tv_count.text = ""
|
startLat = 0.0
|
endLat = 0.0
|
queryLine()
|
}
|
Const.RequestCode.CROSS_LINE -> {
|
line = data.getParcelableExtra("line")
|
shift = null
|
tv_shift.text = ""
|
tv_start.text = ""
|
tv_end.text = ""
|
tv_seat.text = ""
|
tv_count.text = ""
|
startLat = 0.0
|
endLat = 0.0
|
}
|
Const.RequestCode.CROSS_SHIFT -> {
|
shift = data.getParcelableExtra("shift")
|
tv_shift.text = data.getLongExtra("time",0L).toTime("yyyy-MM-dd ")+ shift?.startTime
|
tv_count.text = "可乘人数${shift?.number}"
|
tv_seat.text = ""
|
}
|
Const.RequestCode.START_ADDRESS -> {
|
tv_start.text = data.getStringExtra("name")
|
startLat = data.getDoubleExtra("lat",0.0)
|
startLon = data.getDoubleExtra("lon",0.0)
|
}
|
Const.RequestCode.END_ADDRESS -> {
|
tv_end.text = data.getStringExtra("name")
|
endLat = data.getDoubleExtra("lat",0.0)
|
endLon = data.getDoubleExtra("lon",0.0)
|
}
|
}
|
getPrice()
|
}
|
}
|
}
|