Parcourir la source

feat: 欠费补缴流程完善(没有接口)

master
huting il y a 2 ans
Parent
révision
62be7163f9
23 fichiers modifiés avec 1858 ajouts et 12 suppressions
  1. 14
    0
      app/src/main/AndroidManifest.xml
  2. 1
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/bean/ResultBean.java
  3. 2
    1
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/LogoutEtcSuccessActivity.java
  4. 236
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/PayTheArrearsStep1Activity.java
  5. 89
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/PayTheArrearsStep2Activity.java
  6. 162
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/PayTheArrearsStep3Activity.java
  7. 1
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/order/OrderUtils.java
  8. 56
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/adapter/PayTheArrearsAdapter.java
  9. 12
    4
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/fragment/FragmentHomeTow.java
  10. 14
    5
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/fragment/FragmentSonOne.java
  11. 445
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/utils/BigDecimalUtils.java
  12. 33
    1
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/utils/FunHelper.java
  13. 6
    0
      app/src/main/res/drawable-v1/bg_order_status_green.xml
  14. 6
    0
      app/src/main/res/drawable-v1/bg_order_status_grey.xml
  15. 5
    0
      app/src/main/res/drawable-v1/bg_white_radius_top.xml
  16. 154
    0
      app/src/main/res/layout-v4/activity_pay_the_arrears_step2.xml
  17. 93
    0
      app/src/main/res/layout-v4/activity_pay_the_arrears_step3.xml
  18. 1
    1
      app/src/main/res/layout/activity_logout_etc_success.xml
  19. 152
    0
      app/src/main/res/layout/activity_pay_the_arrears_step1.xml
  20. 226
    0
      app/src/main/res/layout/item_list_pay_the_arrears.xml
  21. 150
    0
      app/src/main/res/layout/layout_pay_the_arrears_info.xml
  22. BIN
      app/src/main/res/mipmap-xhdpi/icon_long_arrow.png
  23. BIN
      app/src/main/res/mipmap-xhdpi/icon_up_grey.png

+ 14
- 0
app/src/main/AndroidManifest.xml Voir le fichier

@@ -510,6 +510,20 @@
android:name=".project.ui.activity.after.LogoutEtcSuccessActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />

<!--欠费补缴-->
<activity
android:name=".project.ui.activity.after.PayTheArrearsStep1Activity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name=".project.ui.activity.after.PayTheArrearsStep2Activity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name=".project.ui.activity.after.PayTheArrearsStep3Activity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
</application>

</manifest>

+ 1
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/bean/ResultBean.java Voir le fichier

@@ -226,6 +226,7 @@ public class ResultBean<T> {
}

