545 lines
19 KiB
Java
545 lines
19 KiB
Java
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;
|
||
}
|
||
}
|
||
|
||
} |