Files
HouseProperty/app/src/main/java/my_view/ConfirmCarmoneyDialog.java

545 lines
19 KiB
Java
Raw Normal View History

2020-08-03 09:11:54 +08:00
package my_view;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.inputmethodservice.KeyboardView;
import android.os.Bundle;
import android.text.InputType;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import com.cutil.StringUtils;
import com.google.gson.Gson;
import com.google.gson.internal.LinkedTreeMap;
import com.selectpicker.OptionsPopupWindow;
import com.sl.house_property.R;
import com.sl.house_property.f1.CarragelistActivity;
import com.sl.house_property.f2.PropertyFeeActivity;
import com.sl.house_property.user.MyPayActivity;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import entity.RegisterUser;
import http.ApiConfig;
import my_loader.Loader;
import my_loader.Resultcode;
import rx.Subscription;
import rx.functions.Action1;
import tools.Config;
import tools.DateTimeUtils;
import utils.Constants;
import utils.KeyboardUtil;
import utils.Md5;
public class ConfirmCarmoneyDialog extends Dialog {
private CarragelistActivity context;
private String title1;
private String title2;
private String title3;
private String title4;
private String confirmButtonText;
private String cacelButtonText;
private ClickListenerInterface clickListenerInterface;
private KeyboardUtil keyboardUtil;
private EditText carNoEditText;
private EditText starttimeText, endtimeText;
private View rootView;
private OptionsPopupWindow alarmOptionPop;
private ProgressDialog progressDialog;
private Loader mGankLoader;
private String rentId;
private String defaultStartTime;
private String defaultEndTime;
private double price;
public interface ClickListenerInterface {
public void doConfirm();
public void doCancel();
}
public ConfirmCarmoneyDialog(CarragelistActivity context, String title1, String rent_id, String startTime, String endTime, double price) {
super(context, R.style.MyDialog);
progressDialog = new ProgressDialog(context);
this.context = context;
this.title1 = title1;
this.rentId = rent_id;
this.defaultStartTime = startTime;
this.defaultEndTime = endTime;
this.price = price;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
init();
carNoEditText = (EditText) findViewById(R.id.car_no_input);
carNoEditText.setOnFocusChangeListener(new android.view.View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
hideKeyboard(v);
showCarNoInput();
} else {
keyboardUtil.hideKeyboard();
}
}
});
carNoEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (keyboardUtil != null && !keyboardUtil.isShow()) {
showCarNoInput();
}
}
});
starttimeText = (EditText) findViewById(R.id.starttime);
starttimeText.setInputType(InputType.TYPE_NULL);
starttimeText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showStartTimeDialog();
}
});
starttimeText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
showStartTimeDialog();
}
}
});
endtimeText = (EditText) findViewById(R.id.endtime);
endtimeText.setInputType(InputType.TYPE_NULL);
endtimeText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showEndTimeDialog();
}
});
endtimeText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
showEndTimeDialog();
}
}
});
findViewById(R.id.confirmBtn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
submitData();
}
});
}
private boolean checkTimeRange(String startTime, String endTime, String selectTime) {
String[] startTimeArray = startTime.split(":");
String[] endTimeArray = endTime.split(":");
String[] selectTimeArray = selectTime.split(":");
// 统一转化为分钟进行对比
Long startTimeM = Long.parseLong(startTimeArray[0]) * 60 + Long.parseLong(startTimeArray[1]);
Long endTimeM = Long.parseLong(endTimeArray[0]) * 60 + Long.parseLong(endTimeArray[1]);
Long selectTimeM = Long.parseLong(selectTimeArray[0]) * 60 + Long.parseLong(selectTimeArray[1]);
if (selectTimeM < startTimeM || selectTimeM > endTimeM) {
return false;
}
return true;
}
private void showEndTimeDialog() {
CharSequence timeObj = endtimeText.getText();
String timeStr = timeObj.toString().trim();
String[] timeArr = timeStr.split(":");
final DateTimeUtils dateTimeUtils = new DateTimeUtils(context);
if (timeObj != null && !"".equals(timeObj.toString().trim())) {
dateTimeUtils.showTimePickerDialog(new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
endTimeSelected(i, i1);
}
}, Integer.parseInt(timeArr[0]), Integer.parseInt(timeArr[1]));
} else {
dateTimeUtils.showTimePickerDialog(new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
endTimeSelected(i, i1);
}
});
}
}
/**
* 结束时间选中业务处理
* @param i
* @param i1
*/
private void endTimeSelected(int i, int i1) {
String min = "0";
if (i1 < 10) {
min += i1;
} else {
min = i1 + "";
}
String selectTime = i + ":" + min;
if (!checkTimeRange(defaultStartTime, defaultEndTime, selectTime)) {
context.setToast("请选择规定范围内的时间!");
return;
}
if (!checkHalfHour(starttimeText.getText().toString(),selectTime)){
context.setToast("停车时间不能小于30分钟!");
return;
}
endtimeText.setText(selectTime);
updateAmount();
}
private void showStartTimeDialog() {
CharSequence timeObj = starttimeText.getText();
final DateTimeUtils dateTimeUtils = new DateTimeUtils(context);
if (timeObj != null && !"".equals(timeObj.toString().trim())) {
String timeStr = timeObj.toString().trim();
String[] timeArr = timeStr.split(":");
dateTimeUtils.showTimePickerDialog(new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
startTimeSelected(i, i1);
}
}, Integer.parseInt(timeArr[0]), Integer.parseInt(timeArr[1]));
} else {
dateTimeUtils.showTimePickerDialog(new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
startTimeSelected(i, i1);
}
});
}
}
/**
* 开始时间选择业务处理
* @param i
* @param i1
*/
private void startTimeSelected(int i, int i1) {
String min = "0";
if (i1 < 10) {
min += i1;
} else {
min = i1 + "";
}
String selectTime = i + ":" + min;
if (!checkTimeRange(defaultStartTime, defaultEndTime, selectTime)) {
context.setToast("请选择规定范围内的时间!");
return;
}
if (!checkHalfHour(selectTime,endtimeText.getText().toString())){
context.setToast("停车时间不能小于30分钟!");
return;
}
starttimeText.setText(selectTime);
updateAmount();
}
private void showTimeAlert() {
final ArrayList<String> stringList = new ArrayList();
for (int i = 1; i <= 12; i++) {
stringList.add(i + "小时");
}
alarmOptionPop = new OptionsPopupWindow(context);
alarmOptionPop.setPicker(stringList);
alarmOptionPop.setOnoptionsSelectListener(new OptionsPopupWindow.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int position, int option2, int options3) {
// ((EditText) findViewById(R.id.hour_stop)).setText(stringList.get(position));
}
});
int height = alarmOptionPop.getContentView().getMeasuredHeight();
alarmOptionPop.getContentView().measure(0, 0);
alarmOptionPop.showAtLocation(carNoEditText, Gravity.BOTTOM, 0, -height);
}
private void showCarNoInput() {
keyboardUtil = new KeyboardUtil((Activity) context, (KeyboardView) rootView.findViewById(R.id.keyboard_view), carNoEditText);
keyboardUtil.hideSoftInputMethod();
keyboardUtil.showKeyboard();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (keyboardUtil != null && keyboardUtil.isShow()) {
keyboardUtil.hideKeyboard();
} else {
cancel();
}
}
return false;
}
public static void hideKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
public void init() {
LayoutInflater inflater = LayoutInflater.from(context);
rootView = inflater.inflate(R.layout.confirmcarmoney, null);
setContentView(rootView);
Window dialogWindow = getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
DisplayMetrics d = context.getResources().getDisplayMetrics(); // 获取屏幕宽、高用
lp.width = (int) (d.widthPixels); // 高度设置为屏幕的0.6
dialogWindow.setAttributes(lp);
}
public void setClicklistener(ClickListenerInterface clickListenerInterface) {
this.clickListenerInterface = clickListenerInterface;
}
private class ClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int id = v.getId();
switch (id) {
case R.id.title1:
clickListenerInterface.doConfirm();
break;
}
}
}
private void updateAmount() {
String startTime = starttimeText.getText().toString();
String endTime = endtimeText.getText().toString();
if (!com.cutil.StringUtils.isTrimEmpty(startTime) && !com.cutil.StringUtils.isTrimEmpty(endTime)) {
StopResultInfo stopResultInfo = culAmount();
if (stopResultInfo != null && stopResultInfo.getStopAmount() != null) {
((TextView) findViewById(R.id.amountText)).setText("¥" + stopResultInfo.getStopAmount() + "");
}
} else {
((TextView) findViewById(R.id.amountText)).setText("¥0");
}
}
private boolean checkHalfHour(String startTimeStr,String endTimeStr) {
StopResultInfo stopResultInfo = null;
if (!com.cutil.StringUtils.isTrimEmpty(startTimeStr) && !com.cutil.StringUtils.isTrimEmpty(endTimeStr)) {
String[] startTimeArray = startTimeStr.split(":");
String[] endTimeArray = endTimeStr.split(":");
int startHour = Integer.parseInt(startTimeArray[0]);
int endHour = Integer.parseInt(endTimeArray[0]);
int startM = Integer.parseInt(startTimeArray[1]);
int endM = Integer.parseInt(endTimeArray[1]);
// 分钟计算
int timeLong = (endHour - startHour) * 60 + (endM - startM);
// 计算小时计费单位超过30分钟算一个小时,不足30分钟不计费
if (timeLong < 30) {
return false;
}
}
return true;
}
private StopResultInfo culAmount() {
StopResultInfo stopResultInfo = null;
String startTime = starttimeText.getText().toString();
if (com.cutil.StringUtils.isTrimEmpty(startTime)) {
context.setToast("请选择开始时间!");
return stopResultInfo;
}
String endTime = endtimeText.getText().toString();
if (com.cutil.StringUtils.isTrimEmpty(endTime)) {
context.setToast("请选择结束时间!");
return stopResultInfo;
}
String[] startTimeArray = startTime.split(":");
String[] endTimeArray = endTime.split(":");
int startHour = Integer.parseInt(startTimeArray[0]);
int endHour = Integer.parseInt(endTimeArray[0]);
if (startHour > endHour) {
context.setToast("开始时间必须小于结束时间!");
return stopResultInfo;
}
int startM = Integer.parseInt(startTimeArray[1]);
int endM = Integer.parseInt(endTimeArray[1]);
if (startHour == endHour && startM >= endM) {
context.setToast("开始时间必须小于结束时间!");
return stopResultInfo;
}
// 分钟计算
int timeLong = (endHour - startHour) * 60 + (endM - startM);
// 计算小时计费单位超过30分钟算一个小时,不足30分钟不计费
if (timeLong < 30) {
context.setToast("停车时间不能小于30分钟!");
return stopResultInfo;
}
// 计费规则可以理解为没个小时的后半个小时才开始叠加计费,所以可以用如下算法来表示
long unitTime = ((timeLong - 30) / 60) + 1;
double amount = unitTime * price;
return new StopResultInfo(timeLong, amount);
}
private void submitData() {
// check data
String carNo = carNoEditText.getText().toString();
if (com.cutil.StringUtils.isTrimEmpty(carNo)) {
context.setToast("请输入车牌号!");
return;
}
StopResultInfo stopResultInfo = culAmount();
if (stopResultInfo == null) {
return;
}
RegisterUser user =
Config.getInstance(context).getUser();
Map<String, String> map = new HashMap<>();
if (user != null) {
map.put("userid", user.getUserid());
} else {
map.put("userid", 0 + "");
}
map.put("rent_id", rentId);
map.put("cart_number", carNo);
map.put("stop_time", stopResultInfo.getStopLong() + "");
map.put("stop_amount", stopResultInfo.getStopAmount() + "");
map.put("start_stop_time", defaultStartTime);
map.put("end_stop_time", defaultEndTime);
map.put("app", "Garage");
map.put("class", "Garage_an_AddGarageOrder");
map.put("sign", Md5.md5("Garage" + "Garage_an_AddGarageOrder" + Md5.secret));
getGankList(ApiConfig.BASE_URL, map, "数据提交中...", carNoEditText.getId());
}
private void getGankList(String myurl, Map<String, String> map, String msg, final int requstecode) {
progressDialog.setMessage(msg);
progressDialog.setCancelable(false);
progressDialog.show();
mGankLoader = new Loader();
Subscription subscription = mGankLoader.getMovie(myurl, map).subscribe(new Action1<Resultcode>() {
@Override
public void call(Resultcode resultcode) {
progressDialog.dismiss();
if (!(resultcode.status == 0)) {
context.setToast(1, resultcode.msg);
}
if (resultcode.status == 0) {
// context.setToast("提交成功!");
LinkedTreeMap data = (LinkedTreeMap) resultcode.data;
String s = new Gson().toJson(data);
try {
JSONObject jsonObject = new JSONObject(s);
String orderSn = jsonObject.getString("order_sn");
String stopAmount = jsonObject.getString("stop_amount");
gotoPay(orderSn, stopAmount);
} catch (JSONException e) {
e.printStackTrace();
}
dismiss();
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
progressDialog.dismiss();
context.setToast(2, context.getString(R.string.getdatafailure));
throwable.printStackTrace();
}
});
context.addSubscription(subscription);
}
private void gotoPay(String orderSn, String stopAmount) {
// 跳转支付选择界面
Intent intent = new Intent(context, MyPayActivity.class);
if (StringUtils.isTrimEmpty(orderSn) || StringUtils.isTrimEmpty(stopAmount) || Double.parseDouble(stopAmount) <= 0) {
context.setToast(2, "数据异常!");
return;
}
intent.putExtra("payNumber", stopAmount);
intent.putExtra("title", "停车费");
intent.putExtra("orderSn", orderSn);
intent.putExtra("feeCategory", Constants.FeeCategory.PARKING_FEE);
context.startActivityForResult(intent,Constants.PAY_REQUEST_CODE);
}
public class StopResultInfo {
private Integer stopLong;
private Double stopAmount;
private StopResultInfo(Integer stopLong, Double stopAmount) {
this.stopAmount = stopAmount;
this.stopLong = stopLong;
}
public Integer getStopLong() {
return stopLong;
}
public void setStopLong(Integer stopLong) {
this.stopLong = stopLong;
}
public Double getStopAmount() {
return stopAmount;
}
public void setStopAmount(Double stopAmount) {
this.stopAmount = stopAmount;
}
}
}