public static class BizContent<T> {
public boolean isSelected; //是否选中 (本地添加)
public OrderInfoExt orderInfoExt;//额外信息
public ProductInfo product; //产品额外信息
public String productId; //产品ID

+ 2
- 1
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/LogoutEtcSuccessActivity.java Voir le fichier

@@ -26,7 +26,8 @@ public class LogoutEtcSuccessActivity extends AppActivity {
if (from.equals("0")){
binding.tvHint.setText("注销成功");
}else if (from.equals("1")){
binding.tvHint.setText("支付成功");
binding.tvHint.setText("补缴成功");
setTitle("欠费补缴");
}else if (from.equals("2")){
binding.tvHint.setText("补领成功");
}

+ 236
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/PayTheArrearsStep1Activity.java Voir le fichier

@@ -0,0 +1,236 @@
package com.huntersun.vkyes.etcopencard.project.ui.activity.after;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;

import com.alibaba.fastjson.JSON;
import com.blankj.utilcode.util.LogUtils;
import com.google.gson.Gson;
import com.huntersun.vkyes.etcopencard.databinding.ActivityPayTheArrearsStep1Binding;
import com.huntersun.vkyes.etcopencard.project.api.Api;
import com.huntersun.vkyes.etcopencard.project.api.Converter;
import com.huntersun.vkyes.etcopencard.project.api.MyRetrofit;
import com.huntersun.vkyes.etcopencard.project.api.Parameters;
import com.huntersun.vkyes.etcopencard.project.api.RequestParameters;
import com.huntersun.vkyes.etcopencard.project.api.Result;
import com.huntersun.vkyes.etcopencard.project.api.bean.IFCode;
import com.huntersun.vkyes.etcopencard.project.api.bean.ResultBean;
import com.huntersun.vkyes.etcopencard.project.ui.adapter.PayTheArrearsAdapter;
import com.huntersun.vkyes.etcopencard.project.utils.BigDecimalUtils;
import com.huntersun.vkyes.etcopencard.project.utils.FunHelper;
import com.huntersun.vkyes.etcopencard.src.action.StatusAction;
import com.huntersun.vkyes.etcopencard.src.aop.SingleClick;
import com.huntersun.vkyes.etcopencard.src.app.AppActivity;
import com.huntersun.vkyes.etcopencard.src.widget.StatusLayout;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

import androidx.annotation.NonNull;
import retrofit2.Response;

/**
* Date :2023-03-17
* Description:欠费补缴 第一步
*/
public class PayTheArrearsStep1Activity extends AppActivity implements OnRefreshLoadMoreListener, StatusAction, PayTheArrearsAdapter.INOnPayTheArrearsClick {
private ActivityPayTheArrearsStep1Binding binding;
private PayTheArrearsAdapter.INOnPayTheArrearsClick inOnPayTheArrearsClick;

@Override
protected View getLayoutView() {
binding = ActivityPayTheArrearsStep1Binding.inflate(getLayoutInflater());
return binding.getRoot();
}

private int page = 1;
private PayTheArrearsAdapter adapter;

@Override
protected void initView() {
inOnPayTheArrearsClick = this;
adapter = new PayTheArrearsAdapter(this);
adapter.setOnPayTheArrearsClick(inOnPayTheArrearsClick);
binding.mRecycleView.setAdapter(adapter);
binding.rlStatusRefresh.setOnRefreshLoadMoreListener(this);
binding.rlStatusRefresh.setOnRefreshListener(this);

binding.LLChooseAll.setOnClickListener(this::initClick);
binding.cbAll.setOnClickListener(this::initClick);
binding.btnPay.setOnClickListener(this::initClick);
binding.btnSearch.setOnClickListener(this::initClick);
}

@Override
protected void initData() {
showLoading();
getList();
}

private void getList(){
Parameters parameters = new Parameters();
parameters.setTabIndex("0");
parameters.setPageNo(page + "");
parameters.setPageSize("10");
parameters.setVehiclePlate(FunHelper.getText(binding.etSearch));
RequestParameters parameters1 = new RequestParameters(IFCode.IFCODE36, new Gson().toJson(parameters));
if (page == 1) { showLoading(); }
new MyRetrofit().getRetrofit().create(Api.class).message2(parameters1) .enqueue(new Converter<Result>(getActivity()) {
@SuppressLint("NotifyDataSetChanged")
@Override
protected void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent1) {
if (bizContent1.getData() == null) {
postDelayed(PayTheArrearsStep1Activity.this::showEmpty, 300);
}
int pageSize = 10; // 每页的数据条数
int totalSize = Integer.parseInt(bizContent1.getTotalCount()); // 获取总的数据条数
List<ResultBean.BizContent> list = bizContent1.getData();
if (page == 1) {
adapter.replaceData(list);
} else {
if (totalSize % pageSize == 0) {
adapter.addData(list);
} else {
toast("没有更多数据了!");
}
}
if (list.size() == 0 && page == 1) {
showEmpty();
} else {
showComplete();
}
}

@Override
public void onError(String err, Response<Result> resp) {
super.onError(err, resp);
showError(new StatusLayout.OnRetryListener() {
@Override
public void onRetry(StatusLayout layout) {
getList();
}
});
}
});
}

@Override
public StatusLayout getStatusLayout() {
return binding.hlStatusHint;
}

@Override
public void onLoadMore(@NonNull @NotNull RefreshLayout refreshLayout) {
postDelayed(() -> {
page = page + 1;
getList();
binding.rlStatusRefresh.finishLoadMore();
}, 1000);
}

@Override
public void onRefresh(@NonNull @NotNull RefreshLayout refreshLayout) {
postDelayed(() -> {
page = 1;
getList();
binding.rlStatusRefresh.finishRefresh();
}, 1000);
}

private void updateCBAll(){
int sum = 0;List<ResultBean.BizContent> list = new ArrayList<>();
for (ResultBean.BizContent cartResp:adapter.getData()) {
list.add(cartResp);
if (cartResp.isSelected){
sum++;
}
}

binding.cbAll.setChecked(sum == list.size() ? true : false);

//更新价格
updatePrice();
}

private void updatePrice(){
int totalPrice = 0;
for (ResultBean.BizContent cartResp : adapter.getData()) {
if (cartResp.isSelected) {
if (FunHelper.isEmpty(cartResp.getAmount())){
cartResp.setAmount("0");
}
String price = cartResp.getAmount();
totalPrice = (int) Math.ceil(BigDecimalUtils.add(totalPrice, BigDecimalUtils.mul(Double.parseDouble(price),1)));
}
}
binding.tvTotalAmount.setText(FunHelper.getPriceWith2Num(Double.parseDouble(FunHelper.changeF2Y(totalPrice))));
}

/*
* 全选/全部选
*
* @param isChooseAll 是否是全选
*/
private void doChooseAll(boolean isChooseAll){
for (ResultBean.BizContent cartResp:adapter.getData()){
cartResp.isSelected = isChooseAll;
}
adapter.notifyDataSetChanged();
updatePrice();
}

private void gotoNextActivity(){
List<ResultBean.BizContent> finalList = new ArrayList<>();
for (ResultBean.BizContent cartResp : adapter.getData()) {
if (cartResp.isSelected) {
finalList.add(cartResp);
}
}

if (FunHelper.isEmpty(finalList)){
toast("请选择需要补缴的单!");
return;
}

Bundle bundle = new Bundle();
bundle.putString("dataJson", JSON.toJSONString(finalList));
jumpToPage(PayTheArrearsStep2Activity.class,bundle);
}

//@SingleClick
private void initClick(View view){
if (view == binding.cbAll || view == binding.LLChooseAll){//全选
if (view == binding.LLChooseAll){
binding.cbAll.setChecked(!binding.cbAll.isChecked());
}
doChooseAll(binding.cbAll.isChecked());
}else if (view == binding.btnSearch){//搜索
if (FunHelper.isEmpty(FunHelper.getText(binding.etSearch))){
toast("请输入搜索关键词!");
return;
}
if (!FunHelper.isRightVehiclePlate(FunHelper.getText(binding.etSearch))){
toast("请输入正确的车牌号进行搜索!");
return;
}
getList();
}else if (view == binding.btnPay){//点击合并支付
gotoNextActivity();
}
}

@Override
public void changeCheckBoxChoose(ResultBean.BizContent bean) {
updateCBAll();
}

@Override
public void refreshList() {

}
}

+ 89
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/PayTheArrearsStep2Activity.java Voir le fichier

@@ -0,0 +1,89 @@
package com.huntersun.vkyes.etcopencard.project.ui.activity.after;

import android.view.View;
import android.widget.LinearLayout;

import com.alibaba.fastjson.JSON;
import com.huntersun.vkyes.etcopencard.R;
import com.huntersun.vkyes.etcopencard.databinding.ActivityPayTheArrearsStep2Binding;
import com.huntersun.vkyes.etcopencard.project.api.bean.ResultBean;
import com.huntersun.vkyes.etcopencard.project.utils.FunHelper;
import com.huntersun.vkyes.etcopencard.src.aop.SingleClick;
import com.huntersun.vkyes.etcopencard.src.app.AppActivity;
import com.huntersun.vkyes.etcopencard.src.ui.adapter.AddViewHolder;

import java.util.ArrayList;
import java.util.List;

/**
* Date :2023-03-17
* Description:
*/
public class PayTheArrearsStep2Activity extends AppActivity {
private ActivityPayTheArrearsStep2Binding binding;

private String dataJson;
private List<ResultBean.BizContent> dataList;

@Override
protected View getLayoutView() {
binding = ActivityPayTheArrearsStep2Binding.inflate(getLayoutInflater());
return binding.getRoot();
}

@Override
protected void initView() {
dataJson = getIntent().getStringExtra("dataJson");
dataList = new ArrayList<>();
if (!FunHelper.isEmpty(dataJson)){
dataList = JSON.parseArray(dataJson,ResultBean.BizContent.class);
}

binding.tvExpand.setVisibility(dataList.size() > 1 ? View.VISIBLE : View.GONE);
binding.tvExpand.setOnClickListener(this::initClick);
binding.tvNoExpand.setOnClickListener(this::initClick);
binding.btnNext.setOnClickListener(this::initClick);

binding.LLDefContent.removeAllViews();
binding.LLHideContent.removeAllViews();
for (int i = 0; i < dataList.size(); i++){
addItemView(dataList.get(i),i == 0 ? binding.LLDefContent : binding.LLHideContent);
}

setTotalMoney();
}

private void setTotalMoney(){
binding.tvAmount1.setText("¥ " + "0.00");
binding.tvServiceAmount1.setText("¥ " + "0.00");
binding.tvTotalAmount1.setText("0.00");
binding.btnNext.setText("确认支付40.00元");
}

private void addItemView(ResultBean.BizContent bean, LinearLayout linearLayout){
AddViewHolder holder = new AddViewHolder(this,R.layout.layout_pay_the_arrears_info);

linearLayout.addView(holder.getCustomView());
}

@SingleClick
private void initClick(View view){
if (view == binding.tvExpand){//展开
binding.LLHideContent.setVisibility(View.VISIBLE);
binding.tvExpand.setVisibility(View.GONE);
binding.tvNoExpand.setVisibility(View.VISIBLE);
}else if (view == binding.tvNoExpand){//不展开
binding.LLHideContent.setVisibility(View.GONE);
binding.tvExpand.setVisibility(View.VISIBLE);
binding.tvNoExpand.setVisibility(View.GONE);
}else if (view == binding.btnNext){//支付
jumpToPage(PayTheArrearsStep3Activity.class);
finish();
}
}

@Override
protected void initData() {

}
}

+ 162
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/PayTheArrearsStep3Activity.java Voir le fichier

@@ -0,0 +1,162 @@
package com.huntersun.vkyes.etcopencard.project.ui.activity.after;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;

import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.huntersun.vkyes.etcopencard.databinding.ActivityLogoutEtcPayBinding;
import com.huntersun.vkyes.etcopencard.databinding.ActivityPayTheArrearsStep3Binding;
import com.huntersun.vkyes.etcopencard.project.api.Api;
import com.huntersun.vkyes.etcopencard.project.api.Converter;
import com.huntersun.vkyes.etcopencard.project.api.FatherBean;
import com.huntersun.vkyes.etcopencard.project.api.MyRetrofit;
import com.huntersun.vkyes.etcopencard.project.api.RequestParameters;
import com.huntersun.vkyes.etcopencard.project.api.Result;
import com.huntersun.vkyes.etcopencard.project.api.bean.IFCode;
import com.huntersun.vkyes.etcopencard.project.api.bean.ResultBean;
import com.huntersun.vkyes.etcopencard.project.api.bean.SendTheVerificationCodeBean;
import com.huntersun.vkyes.etcopencard.project.tool.QRCode;
import com.huntersun.vkyes.etcopencard.project.tool.Utils;
import com.huntersun.vkyes.etcopencard.project.utils.FunHelper;
import com.huntersun.vkyes.etcopencard.src.aop.SingleClick;
import com.huntersun.vkyes.etcopencard.src.app.AppActivity;

import java.util.Objects;

import retrofit2.Response;

/**
* Date :2023-03-16
* Description:欠费补缴 -支付二维码
*/
public class PayTheArrearsStep3Activity extends AppActivity {
private ActivityPayTheArrearsStep3Binding binding;

@Override
protected View getLayoutView() {
binding = ActivityPayTheArrearsStep3Binding.inflate(getLayoutInflater());
return binding.getRoot();
}

@Override
protected void initView() {
String dataJson = getIntent().getStringExtra("dataJson");
binding.text.setText("¥ " + (Integer.parseInt(FunHelper.isEmpty("230") ? "0" : "203") * 0.01));
binding.paid.setOnClickListener(new View.OnClickListener() {
@Override
@SingleClick
public void onClick(View view) {
//pay();
Bundle bundle = new Bundle();
bundle.putString("from","1");
jumpToPage(LogoutEtcSuccessActivity.class,bundle);
finish();
}
});
}

@Override
protected void initData() {
getPayCode();
}

/**
* 获取支付二维码
*/
private void getPayCode(){
FatherBean<SendTheVerificationCodeBean> fatherBean = new FatherBean<>();
fatherBean.bizContent = new SendTheVerificationCodeBean();
fatherBean.bizContent.setCardId(""); //储值卡编号
fatherBean.bizContent.setOrderNum(""); //充值单编号
fatherBean.bizContent.setBody("储值卡充值");
fatherBean.bizContent.setPayConfigId("6a9a54bc01f6443faea7ffeb8b5b19f6"); //支付配置编号
RequestParameters parameters1 = new RequestParameters(IFCode.IFCODE811, new Gson().toJson(fatherBean.bizContent));
//充值申请
new MyRetrofit().getRetrofit().create(Api.class).message2(parameters1).enqueue(new Converter<Result>(this) {
@SuppressLint("SetTextI18n")
@Override
protected void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent1) {
hideDialog();
//二维码生成
Bitmap bitmap = QRCode.createQRCodeBitmap(bizContent1.getCodeUrl(), 800, 800,
"UTF-8", "H", "1", Color.BLACK, Color.WHITE);
Drawable drawable = new BitmapDrawable(bitmap);
binding.image.setImageDrawable(drawable);
try {
binding.text.setText("¥ " + (Double.valueOf(bizContent1.getTotalFee()) * 0.01));
} catch (Exception ignored) {
}
}
@Override
public void onError(String err, Response<Result> resp) {
super.onError(err, resp);
}
});
}

/**
* 支付
*/
private void pay(){
FatherBean<SendTheVerificationCodeBean> fatherBean = new FatherBean<>();
fatherBean.bizContent = new SendTheVerificationCodeBean();
fatherBean.bizContent.setOrderNum("");
fatherBean.bizContent.setCardId("");
fatherBean.bizContent.setPayConfigId("6a9a54bc01f6443faea7ffeb8b5b19f6"); //支付配置编号
binding.paid.setEnabled(false);
//储值卡充值-查询支付结果
RequestParameters parameters1 = new RequestParameters(IFCode.IFCODE812, new Gson().toJson(fatherBean.bizContent));
new MyRetrofit().getRetrofit().create(Api.class).message2(parameters1).enqueue(new Converter<Result>(this) {
@SuppressLint("SetTextI18n")
@Override
protected void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent1) {
hideDialog();
binding.paid.setEnabled(true);
String msg = "";
switch (bizContent1.getTradeState()) {
case "SUCCESS": //支付成功
toast("支付成功!");
Bundle bundle = new Bundle();
bundle.putString("from","1");
jumpToPage(LogoutEtcSuccessActivity.class,bundle);
finish();
break;
case "PAYING": //支付中
msg = "订单支付中...";
break;
case "FAILED": //支付失败
msg = "支付失败";
break;
case "UNPAY": //未支付
msg = "用户还未完成支付";
break;
case "CLOSED": //已关闭
msg = "已关闭";
break;
case "CANCELED": //已撤销
msg = "支付已取消";
break;
case "REFUND": //转入退费
msg = "转入退费";
break;
}
if (!Objects.equals(bizContent1.getTradeState(), "SUCCESS")) {
new Utils().showMessDialog(getActivity(), msg, dialog -> {
});
}
}

@Override
public void onError(String err, Response<Result> resp) {
super.onError(err, resp);
binding.paid.setEnabled(true);
}
});
}
}

