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.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_confirm_cross_order.*
|
import org.jetbrains.anko.sdk27.coroutines.onClick
|
import org.jetbrains.anko.startActivity
|
import org.jetbrains.anko.startActivityForResult
|
|
class ConfirmCrossOrderActivity:TransparentStatusBarActivity() {
|
override fun setContentView() = R.layout.activity_confirm_cross_order
|
|
private val data by lazy {
|
intent.getParcelableExtra<Shift>("data")
|
}
|
private val time by lazy {
|
intent.getLongExtra("time",0L)
|
}
|
private val startCity by lazy {
|
intent.getStringExtra("startCity")
|
}
|
private val endCity by lazy {
|
intent.getStringExtra("endCity")
|
}
|
private val startId by lazy {
|
intent.getIntExtra("startId",0)
|
}
|
private val endId by lazy {
|
intent.getIntExtra("endId",0)
|
}
|
private val lineId by lazy { //线路id,算价格用
|
intent.getIntExtra("lineId",0)
|
}
|
private val remarks by lazy {
|
arrayOf(remark_1,remark_2,remark_3,remark_4)
|
}
|
|
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 //预估距离,通过价格接口获取
|
|
override fun initClick() {
|
tv_start.onClick {
|
getAnchors(true)
|
}
|
|
tv_end.onClick {
|
getAnchors(false)
|
}
|
|
tv_passenger_num.onClick {
|
val passengerCountDialog = PassengerDialog()
|
passengerCountDialog.arguments = bundleOf("max" to data.laveSeat,"ids" to passengers)
|
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")
|
}
|
|
tv_seat.onClick {
|
if (passengerCount == 0)
|
myToast("请选择出行人数")
|
else
|
getSeatInfo()
|
}
|
|
rg_whole.setOnCheckedChangeListener { group, checkedId ->
|
gp_seat.visibility = if (checkedId == R.id.rb_whole) View.GONE else View.VISIBLE
|
getPrice()
|
}
|
|
tv_action.onClick {
|
if (!checkLogin())
|
return@onClick
|
if (startLat == 0.0){
|
myToast("请选择上车点")
|
return@onClick
|
}
|
if (endLat == 0.0){
|
myToast("请选择下车点")
|
return@onClick
|
}
|
if (passengerCount == 0){
|
myToast("请选择乘车人数")
|
return@onClick
|
}
|
if (rb_pin.isChecked&&tv_seat.text.isEmpty()){
|
myToast("请选择座位")
|
return@onClick
|
}
|
tv_action.isEnabled = false
|
HttpManager.getH5(11).request(this@ConfirmCrossOrderActivity,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
|
}
|
}
|
}
|
|
private fun makeOrder() {
|
showDialog()
|
HttpManager.orderCrossCity(data.carId,
|
lineId,
|
data.lineShiftDriverId,
|
data.driverId,
|
distance,
|
1,
|
startLat,
|
startLon,
|
endLat,
|
endLon,
|
tv_time.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,
|
data.serverCarModelId,
|
data.totalSeat
|
).request(this){ _, data ->
|
startActivity<PayCrossActivity>("id" to data?.optInt("id"))
|
setResult(Activity.RESULT_OK)
|
val intent = Intent("crossOrderSuccess")
|
sendBroadcast(intent)
|
finish()
|
}
|
}
|
|
override fun initView() {
|
title = "确认信息"
|
data.apply {
|
iv_avatar.setImageURI(headImgUrl)
|
tv_name.text = "$name $carLicensePlate"
|
tv_score.text = String.format("%.1f",evaluate)
|
tv_car_info.text = String.format("%s·%s",brand,carColor)
|
tv_count.text = "可乘人数${data.number}"
|
tv_time.text = time.toTime("yyyy-MM-dd ")+ data.startTime
|
}
|
getPrice()
|
}
|
|
private fun getSeatInfo(){
|
showDialog()
|
HttpManager.querySeat(data.lineShiftDriverId).request(this){_,data->
|
data?.apply {
|
val seatDialog = SeatDialog()
|
seatDialog.arguments = bundleOf("max" to totalNumber,"seat" to content,
|
"count" to passengerCount,"selected" to tv_seat.text.toString())
|
seatDialog.setCallback(object :StringCallback{
|
override fun onRlt(rlt: String) {
|
tv_seat.text = rlt
|
getPrice()
|
}
|
})
|
seatDialog.show(supportFragmentManager,"seat")
|
}
|
}
|
}
|
|
private fun getAnchors(isStart:Boolean){
|
showDialog()
|
HttpManager.queryLocation(if (isStart) startId else endId).request(this){_,data->
|
startActivityForResult<ChooseMapPositionActivity>(if (isStart) Const.RequestCode.START_SITE else Const.RequestCode.END_SITE,
|
"isStart" to isStart,"city" to if (isStart) startCity else endCity,"siteId" to if (isStart) startId else endId,
|
"data" to data)
|
}
|
}
|
|
/**
|
* 计算预估价格
|
*/
|
private fun getPrice(){
|
if (startLat!=0.0&&endLat!=0.0&&passengerCount!=0&&(tv_seat.text.isNotEmpty()||rb_whole.isChecked))
|
HttpManager.queryOrderMoney(lineId,"$startLon,$startLat","$endLon,$endLat",passengerCount,tv_seat.text.toString(),
|
if (rb_whole.isChecked) 2 else 1,data.serverCarModelId,data.totalSeat).request(this){_,data->
|
data?.apply {
|
tv_money.text = SpanBuilder(String.format("预估金额:¥%.2f",optDouble("price"))).color(this@ConfirmCrossOrderActivity,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()
|
}
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
if (resultCode == Activity.RESULT_OK&&data!=null){
|
if (requestCode == Const.RequestCode.START_SITE){
|
tv_start.text = data.getStringExtra("name")
|
startLat = data.getDoubleExtra("lat",0.0)
|
startLon = data.getDoubleExtra("lon",0.0)
|
}else{
|
tv_end.text = data.getStringExtra("name")
|
endLat = data.getDoubleExtra("lat",0.0)
|
endLon = data.getDoubleExtra("lon",0.0)
|
}
|
getPrice()
|
}
|
}
|
}
|