Files
XiaoxintongSystemOS/app/src/main/java/com/uiuios/aios/activity/PayActivity.java
Fanhuitong 112bb15eb4 version:5.4
fix:
update:优化订单支付页面,修改部分页面状态栏颜色
2024-05-08 16:56:54 +08:00

206 lines
8.5 KiB
Java

package com.uiuios.aios.activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import androidx.databinding.DataBindingUtil;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiuios.aios.R;
import com.uiuios.aios.base.BaseDataBindingActivity;
import com.uiuios.aios.bean.BaseResponse;
import com.uiuios.aios.bean.OrderBean;
import com.uiuios.aios.bean.WxpayBean;
import com.uiuios.aios.databinding.ActivityPayBinding;
import com.uiuios.aios.network.NetInterfaceManager;
import com.uiuios.aios.utils.BitmapUtils;
import com.uiuios.aios.utils.ToastUtil;
import java.util.concurrent.TimeUnit;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class PayActivity extends BaseDataBindingActivity {
private static final String TAG = PayActivity.class.getSimpleName();
private ActivityPayBinding mBinding;
private OrderBean mOrderBean;
@Override
protected int getLayoutId() {
return R.layout.activity_pay;
}
@Override
protected boolean setNightMode() {
return true;
}
@Override
protected boolean setfitWindow() {
return true;
}
/**
* 初始化视图
*/
@Override
public void initView() {
mBinding = DataBindingUtil.setContentView(this, getLayoutId());
mBinding.tvRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getWechatPayQrcode(mOrderBean);
}
});
mBinding.ivExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
/**
* 初始化数据
*/
@Override
public void initData() {
Intent intent = getIntent();
if (intent == null) return;
OrderBean orderBean = (OrderBean) intent.getSerializableExtra("OrderBean");
if (orderBean == null) return;
mOrderBean = orderBean;
getWechatPayQrcode(mOrderBean);
}
private Disposable mCountdownSubscribe;
private void getWechatPayQrcode(OrderBean orderBean) {
if (orderBean == null) return;
NetInterfaceManager.getInstance()
.getOrderPayObservable(orderBean.getOrder_sn(), orderBean.getOrder_id())
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<WxpayBean>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getOrderPayObservable", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<WxpayBean> wxpayBeanBaseResponse) {
Log.e("getOrderPayObservable", "onNext: " + wxpayBeanBaseResponse);
if (wxpayBeanBaseResponse.code == 200) {
WxpayBean wxpayBean = wxpayBeanBaseResponse.data;
mBinding.setWxpayBean(wxpayBean);
mBinding.tvOrderId.setText("订单编号:" + wxpayBean.getOrder_sn());
long expireTime = wxpayBean.getTime_expire();
mBinding.ivWxQrcode.setImageBitmap(BitmapUtils.createQRImage(wxpayBean.getCode_url(), 400, 400));
initCountdown(expireTime);
checkOrder(wxpayBean);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getOrderPayObservable", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getOrderPayObservable", "onComplete: ");
}
});
}
private void initCountdown(long second) {
if (mCountdownSubscribe != null && !mCountdownSubscribe.isDisposed()) {
mCountdownSubscribe.dispose();
}
mCountdownSubscribe = Observable.interval(1, TimeUnit.SECONDS)
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
long timestamp = System.currentTimeMillis() / 1000;
Log.e("initCountdown", "accept: time_expire = " + second);
Log.e("initCountdown", "accept: aLong = " + aLong);
Log.e("initCountdown", "accept: timestamp = " + timestamp);
if (timestamp >= second) {
mBinding.ivWxQrcode.setImageDrawable(getDrawable(R.drawable.qrcode_expired));
if (mCountdownSubscribe != null && !mCountdownSubscribe.isDisposed()) {
mCountdownSubscribe.dispose();
}
} else {
}
}
});
}
private Disposable mCheckOrderSubscribe;
private void checkOrder(WxpayBean wxpayBean) {
if (mCheckOrderSubscribe != null && !mCheckOrderSubscribe.isDisposed()) {
mCheckOrderSubscribe.dispose();
}
mCheckOrderSubscribe = Observable.interval(5, TimeUnit.SECONDS)
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
NetInterfaceManager.getInstance()
.getOrderPayCheckObservable(wxpayBean.getOrder_sn(), wxpayBean.getOrder_id())
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("checkOrder", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
Log.e("checkOrder", "onNext: " + baseResponse);
if (baseResponse.code == 200) {
if (mCountdownSubscribe != null && !mCountdownSubscribe.isDisposed()) {
mCountdownSubscribe.dispose();
}
if (mCheckOrderSubscribe != null && !mCheckOrderSubscribe.isDisposed()) {
mCheckOrderSubscribe.dispose();
}
ToastUtil.show("支付成功");
finish();
} else {
Log.e("checkOrder", "onNext: " + "支付失败");
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("checkOrder", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("checkOrder", "onComplete: ");
}
});
}
});
}
}