+ 1
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/order/OrderUtils.java Voir le fichier

@@ -299,6 +299,7 @@ public class OrderUtils {
btnActive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//TODO 需要调用一遍详情接口
releaseActivation(orderData);
}
});

+ 56
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/adapter/PayTheArrearsAdapter.java Voir le fichier

@@ -0,0 +1,56 @@
package com.huntersun.vkyes.etcopencard.project.ui.adapter;

import android.content.Context;
import android.view.View;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.huntersun.vkyes.etcopencard.R;
import com.huntersun.vkyes.etcopencard.project.api.bean.ResultBean;

import org.jetbrains.annotations.NotNull;

import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatCheckBox;

/**
* Date :2023-03-17
* Description:欠费补缴adapter
*/
public class PayTheArrearsAdapter extends BaseQuickAdapter<ResultBean.BizContent, BaseViewHolder>{
private INOnPayTheArrearsClick listener;
private Context mContext;

public PayTheArrearsAdapter(Context mContext) {
super(R.layout.item_list_pay_the_arrears);
this.mContext = mContext;
}

@Override
protected void convert(@NonNull @NotNull BaseViewHolder holder, ResultBean.BizContent bizContent) {
AppCompatCheckBox cbChoose = holder.getView(R.id.cbChoose);

//设置checkbox的选中状态
cbChoose.setOnCheckedChangeListener(null);//解决checkbox复用
cbChoose.setChecked(bizContent.isSelected);
cbChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bizContent.isSelected = cbChoose.isChecked();
if (listener != null){
listener.changeCheckBoxChoose(bizContent);
}
}
});
}

