Files
HouseProperty/app/src/main/java/my_view/ConfirmCarmoneyDialog.java
2020-08-03 09:11:54 +08:00

545 lines
19 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}
}