PaymentActivity.kt 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. package com.yingyang.healthconsultation.payment
  2. import android.annotation.SuppressLint
  3. import android.os.Bundle
  4. import android.view.MotionEvent
  5. import android.view.View
  6. import com.alibaba.android.arouter.facade.annotation.Route
  7. import com.yingyang.healthconsultation.R
  8. import com.yingyang.healthconsultation.databinding.ActivityPaymentBinding
  9. import com.yingyang.healthconsultation.dialog.PaymentQrCodeDialog
  10. import com.yingyang.healthconsultation.entity.PurchaseConsultationBean
  11. import com.yingyang.healthconsultation.utils.CommonUtils
  12. import com.yingyangfly.baselib.db.DoctorBean
  13. import com.yingyangfly.baselib.ext.getEndAnimation
  14. import com.yingyangfly.baselib.ext.getScaleAnimation
  15. import com.yingyangfly.baselib.ext.show
  16. import com.yingyangfly.baselib.ext.toast
  17. import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
  18. import com.yingyangfly.baselib.router.RouterUrlCommon
  19. import com.yingyangfly.baselib.utils.RxBusCodes
  20. import com.yingyangfly.baselib.utils.RxTimer
  21. import gorden.rxbus2.RxBus
  22. /**
  23. * 订单支付
  24. */
  25. @Route(path = RouterUrlCommon.payment)
  26. class PaymentActivity : BaseMVVMActivity<ActivityPaymentBinding, PaymentViewModel>(),
  27. View.OnTouchListener {
  28. private lateinit var rxTimer: RxTimer
  29. var time: Long = 0
  30. private var id: String = ""
  31. private var doctorBean: DoctorBean? = null
  32. private var orderNo = ""
  33. private var method = ""
  34. private var paymentQrCodeDialog: PaymentQrCodeDialog? = null
  35. private var purchaseConsultationBean: PurchaseConsultationBean? = null
  36. override fun onCreate(savedInstanceState: Bundle?) {
  37. id = intent.getStringExtra("id") ?: ""
  38. purchaseConsultationBean =
  39. intent.getSerializableExtra("purchaseConsultationBean") as PurchaseConsultationBean
  40. super.onCreate(savedInstanceState)
  41. }
  42. override fun initViews() {
  43. rxTimer = RxTimer()
  44. if (doctorDao != null) {
  45. doctorBean = doctorDao?.getDoctor(id)
  46. if (doctorBean != null) {
  47. binding.data = doctorBean
  48. }
  49. }
  50. }
  51. @SuppressLint("ClickableViewAccessibility")
  52. override fun initListener() {
  53. binding {
  54. backLayout.setOnTouchListener(this@PaymentActivity)
  55. wechatLayout.setOnTouchListener(this@PaymentActivity)
  56. alipayLayout.setOnTouchListener(this@PaymentActivity)
  57. btnSubmit.setOnTouchListener(this@PaymentActivity)
  58. }
  59. }
  60. override fun initData() {
  61. }
  62. @SuppressLint("ClickableViewAccessibility")
  63. override fun onTouch(v: View, event: MotionEvent): Boolean {
  64. when (event.action) {
  65. MotionEvent.ACTION_DOWN -> {
  66. if (v.id == R.id.backLayout || v.id == R.id.wechatLayout || v.id == R.id.alipayLayout || v.id == R.id.btnSubmit) {
  67. v.startAnimation(getScaleAnimation())
  68. }
  69. }
  70. MotionEvent.ACTION_UP -> {
  71. v.startAnimation(getEndAnimation())
  72. when (v.id) {
  73. R.id.backLayout -> {
  74. finish()
  75. }
  76. R.id.wechatLayout -> {
  77. if (purchaseConsultationBean != null) {
  78. purchaseConsultationBean?.payMethod = "1"
  79. }
  80. method = "1"
  81. binding {
  82. wechatLayout.setBackgroundResource(R.drawable.bg_payment_selected)
  83. alipayLayout.setBackgroundResource(R.drawable.bg_payment_unselected)
  84. imageWechatSelected.show(true)
  85. imageAlipaySelected.show(false)
  86. }
  87. }
  88. R.id.alipayLayout -> {
  89. if (purchaseConsultationBean != null) {
  90. purchaseConsultationBean?.payMethod = "2"
  91. }
  92. method = "2"
  93. binding {
  94. wechatLayout.setBackgroundResource(R.drawable.bg_payment_unselected)
  95. alipayLayout.setBackgroundResource(R.drawable.bg_payment_selected)
  96. imageWechatSelected.show(false)
  97. imageAlipaySelected.show(true)
  98. }
  99. }
  100. R.id.btnSubmit -> {
  101. if (CommonUtils.isFastClick) {
  102. submit()
  103. }
  104. }
  105. }
  106. }
  107. MotionEvent.ACTION_CANCEL -> {
  108. if (v.id == R.id.backLayout || v.id == R.id.wechatLayout || v.id == R.id.alipayLayout || v.id == R.id.btnSubmit) {
  109. v.startAnimation(getEndAnimation())
  110. }
  111. }
  112. }
  113. return true
  114. }
  115. /**
  116. * 购买问诊服务
  117. */
  118. private fun submit() {
  119. if (purchaseConsultationBean != null) {
  120. if (purchaseConsultationBean?.payMethod.isNullOrEmpty()) {
  121. "请选择支付方式".toast()
  122. } else {
  123. viewModel.saveConsultation(purchaseConsultationBean!!, fail = {
  124. it.toast()
  125. }, success = {
  126. startTimer()
  127. if (it != null) {
  128. orderNo = it.orderNo
  129. paymentQrCodeDialog = PaymentQrCodeDialog()
  130. paymentQrCodeDialog?.onQueryPaymentStatusListener = {
  131. RxBus.get().send(RxBusCodes.SuccessfulPurchase)
  132. finish()
  133. }
  134. paymentQrCodeDialog?.setPaymentQrCodeBean(it.orderNo, it.qrCode, method)
  135. paymentQrCodeDialog?.show(supportFragmentManager, "paymentQrCodeDialog")
  136. }
  137. })
  138. }
  139. }
  140. }
  141. /**
  142. * 取消支付
  143. */
  144. private fun delPayOrder() {
  145. viewModel.delPayOrder(orderNo, fail = {
  146. it.toast()
  147. }, success = {
  148. if (paymentQrCodeDialog != null && paymentQrCodeDialog?.dialog?.isShowing == true) {
  149. paymentQrCodeDialog?.dismiss()
  150. }
  151. })
  152. }
  153. /**
  154. * 开始计时
  155. */
  156. private fun startTimer() {
  157. val m: Long = 1000
  158. rxTimer.interval(m) {
  159. time = 60 * 15 * 1 - it - 1
  160. // val minutes = time / 60
  161. // val seconds = time % 60
  162. // binding.tvTime.text = if (minutes > 0) {
  163. // if (seconds > 0) {
  164. // "请在 $minutes 分钟 $seconds 秒内完成支付,超时将取消"
  165. // } else {
  166. // "请在 $minutes 分钟 内完成支付,超时将取消"
  167. // }
  168. // } else {
  169. // "请在 $seconds 秒内完成支付,超时将取消"
  170. // }
  171. if (it == time - 1) {
  172. delPayOrder()
  173. rxTimer.cancel()
  174. }
  175. }
  176. }
  177. }