public void setOnPayTheArrearsClick(INOnPayTheArrearsClick listener){
this.listener = listener;
}
public interface INOnPayTheArrearsClick{
//checkBox选择通知
void changeCheckBoxChoose(ResultBean.BizContent bean);
//刷新列表
void refreshList();
}
}

+ 12
- 4
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/fragment/FragmentHomeTow.java Voir le fichier

@@ -14,10 +14,10 @@ import com.huntersun.vkyes.etcopencard.databinding.FragmentHomeFiveBinding;
import com.huntersun.vkyes.etcopencard.project.api.bean.TestBean;
import com.huntersun.vkyes.etcopencard.project.tool.Utils;
import com.huntersun.vkyes.etcopencard.project.ui.activity.MainActivity;
import com.huntersun.vkyes.etcopencard.project.ui.activity.after.CancellationActivity;
import com.huntersun.vkyes.etcopencard.project.ui.activity.after.DevicePendingActivity;
import com.huntersun.vkyes.etcopencard.project.ui.activity.after.EquipmentLossReportActivity;
import com.huntersun.vkyes.etcopencard.project.ui.activity.after.LogoutEtcStep1Activity;
import com.huntersun.vkyes.etcopencard.project.ui.activity.after.PayTheArrearsStep1Activity;
import com.huntersun.vkyes.etcopencard.project.ui.activity.after.ReplaceEtcStep1Activity;
import com.huntersun.vkyes.etcopencard.project.ui.activity.after.TopUpActivity;
import com.huntersun.vkyes.etcopencard.project.ui.activity.card.ValueToBookkeepingCardActivity;
@@ -41,13 +41,15 @@ public class FragmentHomeTow extends TitleBarFragment<MainActivity> {
{R.mipmap.card1, "卡签查询"},
{R.mipmap.card2, "发货管理"},
{R.mipmap.card3, "充值圈存"},
{R.mipmap.card8, "设备激活"},
{R.mipmap.card7, "满意度评价"},
{R.mipmap.card4, "设备注销"},
{R.mipmap.card5, "设备挂失"},
{R.mipmap.card6, "设备挂起"},
{R.mipmap.card7, "满意度评价"},
{R.mipmap.card8, "设备激活"},
{R.mipmap.card9, "储值卡测"},
{R.mipmap.card10, "更换卡签"}
{R.mipmap.card10, "更换卡签"},
{R.mipmap.card10, "欠费补缴"},
{R.mipmap.card10, "余额补领"},
};

public static AppFragment<MainActivity> newInstance() {
@@ -154,6 +156,12 @@ public class FragmentHomeTow extends TitleBarFragment<MainActivity> {
case "更换卡签":
jumpToPage(ReplaceEtcStep1Activity.class);
break;
case "欠费补缴":
jumpToPage(PayTheArrearsStep1Activity.class);
break;
case "余额补领":
toast("开发中...");
break;
default:
new Utils().showMessDialog(getActivity(), "功能正在开发中...");
break;

+ 14
- 5
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/fragment/FragmentSonOne.java Voir le fichier

@@ -156,15 +156,24 @@ public class FragmentSonOne extends TitleBarFragment<MainActivity>
if (bizContent1.getData() == null) {
postDelayed(FragmentSonOne.this::showEmpty, 300);
}

int pageSize = 10; // 每页的数据条数
int totalSize = Integer.parseInt(bizContent1.getTotalCount()); // 获取总的数据条数
int pageCount = totalSize / pageSize; // 计算总页数
List<ResultBean.BizContent> list = bizContent1.getData();
if (page == 1) {
adapter.replaceData(bizContent1.getData());
adapter.replaceData(list);
} else {
adapter.addData(bizContent1.getData());
if (totalSize % pageSize == 0) {
adapter.addData(list);
} else {
toast("没有更多数据了!");
}
}
if (bizContent1.getData().size() == 0 && page == 1) {
postDelayed(FragmentSonOne.this::showEmpty, 300);
if (list.size() == 0 && page == 1) {
showEmpty();
} else {
postDelayed(FragmentSonOne.this::showComplete, 300);
showComplete();
}
}


+ 445
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/utils/BigDecimalUtils.java Voir le fichier

@@ -0,0 +1,445 @@
package com.huntersun.vkyes.etcopencard.project.utils;

import java.math.BigDecimal;

/**
* Date :2023-03-17
* Description:适用于金额、利率换算
*/
public class BigDecimalUtils {

/*
* 小数精确的位数
*/
private static final int DEF_DIV_SCALE = 10;

/*
* 提供精确的加法运算。
*
* @param v1
* 被加数
* @param v2
* 加数
* @return 两个参数的和
*/
public static double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));


return b1.add(b2).doubleValue();
}

