package com.sinata.xqmuse.ui.course
|
|
import android.content.Intent
|
import androidx.core.os.bundleOf
|
import androidx.recyclerview.widget.LinearLayoutManager
|
import cn.sinata.xldutils.utils.SpanBuilder
|
import cn.sinata.xldutils.utils.showAllowingStateLoss
|
import cn.sinata.xldutils.visible
|
import com.sinata.xqmuse.R
|
import com.sinata.xqmuse.dialog.ChooseCouponDialog
|
import com.sinata.xqmuse.dialog.PayDialog
|
import com.sinata.xqmuse.network.entity.BuyInfo
|
import com.sinata.xqmuse.network.HttpManager
|
import com.sinata.xqmuse.network.entity.PackageListVO
|
import com.sinata.xqmuse.network.entity.*
|
import com.sinata.xqmuse.network.request
|
import com.sinata.xqmuse.ui.TransparentStatusBarActivity
|
import com.sinata.xqmuse.ui.course.adapter.PackageAdapter
|
import com.sinata.xqmuse.ui.home.PayResultActivity
|
import com.sinata.xqmuse.utils.Const
|
import com.sinata.xqmuse.utils.extention.clickDelay
|
import com.sinata.xqmuse.utils.interfaces.StringCallback
|
import com.sinata.xqmuse.utils.pay.PayListener
|
import com.sinata.xqmuse.utils.pay.PayUtil
|
import kotlinx.android.synthetic.main.activity_join_course.*
|
import org.jetbrains.anko.startActivityForResult
|
|
class JoinCourseActivity : TransparentStatusBarActivity(), PayListener {
|
override fun setContentView() = R.layout.activity_join_course
|
|
private val id by lazy { intent.getStringExtra("id")?:"" }
|
|
private var course: BuyInfo? = null
|
|
private val packages = arrayListOf<PackageListVO>()
|
private val adapter = PackageAdapter(packages)
|
|
private val couponList = arrayListOf<Coupon>()
|
private var chooseCouponId = ""//已选优惠券id
|
private var chooseCouponMoney = 0.0//已选优惠券价格
|
|
private var payPrice = 0.0
|
|
private var orderId = ""
|
|
override fun initClick() {
|
adapter.setOnItemClickListener { view, position ->
|
if (adapter.checked == position){
|
adapter.checked = -1
|
} else{
|
adapter.checked = position
|
}
|
adapter.notifyDataSetChanged()
|
chooseCouponMoney = 0.0
|
chooseCouponId = ""
|
orderId = "" //修改后需要重新下单
|
calculate()
|
}
|
|
tv_coupon.clickDelay {
|
val chooseCouponDialog = ChooseCouponDialog()
|
chooseCouponDialog.arguments =
|
bundleOf("list" to couponList, "checked" to chooseCouponId,"money" to payPrice)
|
chooseCouponDialog.callback = object : StringCallback {
|
override fun onResult(rst: String) {
|
chooseCouponId = rst
|
val coupon = couponList.filter { it.id == chooseCouponId }.firstOrNull()
|
chooseCouponMoney = (coupon?.reduction?:"0.0").toDouble()
|
orderId = "" //修改后需要重新下单
|
calculate()
|
}
|
}
|
chooseCouponDialog.showAllowingStateLoss(supportFragmentManager, "coupon")
|
}
|
tv_action.clickDelay {
|
PayDialog.show(supportFragmentManager, object : StringCallback {
|
override fun onResult(rst: String) {
|
pay(rst.toInt())
|
}
|
}, payPrice-chooseCouponMoney)
|
}
|
}
|
|
override fun initView(){
|
rv_package.layoutManager = LinearLayoutManager(this)
|
rv_package.adapter = adapter
|
getBuyInfo()
|
PayUtil.addPayListener(this)
|
}
|
|
private fun getBuyInfo() {
|
HttpManager.buyCourseInfo(id).request(this){_,data->
|
course = data
|
data?.apply {
|
tv_tip.text = "购买后“${typeName}”相关课程均可查看;\n长期有效,我们将持续为您更新。"
|
tv_type.text = typeName
|
tv_price.text = "¥%.2f".format(amount)
|
// tv_count.text = "${count}节"
|
if (!packageListVOList.isNullOrEmpty()){
|
ll_package.visible()
|
packages.clear()
|
packages.addAll(packageListVOList)
|
adapter.notifyDataSetChanged()
|
}
|
couponList.addAll(couponVOList)
|
if (!couponVOList.isNullOrEmpty())
|
ll_coupon.visible()
|
calculate()
|
}
|
}
|
}
|
|
/**
|
* 算价
|
*/
|
private fun calculate(){
|
payPrice = if (adapter.checked == -1) course?.amount?:0.0 else packages[adapter.checked].price
|
tv_total.text = "¥%.2f".format(payPrice)
|
tv_coupon.text = if (chooseCouponMoney == 0.0) "请选择" else "-¥%.2f".format(chooseCouponMoney)
|
tv_coupon_money.text = "¥%.2f".format(chooseCouponMoney)
|
tv_pay_money.text = "¥%.2f".format(payPrice - chooseCouponMoney)
|
tv_money.text = SpanBuilder("¥%.2f".format(payPrice - chooseCouponMoney)).size(0,1,18).build()
|
}
|
|
|
private fun pay(payType: Int) {
|
val id = if (adapter.checked == -1) course?.id else packages[adapter.checked].id
|
val buyType = if (adapter.checked == -1) 1 else 2
|
if (orderId.isEmpty())
|
HttpManager.payCourse(id?:"",payType,buyType,if (chooseCouponId.isEmpty()) null else chooseCouponId).request(this){ _, data->
|
orderId = data?.id?:""
|
doPay(buyType, payType)
|
}
|
else
|
doPay(buyType, payType)
|
}
|
|
private fun doPay(buyType: Int,payType: Int){
|
HttpManager.pay(orderId,payType, buyType).request(this,false,{_,data->
|
if (payType == 2) {
|
PayUtil.aliPay(this, data?.orderInfo ?: "")
|
} else if (payType == 3) {
|
onPaySuccess()
|
} else {
|
PayUtil.initWeChatPay(this, Const.WX_APP_ID)
|
PayUtil.weChatPay(data!!)
|
}
|
}){_,msg->
|
startActivityForResult<PayResultActivity>(1, "type" to PayResultActivity.TYPE_COURSE_FAILED, "msg" to msg)
|
}
|
}
|
|
override fun onPaySuccess() {
|
startActivityForResult<PayResultActivity>(1, "type" to PayResultActivity.TYPE_COURSE_SUC,
|
"orderId" to orderId, "courseId" to id)
|
finish()
|
}
|
|
override fun onPayCancel() {
|
}
|
|
override fun onPayError(msg: String) {
|
startActivityForResult<PayResultActivity>(
|
1,
|
"type" to PayResultActivity.TYPE_COURSE_FAILED
|
)
|
}
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
if (resultCode == RESULT_OK&&requestCode == 1) {
|
tv_action.postDelayed({
|
PayDialog.show(supportFragmentManager, object : StringCallback {
|
override fun onResult(rst: String) {
|
pay(rst.toInt())
|
}
|
|
}, payPrice)
|
}, 500)
|
}
|
}
|
|
override fun onDestroy() {
|
super.onDestroy()
|
PayUtil.removePayListener(this)
|
PayUtil.unregisterApp()
|
}
|
}
|