/*
* 提供精确的加法运算。
*
* @param v1
* 被加数
* @param v2
* 加数
* @return 两个参数的和
*/
public static BigDecimal add(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2);
}

/*
* 提供精确的加法运算。 String
*
* @param v1
* 被加数
* @param v2
* 加数
* @return 两个参数的和
*/
public static String strAdd(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}

/*
* 提供精确的减法运算。
*
* @param v1
* 被减数
* @param v2
* 减数
* @return 两个参数的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}

/*
* 提供精确的减法运算。
*
* @param v1
* 被减数
* @param v2
* 减数
* @return 两个参数的差
*/
public static BigDecimal sub(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2);
}

/*
* 对一个数字取精度
* @param v
* @param scale
* @return
*/
public static BigDecimal round(String v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(v);
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP);
}

/*
* 提供精确的减法运算。String
*
* @param v1
* 被减数
* @param v2
* 减数
* @return 两个参数的差
*/
public static String strSub(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}

/*
* 提供精确的乘法运算。
*
* @param v1
* 被乘数
* @param v2
* 乘数
* @return 两个参数的积
*/
public static double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}

/*
* 提供精确的乘法运算。
*
* @param v1
* 被乘数
* @param v2
* 乘数
* @return 两个参数的积
*/
public static BigDecimal mul(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2);
}

/*
* 提供精确的乘法运算。 保留scale 位小数
*
* @param v1
* 被乘数
* @param v2
* 乘数
* @return 两个参数的积
*/
public static double mul2(double v1, double v2,int scale) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return round(b1.multiply(b2).doubleValue(),scale);
}

/*
* 提供精确的乘法运算。 保留scale 位小数 String
*
* @param v1
* 被乘数
* @param v2
* 乘数
* @return 两个参数的积
*/
public static String strMul2(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}

/*
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @return 两个参数的商
*/
public static BigDecimal div(String v1, String v2) {
return div(v1, v2, DEF_DIV_SCALE);
}

/*
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @return 两个参数的商
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}

/*
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @param scale
* 表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}

/*
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @param scale
* 表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static BigDecimal div(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
}

/*
* 精确的除法运算。除不尽时,由scale参数指 定精度 四舍五入。string
*
* @param v1
* 被除数
* @param v2
* 除数
* @param scale
* 表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static String strDiv(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString();
}

/*
* 精确的除法运算。除不尽时,由scale参数指 定精度 四舍五入。string
*
* @param v1
* 被除数
* @param v2
* 除数
* @param scale
* 表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static BigDecimal bigDiv(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
}

/*
* 取余数 string
* @param v1
* @param v2
* @param scale
* @return
*/
public static BigDecimal strRemainder(String v1, String v2, int scale){
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.remainder(b2).setScale(scale, BigDecimal.ROUND_HALF_UP);
}

/*
* 取余数 string
* @param v1
* @param v2
* @param scale
* @return string
*/
public static String strRemainder2Str(String v1, String v2, int scale){
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.remainder(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}

/*
* 比较大小 如果v1 大于v2 则 返回true 否则false
* @param v1
* @param v2
* @return
*/
public static boolean strcompareTo(String v1, String v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
int bj = b1.compareTo(b2);
boolean res ;
if(bj>0)
res = true;
else
res = false;
return res;
}

/*
* 比较大小 如果v1 大于等于v2 则 返回true 否则false
* @param v1
* @param v2
* @return
*/
public static boolean strcompareTo2(String v1, String v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
int bj = b1.compareTo(b2);
boolean res ;
if(bj>=0)
res = true;
else
res = false;
return res;
}

/*
* 比较大小 如果v1 等于v2 则 返回true 否则false
* @param v1
* @param v2
* @return
*/
public static boolean strcompareTo3(String v1, String v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
int bj = b1.compareTo(b2);
boolean res ;
if(bj==0)
res = true;
else
res = false;
return res;
}

/*
* 取余数 BigDecimal
* @param v1
* @param v2
* @param scale
* @return
*/
public static BigDecimal bigRemainder(BigDecimal v1, BigDecimal v2, int scale){
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
return v1.remainder(v2).setScale(scale, BigDecimal.ROUND_HALF_UP);
}

/*
* 提供精确的小数位四舍五入处理。
*
* @param v
* 需要四舍五入的数字
* @param scale
* 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}

/*
* 提供精确的小数位四舍五入处理。string
*
* @param v
* 需要四舍五入的数字
* @param scale
* 小数点后保留几位
* @return 四舍五入后的结果
*/
public static String strRound(String v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(v);
return b.setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
}

+ 33
- 1
app/src/main/java/com/huntersun/vkyes/etcopencard/project/utils/FunHelper.java Voir le fichier

@@ -10,6 +10,9 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
@@ -21,7 +24,7 @@ import java.util.regex.Pattern;
* Description:页面通用方法
*/
public class FunHelper {
public static final String CURRENCY_FEN_REGEX = "\\-?[0-9]+";
/**
* 根据订单状态获取订单状态文字
* @param status 订单状态
@@ -366,4 +369,33 @@ public class FunHelper {
}
}, 100);
}

/*
* 获取保留两位数得价格
*
* @param price
* @return
*/
public static String getPriceWith2Num(double price) {
DecimalFormat df = new DecimalFormat("0.00");
return df.format(price);
}

/*
* 分转元,转换为bigDecimal在toString
*
* @return
*/

public static String changeF2Y(int price1) {
String price = String.valueOf(price1);
if (!price.matches(CURRENCY_FEN_REGEX)) {
return "";
}
BigDecimal bg = BigDecimal.valueOf(Long.valueOf(price)).divide(new BigDecimal(100));
DecimalFormat df = new DecimalFormat("0.00");
df.setRoundingMode(RoundingMode.HALF_UP);
return df.format(bg.doubleValue());
}

}

+ 6
- 0
app/src/main/res/drawable-v1/bg_order_status_green.xml Voir le fichier

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#3000b38b" />
<stroke android:width="0dp" android:color="@color/common_accent_color" />
<corners android:radius="@dimen/dp_3"/>
</shape>

+ 6
- 0
app/src/main/res/drawable-v1/bg_order_status_grey.xml Voir le fichier

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#F2F2F2" />
<stroke android:width="0dp" android:color="@color/common_accent_color" />
<corners android:radius="@dimen/dp_3"/>
</shape>

+ 5
- 0
app/src/main/res/drawable-v1/bg_white_radius_top.xml Voir le fichier

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:topLeftRadius="@dimen/dp_10" android:topRightRadius="@dimen/dp_10"/>
<solid android:color="@color/white"/>
</shape>

+ 154
- 0
app/src/main/res/layout-v4/activity_pay_the_arrears_step2.xml Voir le fichier

@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
style="@style/MatchMatch.Vertical"
android:background="@color/background_color">

<com.hjq.bar.TitleBar
android:id="@+id/titleBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:leftIcon="@mipmap/back_black"
app:lineVisible="false"
app:title="欠费补缴"
app:titleColor="@color/black" />

<androidx.core.widget.NestedScrollView
style="@style/MatchWrap">
<LinearLayout
style="@style/MatchWrap.Vertical">
<TextView
style="@style/MatchWrap"
android:text="通行信息"
android:textSize="@dimen/sp_16"
android:textColor="@color/color_333333"
android:layout_margin="@dimen/dp_15"
android:textStyle="bold"/>

<LinearLayout
android:id="@+id/LLDefContent"
android:paddingHorizontal="@dimen/dp_15"
style="@style/MatchWrap.Vertical"/>
<LinearLayout
android:id="@+id/LLHideContent"
android:layout_marginTop="@dimen/dp_15"
android:paddingHorizontal="@dimen/dp_15"
android:visibility="gone"
style="@style/MatchWrap.Vertical"/>

<TextView
android:id="@+id/tvExpand"
style="@style/WrapWrap"
android:padding="@dimen/dp_15"
android:visibility="gone"
android:layout_gravity="center_horizontal"
android:drawableRight="@mipmap/icon_down_grey"
android:drawablePadding="@dimen/dp_10"
android:text="展开"/>
<TextView
android:id="@+id/tvNoExpand"
style="@style/WrapWrap"
android:padding="@dimen/dp_15"
android:visibility="gone"
android:layout_gravity="center_horizontal"
android:drawableRight="@mipmap/icon_up_grey"
android:drawablePadding="@dimen/dp_10"
android:text="收起"/>

<TextView
style="@style/MatchWrap"
android:text="计费信息"
android:textSize="@dimen/sp_16"
android:textColor="@color/color_333333"
android:layout_margin="@dimen/dp_15"
android:textStyle="bold"/>
<LinearLayout
style="@style/MatchWrap.Vertical"
android:background="@drawable/bg_white_radius"
android:layout_marginHorizontal="@dimen/dp_15"
android:paddingHorizontal="@dimen/dp_15">
<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_height="@dimen/dp_45"
android:gravity="center_vertical">
<TextView
style="@style/black02TextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="合计通行金额" />
<TextView
android:id="@+id/tvAmount1"
style="@style/blackTextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF8000"
android:text="¥0.00" />
</LinearLayout>
<TextView
style="@style/MatchOne.HorLine"/>
<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_height="@dimen/dp_45"
android:gravity="center_vertical">
<TextView
style="@style/black02TextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="合计服务费" />
<TextView
android:id="@+id/tvServiceAmount1"
style="@style/blackTextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF8000"
android:text="¥0.00" />
</LinearLayout>

<TextView
style="@style/MatchOne.HorLine"/>

<LinearLayout
style="@style/MatchWrap.Horizontal"
android:gravity="center_vertical|right"
android:layout_height="@dimen/dp_45">
<TextView
style="@style/WrapWrap"
android:text="合计总金额:"
android:textSize="@dimen/sp_14"
android:textColor="@color/color_333333"/>
<TextView
style="@style/WrapWrap"
android:text="¥"
android:textStyle="bold"
android:textSize="@dimen/sp_12"
android:textColor="#FF8000"/>

<TextView
android:id="@+id/tvTotalAmount1"
style="@style/WrapWrap"
android:text="0.00"
android:textSize="@dimen/sp_18"
android:textColor="#FF8000"
android:layout_marginLeft="@dimen/dp_8"
android:textStyle="bold"/>
</LinearLayout>
</LinearLayout>

<Button
android:id="@+id/btnNext"
style="@style/BtnShortStyle"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_marginHorizontal="@dimen/dp_40"
android:layout_marginTop="@dimen/dp_60"
android:layout_marginBottom="@dimen/dp_30"
android:text="确认支付0.00元"
android:textSize="@dimen/sp_14" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>

+ 93
- 0
app/src/main/res/layout-v4/activity_pay_the_arrears_step3.xml Voir le fichier

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/pay_bg"
android:orientation="vertical">

<com.hjq.bar.TitleBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
app:leftIcon="@mipmap/back_three"
app:title="欠费补缴"
app:lineVisible="false"
app:titleColor="#FFFFFF" />

<com.huntersun.vkyes.etcopencard.src.widget.StatusLayout
android:id="@+id/hl_status_hint"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_30"
android:layout_marginTop="@dimen/dp_50"
android:background="@drawable/home_unm_bg2"
android:orientation="vertical">

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/round1" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:src="@mipmap/round2" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="@dimen/dp_20"
android:gravity="center"
android:text="需支付金额"
android:textSize="@dimen/sp_15" />

<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="@dimen/dp_30"
android:text="¥ 0.00"
android:textColor="#00B38B"
android:textSize="@dimen/sp_20" />

<ImageView
android:id="@+id/image"
android:layout_width="@dimen/dp_200"
android:layout_height="@dimen/dp_200"
android:layout_gravity="center_horizontal" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
android:gravity="center"
android:text="请用户扫码完成支付"
android:textSize="@dimen/sp_14" />

<Button
android:id="@+id/paid"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45"
android:layout_marginHorizontal="@dimen/dp_82"
android:layout_marginTop="@dimen/dp_65"
android:layout_marginBottom="@dimen/dp_30"
android:background="@drawable/button_circle_selector3"
android:text="已扫码完成支付"
android:textColor="#FFFFFF" />
</LinearLayout>
</FrameLayout>
</com.huntersun.vkyes.etcopencard.src.widget.StatusLayout>
</LinearLayout>

+ 1
- 1
app/src/main/res/layout/activity_logout_etc_success.xml Voir le fichier

@@ -9,7 +9,7 @@
<com.hjq.bar.TitleBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
android:background="@color/white"
app:leftIcon="@mipmap/back_black"
android:id="@+id/title"
app:lineVisible="false"

+ 152
- 0
app/src/main/res/layout/activity_pay_the_arrears_step1.xml Voir le fichier

@@ -0,0 +1,152 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
style="@style/MatchMatch.Vertical"
android:background="@color/background_color">

<com.hjq.bar.TitleBar
android:id="@+id/titleBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:leftIcon="@mipmap/back_black"
app:lineVisible="false"
app:title="欠费补缴"
app:titleColor="@color/black" />

<!--搜索框-->
<LinearLayout
android:id="@+id/LLSearch"
style="@style/MatchWrap.Horizontal"
android:layout_below="@+id/titleBar"
android:layout_marginVertical="@dimen/dp_15"
android:layout_marginRight="@dimen/dp_15"
android:gravity="center">

<LinearLayout
style="@style/AutoWrap.Horizontal"
android:layout_height="@dimen/dp_35"
android:layout_marginHorizontal="@dimen/dp_25"
android:background="@drawable/item_home_frame3"
android:gravity="center_vertical"
android:paddingHorizontal="@dimen/dp_12">

<ImageView
android:layout_width="@dimen/dp_15"
android:layout_height="@dimen/dp_15"
android:src="@drawable/search_ic" />

<com.hjq.widget.view.ClearEditText
android:id="@+id/etSearch"
style="@style/EditTextStyle"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
android:drawablePadding="@dimen/dp_10"
android:gravity="center_vertical"
android:hint="请输入订单编号/车牌号"
android:paddingTop="0dp"
android:paddingBottom="0dp"
android:textColor="@color/color_333333"
android:textColorHint="@color/color_999999"
android:textSize="@dimen/sp_12" />
</LinearLayout>

<Button
android:id="@+id/btnSearch"
style="@style/BtnShortStyle"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_35"
android:layout_gravity="center_vertical|right"
android:text="搜索"
android:textSize="@dimen/sp_12" />
</LinearLayout>

<com.huntersun.vkyes.etcopencard.src.widget.StatusLayout
android:id="@+id/hl_status_hint"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/LLSearch"
android:layout_marginBottom="@dimen/dp_45">

<com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/rl_status_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:srlEnablePreviewInEditMode="false">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecycleView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listCount="10"
tools:listitem="@layout/item_list_pay_the_arrears" />
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</com.huntersun.vkyes.etcopencard.src.widget.StatusLayout>

<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_height="@dimen/dp_45"
android:layout_alignParentBottom="true"
android:background="@drawable/bg_white_radius_top"
android:gravity="center_vertical"
android:paddingHorizontal="@dimen/dp_15">

<LinearLayout
android:id="@+id/LLChooseAll"
style="@style/AutoWrap.Horizontal"
android:layout_height="@dimen/dp_30"
android:gravity="center_vertical">

<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/cbAll"
style="@style/WrapWrap"
android:background="@null"
android:checked="false"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_13"
app:buttonCompat="@drawable/checkbox_selector" />

<TextView
style="@style/WrapWrap"
android:layout_marginLeft="@dimen/dp_10"
android:text="全选"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_13" />

</LinearLayout>

<TextView
style="@style/WrapWrap"
android:text="合计:"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_14" />

<TextView
style="@style/WrapWrap"
android:text="¥"
android:textStyle="bold"
android:textColor="#FF8000"
android:textSize="@dimen/sp_12" />

<TextView
android:id="@+id/tvTotalAmount"
style="@style/WrapWrap"
android:layout_marginLeft="@dimen/dp_8"
android:text="0.00"
android:textColor="#FF8000"
android:textSize="@dimen/sp_18"
android:textStyle="bold" />

<Button
android:id="@+id/btnPay"
style="@style/BtnShortStyle"
android:layout_width="@dimen/dp_67"
android:layout_height="@dimen/dp_25"
android:layout_gravity="center_vertical|center_horizontal"
android:layout_marginLeft="@dimen/dp_15"
android:text="合并支付"
android:textSize="@dimen/sp_12" />
</LinearLayout>
</RelativeLayout>

+ 226
- 0
app/src/main/res/layout/item_list_pay_the_arrears.xml Voir le fichier

@@ -0,0 +1,226 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/MatchWrap.Vertical"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginBottom="@dimen/dp_15"
android:background="@drawable/bg_white_radius"
android:paddingHorizontal="@dimen/dp_10">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45"
android:gravity="center_vertical"
android:paddingHorizontal="@dimen/dp_5">

<TextView
android:id="@+id/tvOrderId"
style="@style/WrapWrap"
android:text="20230010330"
android:layout_centerVertical="true"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_15" />

<!--bg_order_status_green、common_accent_color-->
<TextView
android:id="@+id/tvOrderStatus"
style="@style/WrapWrap"
android:layout_toRightOf="@+id/tvOrderId"
android:layout_marginLeft="@dimen/dp_20"
android:background="@drawable/bg_order_status_grey"
android:gravity="center"
android:layout_centerVertical="true"
android:paddingHorizontal="@dimen/dp_7"
android:paddingVertical="@dimen/dp_4"
android:text="待支付"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_11" />

<TextView
android:id="@+id/tvVehiclePlate"
style="@style/WrapWrap"
android:layout_alignParentRight="true"
android:text="贵A01234"
android:layout_centerVertical="true"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_14" />
</RelativeLayout>

<TextView
style="@style/MatchOne.HorLine"/>

<LinearLayout
style="@style/MatchWrap.Vertical"
android:paddingHorizontal="@dimen/dp_5">

<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_marginTop="@dimen/dp_10">
<TextView
style="@style/black02TextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="补缴单号" />
<TextView
android:id="@+id/tvBJId"
style="@style/blackTextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="01872753475754" />
</LinearLayout>
<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_marginTop="@dimen/dp_10">
<TextView
style="@style/black02TextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="补缴单生成时间" />
<TextView
android:id="@+id/tvInsertTime"
style="@style/blackTextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2023-01-12 15:09:18" />
</LinearLayout>
<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_marginTop="@dimen/dp_10">
<TextView
style="@style/black02TextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="通行金额" />
<TextView
android:id="@+id/tvAmount"
style="@style/blackTextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF8000"
android:text="¥20.00" />
</LinearLayout>
<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_marginTop="@dimen/dp_10">
<TextView
style="@style/black02TextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="服务费" />
<TextView
android:id="@+id/tvServiceAmount"
style="@style/blackTextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF8000"
android:text="¥20.00" />
</LinearLayout>

<!--路程-->
<LinearLayout
style="@style/MatchWrap.Horizontal"
android:gravity="center_vertical"
android:paddingVertical="@dimen/dp_15"
android:paddingHorizontal="@dimen/dp_17">

<LinearLayout
style="@style/WrapWrap.Vertical"
android:gravity="center">
<TextView
android:id="@+id/tvStartAddr"
style="@style/WrapWrap"
android:text="贵阳西"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_15"/>

<TextView
android:id="@+id/tvStartTime"
style="@style/WrapWrap"
android:text="12:09"
android:layout_marginTop="@dimen/dp_7"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_15"/>

<TextView
android:id="@+id/tvDate"
style="@style/WrapWrap"
android:text="2022-01-08"
android:textSize="@dimen/sp_12"
android:textColor="@color/color_666666"
android:layout_marginTop="@dimen/dp_7"/>
</LinearLayout>

<ImageView
style="@style/AutoWrap"
android:layout_marginHorizontal="@dimen/dp_40"
android:src="@mipmap/icon_long_arrow"/>

<LinearLayout
style="@style/WrapWrap.Vertical"
android:gravity="center">
<TextView
android:id="@+id/tvEndAddr"
style="@style/WrapWrap"
android:text="贵阳西"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_15"/>

<TextView
android:id="@+id/tvEndTime"
style="@style/WrapWrap"
android:text="12:09"
android:layout_marginTop="@dimen/dp_7"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_15"/>

<TextView
android:id="@+id/tvEndDate"
style="@style/WrapWrap"
android:text="2022-01-08"
android:textSize="@dimen/sp_12"
android:textColor="@color/color_666666"
android:layout_marginTop="@dimen/dp_7"/>
</LinearLayout>

</LinearLayout>
<TextView style="@style/MatchOne.HorLine"/>

<!--合计-->
<LinearLayout
style="@style/MatchWrap.Horizontal"
android:gravity="center_vertical"
android:layout_height="@dimen/dp_45">
<TextView
style="@style/WrapWrap"
android:text="合计:"
android:textSize="@dimen/sp_14"
android:textColor="@color/color_333333"/>
<TextView
style="@style/WrapWrap"
android:text="¥"
android:textSize="@dimen/sp_12"
android:textColor="#FF8000"/>

<TextView
android:id="@+id/tvTotalAmount"
style="@style/AutoWrap"
android:text="0.00"
android:textSize="@dimen/sp_18"
android:textColor="#FF8000"
android:layout_marginLeft="@dimen/dp_8"
android:textStyle="bold"/>

<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/cbChoose"
style="@style/WrapWrap"
android:text=""
android:background="@null"
android:checked="false"
app:buttonCompat="@drawable/checkbox_selector" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

+ 150
- 0
app/src/main/res/layout/layout_pay_the_arrears_info.xml Voir le fichier

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/MatchWrap.Vertical"
android:background="@drawable/bg_white_radius"
android:paddingHorizontal="@dimen/dp_15">

<LinearLayout
style="@style/MatchWrap.Horizontal"
android:gravity="center_vertical"
android:paddingHorizontal="@dimen/dp_15"
android:paddingVertical="@dimen/dp_15">

<LinearLayout
style="@style/WrapWrap.Vertical"
android:gravity="center">

<TextView
android:id="@+id/tvStartAddr"
style="@style/WrapWrap"
android:text="贵阳西"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_15" />

<TextView
android:id="@+id/tvStartTime"
style="@style/WrapWrap"
android:layout_marginTop="@dimen/dp_7"
android:text="12:09"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_15" />

<TextView
android:id="@+id/tvDate"
style="@style/WrapWrap"
android:layout_marginTop="@dimen/dp_7"
android:text="2022-01-08"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_12" />
</LinearLayout>

<ImageView
style="@style/AutoWrap"
android:layout_marginHorizontal="@dimen/dp_40"
android:src="@mipmap/icon_long_arrow" />

<LinearLayout
style="@style/WrapWrap.Vertical"
android:gravity="center">

<TextView
android:id="@+id/tvEndAddr"
style="@style/WrapWrap"
android:text="贵阳西"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_15" />

<TextView
android:id="@+id/tvEndTime"
style="@style/WrapWrap"
android:layout_marginTop="@dimen/dp_7"
android:text="12:09"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_15" />

<TextView
android:id="@+id/tvEndDate"
style="@style/WrapWrap"
android:layout_marginTop="@dimen/dp_7"
android:text="2022-01-08"
android:textColor="@color/color_666666"
android:textSize="@dimen/sp_12" />
</LinearLayout>
</LinearLayout>

<TextView style="@style/MatchOne.HorLine" />

<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_height="@dimen/dp_45"
android:gravity="center_vertical">

<TextView
style="@style/black02TextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="通行金额" />

<TextView
android:id="@+id/tvAmount"
style="@style/blackTextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥0.00"
android:textColor="#FF8000" />
</LinearLayout>

<TextView style="@style/MatchOne.HorLine" />

<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_height="@dimen/dp_45"
android:gravity="center_vertical">

<TextView
style="@style/black02TextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="服务费" />

<TextView
android:id="@+id/tvServiceAmount"
style="@style/blackTextStyle14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥0.00"
android:textColor="#FF8000" />
</LinearLayout>

<TextView style="@style/MatchOne.HorLine" />

<LinearLayout
style="@style/MatchWrap.Horizontal"
android:layout_height="@dimen/dp_45"
android:gravity="center_vertical|right">

<TextView
style="@style/WrapWrap"
android:text="合计:"
android:textColor="@color/color_333333"
android:textSize="@dimen/sp_14" />

<TextView
style="@style/WrapWrap"
android:text="¥"
android:textColor="#FF8000"
android:textSize="@dimen/sp_12" />

<TextView
android:id="@+id/tvTotalAmount"
style="@style/WrapWrap"
android:layout_marginLeft="@dimen/dp_8"
android:text="0.00"
android:textColor="#FF8000"
android:textSize="@dimen/sp_18"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>


BIN
app/src/main/res/mipmap-xhdpi/icon_long_arrow.png Voir le fichier


BIN
app/src/main/res/mipmap-xhdpi/icon_up_grey.png Voir le fichier


Chargement…
Annuler
Enregistrer