package com.xiaomi.xms.sales.ui;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.StreamCorruptedException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.util.Base64;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.xiaomi.xms.sales.R;
import com.xiaomi.xms.sales.activity.OrderEditActivity;
import com.xiaomi.xms.sales.loader.PackedLoader;
import com.xiaomi.xms.sales.loader.PayCheckLoader;
import com.xiaomi.xms.sales.loader.PosPayLoader;
import com.xiaomi.xms.sales.model.PosHistory;
import com.xiaomi.xms.sales.request.HostManager;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.util.LogHelper;
import com.xiaomi.xms.sales.util.LogUtil;
import com.xiaomi.xms.sales.util.ToastUtil;
import com.xiaomi.xms.sales.util.Utils;
import com.xiaomi.xms.sales.widget.EmptyLoadingView;
import com.xiaomi.xms.sales.xmsf.account.LoginManager;
import com.yeepay.bluetooth.pos.controll.BizConstant;
import com.yeepay.bluetooth.pos.controll.IController;
import com.yeepay.bluetooth.pos.controll.Me31Controller;
import com.yeepay.bluetooth.pos.user.BizResult;
import com.yeepay.bluetooth.pos.user.OnUserCallback;
public class PaymentPosFragment extends BaseFragment{
private static final String TAG = "PaymentPosFragment";
private static final int PACKED_INFO_LOADER = 0;
private static final int POS_PAY_LOADER = 1;
private static final int PAY_CHECK = 1000;
private static final int GET_ORDER_INFO = 1001;
private static final int SAVE_PRINTER = 100;
private static final int CONNECTLOST = 1;
private static final int CLOSEDIALOG = 2;
private static final int PRINTSTART = 3;
private static final int PRINTEND = 4;
private static final int DOUBLEPAID = 5;
private TextView mMerchantName;
private TextView mOrderId;
private TextView mOrderTime;
private TextView mPosName;
private TextView mPosFee;
private Button mSubmitBtn;
private IController mController;
private ProgressDialog mProgressDialog;
private String mFee;
private String mOrderIdStr;
private Handler mHandler;
private int orderType;
private String printerIP;
private EmptyLoadingView mLoadingView;
private Bundle bundle;
private String info;
String posInfo;
PosHistory savedPosHistory;
private String mUserId;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.payment_pos_fragment, container, false);
mMerchantName = (TextView) view.findViewById(R.id.payment_pos_merchant_name);
mOrderId = (TextView) view.findViewById(R.id.payment_order_id);
mOrderTime = (TextView) view.findViewById(R.id.payment_order_add_time);
mPosName = (TextView) view.findViewById(R.id.payment_pos_name);
mPosFee = (TextView) view.findViewById(R.id.payment_pos_fee);
mSubmitBtn = (Button) view.findViewById(R.id.payment_pos_submit);
handleIntent();
mController = Me31Controller.getInstance();
mController.setUserCallback(mOnUserCallback);
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setCancelable(false);
mLoadingView = (EmptyLoadingView) view.findViewById(R.id.loading);
mUserId = LoginManager.getInstance().getUserId();
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mHandler = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case CONNECTLOST:
// 如果蓝牙断开了连接,则取消所有的任务
mProgressDialog.dismiss();
mController.cancelTask();
if (getActivity() != null) {
ToastUtil.show(getActivity(), "蓝牙连接断开了");
}
break;
case DOUBLEPAID:
// 如果已经支付过,则取消所有的任务
mProgressDialog.dismiss();
mController.cancelTask();
if (getActivity() != null) {
ToastUtil.show(getActivity(), "已经支付成功,不得重复支付,请到订单详情同步后台信息");
}
break;
case CLOSEDIALOG:
mProgressDialog.dismiss();
break;
case PRINTSTART:
mProgressDialog.dismiss();
switch (msg.arg1) {
case BizConstant.BIZ_SIGNIN:
break;
case BizConstant.BIZ_CONSUME:
mProgressDialog.setMessage("付款成功,正在打印购物小票, 请稍等...");
mProgressDialog.show();
break;
case BizConstant.BIZ_CONSUME_REVERSE:
ToastUtil.show(getActivity(), "交易冲正");
break;
case BizConstant.BIZ_CANCEL_CONSUME:
ToastUtil.show(getActivity(), "消费撤销");
break;
default:
break;
}
break;
case PRINTEND:
mProgressDialog.dismiss();
switch (msg.arg1) {
case BizConstant.BIZ_CONSUME_REVERSE:
ToastUtil.show(getActivity(), "交易冲正");
break;
case BizConstant.BIZ_CANCEL_CONSUME:
ToastUtil.show(getActivity(), "消费撤销");
break;
case BizConstant.BIZ_PRINT:
case BizConstant.BIZ_CONSUME:
Intent intent = new Intent(getActivity(),OrderEditActivity.class);
intent.setAction(Constants.Intent.ACTION_ORDER_EDIT);
intent.putExtra(Constants.Intent.EXTRA_PAYMENT_ORDER_ID,mOrderIdStr);
intent.putExtra(Constants.Intent.EXTRA_ORDER_TYPE,orderType);
intent.putExtra(Constants.Intent.EXTRA_ORDER_EDIT_ACTION,"ADD");
intent.putExtra(Constants.Intent.EXTRA_PRINTER_IP, printerIP);
startActivity(intent);
if (getActivity() != null) {
getActivity().finish();
}
break;
default:
break;
}
break;
default:
break;
}
return false;
}
});
mSubmitBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
payAction();
}
});
if (mController.isConnected()) {
try{
posInfo = mController.getPosInfo();
String[] data = posInfo.split("\\|");
mMerchantName.setText(data[2]);
}catch(Exception e){
posInfo = "";
}
}
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,Constants.LogType.BIZ_SIGNIN,"","");
} catch (Exception e) {
e.printStackTrace();
}
mController.setServerIp(HostManager.YeePay.SERVERIP, HostManager.YeePay.SERVERPORT);
mController.signIn();
/*
* long signinTime = Utils.Preference.getLongPref(getActivity(),
* Constants.Prefence.PREF_PAYMENT_POS_SIGNIN_TIME, 0); if (signinTime
* == 0 || System.currentTimeMillis() - signinTime > 0.5 *
* Constants.DAY_IN_MILLIS) {
* mController.setServerIp(HostManager.YeePay.SERVERIP,
* HostManager.YeePay.SERVERPORT); mController.signIn(); } else {
* setSumbitButtonAttribute(true, R.string.bluetooth_pos_submit); }
*/
}
private void handleIntent() {
bundle = getArguments();
if (bundle != null) {
mFee = bundle.getString(Constants.Intent.EXTRA_PAYMENT_ORDER_TOTAL_PRICE);
mOrderIdStr = bundle.getString(Constants.Intent.EXTRA_PAYMENT_ORDER_ID);
orderType = bundle.getInt(Constants.Intent.EXTRA_ORDER_TYPE);
printerIP = bundle.getString(Constants.Intent.EXTRA_PRINTER_IP);
mOrderId.setText(mOrderIdStr);
mPosFee.setText("¥ " + mFee);
mPosName.setText(bundle.getString(Constants.Intent.EXTRA_PAYMENT_POS_BLUETOOTH_NAME));
mOrderTime.setText(bundle.getString(Constants.Intent.EXTRA_PAYMENT_ORDER_ADD_TIME));
}
}
/**
* 支付验证并处理后续流程
*/
public void payAction(){
mSubmitBtn.setEnabled(false);
getLoaderManager().restartLoader(PAY_CHECK,null, new LoaderCallbacks<PayCheckLoader.Result>() {
@SuppressWarnings("unchecked")
@Override
public Loader<PayCheckLoader.Result> onCreateLoader(int id, Bundle bundle) {
if (id == PAY_CHECK ) {
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,Constants.LogType.PAY_CHECK_START,"","");
} catch (Exception e) {
e.printStackTrace();
}
mLoader = new PayCheckLoader(getActivity(),mOrderIdStr);
mLoader.setNeedDatabase(false);
mLoader.setProgressNotifiable(mLoadingView);
return (Loader<PayCheckLoader.Result>) mLoader;
}
return null;
}
@Override
public void onLoadFinished(Loader<PayCheckLoader.Result> loader,PayCheckLoader.Result data) {
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,Constants.LogType.PAY_CHECK_END,"",data.responseInfo);
} catch (Exception e) {
e.printStackTrace();
}
if(data.responseInfo.equals("ok")){
if (TextUtils.equals(mSubmitBtn.getText(), getString(R.string.bluetooth_pos_submit))) {
if(!isOrderPaid()){
setSumbitButtonAttribute(false, R.string.doing_payment_pos);
mController.setServerIp(HostManager.YeePay.SERVERIP, HostManager.YeePay.SERVERPORT);
mController.consume(Float.valueOf(mFee), mOrderIdStr);
}else{
ToastUtil.show(getActivity(), "此订单已经支付成功,不得重复支付,请截屏并联系开发人员");
}
} else if (TextUtils.equals(mSubmitBtn.getText(), getString(R.string.bluetooth_pos_reprint))) {
mSubmitBtn.setEnabled(false);
mController.printPre();
}
else if (TextUtils.equals(mSubmitBtn.getText(),getString(R.string.bluetooth_pos_resign))) { //重新签到
mSubmitBtn.setEnabled(false);
mController.signIn();
}
}else{
ToastUtil.show(getActivity(), data.responseInfo);
mSubmitBtn.setEnabled(true);
}
}
@Override
public void onLoaderReset(Loader<PayCheckLoader.Result> arg0) {
}
});
}
private boolean isOrderPaid() {
String preOrderId = Utils.Preference.getStringPref(getActivity(), Constants.Prefence.PREF_PREVIOUS_PAID_ORDER_ID, "");
if(preOrderId == null){
return false;
}
if(mOrderIdStr.equals(preOrderId)){
return true;
}
return false;
}
private OnUserCallback mOnUserCallback = new OnUserCallback() {
@Override
public void onTestData(final int bizType, final String data) {
LogUtil.i(TAG, "onTestData bizType = " + getBizType(bizType));
LogUtil.i(TAG, "onTestData data = " + data);
}
@Override
public void onSuccess(int bizType, BizResult result) {
LogUtil.i(TAG, "onSuccess bizType = " + getBizType(bizType));
LogUtil.i(TAG, "onSuccess BizResult = " + result);
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,getBizTypeCode(bizType)+"_SUCCESS",mFee+"_"+orderType+"_"+posInfo+"_"+bizType,result.toString());
} catch (Exception e) {
e.printStackTrace();
}
mHandler.sendEmptyMessage(CLOSEDIALOG);
/**
* 这个接口如果是消费类型的话回调不一定代表成功消费 只是代表期间没有异常,需要判断mSuccess是否为TRUE
*/
switch (bizType) {
case BizConstant.BIZ_SIGNIN:
if(result.mSuccess){
setSumbitButtonAttribute(true, R.string.bluetooth_pos_submit);
Utils.Preference.setLongPref(getActivity(),
Constants.Prefence.PREF_PAYMENT_POS_SIGNIN_TIME, System.currentTimeMillis());
}
else{
// 需要重新签到
ToastUtil.show(getActivity(), R.string.payment_pos_error_sigin);
setSumbitButtonAttribute(true, R.string.bluetooth_pos_resign);
}
break;
case BizConstant.BIZ_CONSUME:
if (result.mSuccess) {
setSumbitButtonAttribute(false, R.string.payment_pos_success);
JSONObject dataJson = new JSONObject();
try {
JSONObject jsonObj = new JSONObject();
jsonObj.put("success", result.mSuccess);
jsonObj.put("amount", result.mAmount);
jsonObj.put("code", result.mCode);
jsonObj.put("codemessage", result.mCodeMessage);
jsonObj.put("refno", result.mRefNo);
jsonObj.put("info", result);
jsonObj.put("posInfo", posInfo);
dataJson.put("data", jsonObj);
info = dataJson.toString();
} catch (JSONException e) {
e.printStackTrace();
}
/* Intent intent = new Intent(getActivity(), ShopIntentService.class);
intent.setAction(Constants.Intent.ACTION_ORDER_PAYMENT_SUCCESS);
intent.putExtra(Constants.Intent.EXTRA_PAYMENT_ORDER_ID, mOrderIdStr);
intent.putExtra(Constants.Intent.EXTRA_PAYMENT_POS_SUCCESS_INFO, dataJson.toString());
getActivity().startService(intent);
*/
ToastUtil.show(getActivity(), "消费成功,交易流水号是:"+result.mRefNo);
Utils.Preference.setStringPref(getActivity(),
Constants.Prefence.PREF_PREVIOUS_PAID_ORDER_ID, mOrderIdStr);
backUpOrderIdRefNo(result,info);
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,Constants.LogType.BACK_UP_POS_INFO,mFee+"_"+orderType+"_"+posInfo+"_"+result.mSuccess,result.toString());
} catch (Exception e) {
e.printStackTrace();
}
addPosInfoPackOut();
} else {
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,Constants.LogType.CONSUME_RESULT_FALSE,mFee+"_"+orderType+"_"+posInfo+"_"+result.mSuccess,result.toString());
} catch (Exception e) {
e.printStackTrace();
}
setSumbitButtonAttribute(true, R.string.bluetooth_pos_submit);
if (result.mTmsUpdateFlag) {
mController.setServerIp(HostManager.YeePay.SERVERIP, HostManager.YeePay.SERVERPORT);
mController.tmsRequest();
} else {
if ("63".equals(result.mCode)) {
// 需要重新签到
ToastUtil.show(getActivity(), R.string.payment_pos_error_needsigin_info);
mController.setServerIp(HostManager.YeePay.SERVERIP, HostManager.YeePay.SERVERPORT);
mController.signIn();
} else {
ToastUtil.show(getActivity(), "支付失败," + result.mCodeMessage);
}
}
}
break;
case BizConstant.BIZ_CONSUME_REVERSE:
ToastUtil.show(getActivity(), "交易冲正");
break;
case BizConstant.BIZ_CANCEL_CONSUME:
ToastUtil.show(getActivity(), "消费撤销");
break;
default:
break;
}
}
private void addPosInfoPackOut() {
getLoaderManager().initLoader(POS_PAY_LOADER, null, new LoaderCallbacks<PosPayLoader.Result>() {
final String serviceNumber = mOrderIdStr;
final int ordertype = orderType;
final String printerip = printerIP;
final EmptyLoadingView loadingView = mLoadingView;
@Override
public PosPayLoader onCreateLoader(int id,Bundle arg1) {
if(id == POS_PAY_LOADER){
try {
LogHelper.getInstance(getActivity()).save((System.currentTimeMillis() +","+serviceNumber+","+Constants.LogType.ADD_PAYINTO_BEDIN+","+serviceNumber+"_"+printerip).getBytes());
} catch (Exception e) {
e.printStackTrace();
}
PosPayLoader posPayLoader = new PosPayLoader(getActivity(),serviceNumber,info);
posPayLoader.setNeedDatabase(false);
posPayLoader.setProgressNotifiable(loadingView);
return posPayLoader;
}
return null;
}
@Override
public void onLoadFinished(Loader<PosPayLoader.Result> loader,PosPayLoader.Result data) {
if(data != null && data.responseInfo != null && data.responseInfo.equalsIgnoreCase("OK")){
ArrayList<PosHistory> posHistoryList = getPosHistoryList();
if(posHistoryList != null && savedPosHistory != null){
posHistoryList.remove(savedPosHistory);
savePosHistoryList(posHistoryList);
}
try {
LogHelper.getInstance(getActivity()).save((System.currentTimeMillis() +","+serviceNumber+","+Constants.LogType.ADD_PAYINTO_END+","+serviceNumber+"_"+printerip).getBytes());
} catch (Exception e) {
e.printStackTrace();
}
if (ordertype == 2) { // 现货销售的才会自动配货出库等
getLoaderManager().initLoader(PACKED_INFO_LOADER, null,new LoaderCallbacks<PackedLoader.Result>() {
@Override
public PackedLoader onCreateLoader(int id, Bundle arg1) {
if (id == PACKED_INFO_LOADER) {
try {
LogHelper.getInstance(getActivity()).save((System.currentTimeMillis() +","+serviceNumber+","+Constants.LogType.PACKED_INFO_LOADER_BEGIN+","+serviceNumber+"_"+printerip).getBytes());
} catch (Exception e) {
e.printStackTrace();
}
PackedLoader packedLoader = new PackedLoader(getActivity(),serviceNumber);
packedLoader.setNeedDatabase(false);
packedLoader.setProgressNotifiable(loadingView);
return packedLoader;
}
return null;
}
@Override
public void onLoadFinished(Loader<PackedLoader.Result> loader,PackedLoader.Result data) {
LogUtil.d(TAG, "info loaded.");
if (data != null && data.responseInfo != null&& data.responseInfo.equalsIgnoreCase("OK")) {
try {
LogHelper.getInstance(getActivity()).save((System.currentTimeMillis() +","+serviceNumber+","+Constants.LogType.PACKED_INFO_LOADER_END+","+serviceNumber+"_"+printerip).getBytes());
} catch (Exception e) {
e.printStackTrace();
}
ToastUtil.show(getActivity(), "配货完成");
// Intent intent = new Intent(getActivity(),OrderEditActivity.class);
// intent.setAction(Constants.Intent.ACTION_ORDER_EDIT);
// intent.putExtra(Constants.Intent.EXTRA_PAYMENT_ORDER_ID,serviceNumber);
// intent.putExtra(Constants.Intent.EXTRA_ORDER_TYPE,ordertype);
// intent.putExtra(Constants.Intent.EXTRA_ORDER_EDIT_ACTION,"ADD");
// intent.putExtra(Constants.Intent.EXTRA_PRINTER_IP, printerip);
// startActivity(intent);
// if (getActivity() != null) {
// getActivity().finish();
// }
}
else {
ToastUtil.show(getActivity(), "配货失败,请在订单详情界面选择重新配货");
// Intent intent = new Intent(getActivity(), OrderListActivity.class);
// intent.setAction(Constants.Intent.ACTION_VIEW_ORDER);
// intent.putExtra(Constants.Intent.EXTRA_ORDER_TYPE, ordertype);
// intent.putExtra(Constants.Intent.EXTRA_PAYMENT_ORDER_ID, serviceNumber);
// startActivity(intent);
// if (getActivity() != null) {
// getActivity().finish();
// }
}
}
@Override
public void onLoaderReset(Loader<PackedLoader.Result> loader) {
}
});
}
// else{
// Intent intent = new Intent(getActivity(), OrderEditActivity.class);
// intent.setAction(Constants.Intent.ACTION_ORDER_EDIT);
// intent.putExtra(Constants.Intent.EXTRA_PAYMENT_ORDER_ID, serviceNumber);
// intent.putExtra(Constants.Intent.EXTRA_ORDER_TYPE, ordertype);
// intent.putExtra(Constants.Intent.EXTRA_ORDER_EDIT_ACTION, "ADD");
// startActivity(intent);
//// if (getActivity() != null) {
//// getActivity().finish();
//// }
// }
}
else{
ToastUtil.show(getActivity(), "存储支付信息失败,请联系管理员!");
}
}
@Override
public void onLoaderReset(Loader<PosPayLoader.Result> arg0) {
// TODO Auto-generated method stub
}
});
}
private void backUpOrderIdRefNo(BizResult result,String info) {
ArrayList<PosHistory> posHistoryList = getPosHistoryList();
if(posHistoryList == null){
posHistoryList = new ArrayList<PosHistory>();
}
savedPosHistory = new PosHistory(mOrderIdStr,result.mRefNo,info, new Date());
savedPosHistory.setmUserId(mUserId);
if(posHistoryList.size() > 100){
for(int i=0;i<20;i++){
posHistoryList.remove(0);
}
}
posHistoryList.add(savedPosHistory);
savePosHistoryList(posHistoryList);
}
@Override
public void onStart(int bizType) {
LogUtil.i(TAG, "onStart bizType = " + getBizType(bizType));
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,getBizTypeCode(bizType)+"_START",printerIP+"_"+mFee+"_"+orderType+"_"+posInfo,"");
} catch (Exception e) {
e.printStackTrace();
}
switch (bizType) {
case BizConstant.BIZ_SIGNIN:
mProgressDialog.setMessage("正在签到, 请稍等...");
break;
case BizConstant.BIZ_CONSUME:
if(!isOrderPaid()){
mProgressDialog.setMessage("开始支付, 请稍等...");
}else{
mHandler.sendEmptyMessage(DOUBLEPAID);
}
break;
case BizConstant.BIZ_CONSUME_REVERSE:
ToastUtil.show(getActivity(), "交易冲正");
break;
case BizConstant.BIZ_CANCEL_CONSUME:
mProgressDialog.setMessage("正在撤销消费, 请稍等...");
break;
default:
break;
}
mProgressDialog.show();
}
@Override
public void onPrintStart(final int bizType) {
LogUtil.i(TAG, "onPrintStart bizType = " + getBizType(bizType));
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,Constants.LogType.PRINT_START,"","");
} catch (Exception e) {
e.printStackTrace();
}
Message msg = new Message();
msg.what = PRINTSTART;
msg.arg1 = bizType;
mHandler.sendMessage(msg);
}
@Override
public void onPrintEnd(int bizType) {
LogUtil.i(TAG, "onPrintEnd bizType = " + getBizType(bizType));
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,Constants.LogType.PRINT_END,"","");
} catch (Exception e) {
e.printStackTrace();
}
Message msg = new Message();
msg.what = PRINTEND;
msg.arg1 = bizType;
mHandler.sendMessage(msg);
}
@Override
public void onError(int bizType, int errorType) {
LogUtil.i(TAG, "onError bizType = " + getBizType(bizType) + " errorType = " + errorType);
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,getBizTypeCode(bizType)+"_ERROR","",getErrorTypeCode(errorType));
} catch (Exception e) {
e.printStackTrace();
}
mHandler.sendEmptyMessage(CLOSEDIALOG);
switch (bizType) {
case BizConstant.BIZ_SIGNIN:
ToastUtil.show(getActivity(), "签到失败");
setSumbitButtonAttribute(true, R.string.bluetooth_pos_resign);
break;
case BizConstant.BIZ_CONSUME:
if (BizConstant.BIZ_ERROR_NO_PAPER == errorType) {
ToastUtil.show(getActivity(), R.string.payment_pos_error_no_paper_info);
setSumbitButtonAttribute(true, R.string.bluetooth_pos_reprint);
} else if (BizConstant.BIZ_ERROR_NEED_SIGNIN == errorType) {
mController.setServerIp(HostManager.YeePay.SERVERIP, HostManager.YeePay.SERVERPORT);
mController.signIn();
} else {
ToastUtil.show(getActivity(), R.string.payment_pos_error_info);
setSumbitButtonAttribute(true, R.string.bluetooth_pos_submit);
}
break;
case BizConstant.BIZ_CONSUME_REVERSE:
ToastUtil.show(getActivity(), "交易冲正");
break;
case BizConstant.BIZ_CANCEL_CONSUME:
ToastUtil.show(getActivity(), "消费撤销");
break;
case BizConstant.BIZ_PRINT:
if(errorType == BizConstant.BIZ_ERROR_NO_PAPER ){
ToastUtil.show(getActivity(), "打印购物小票失败,请重新打印");
setSumbitButtonAttribute(true, R.string.bluetooth_pos_reprint);
}
break;
default:
break;
}
}
@Override
public void onEnd(int bizType) {
LogUtil.i(TAG, "onEnd bizType = " + getBizType(bizType));
mHandler.sendEmptyMessage(CLOSEDIALOG);
}
@Override
public void onConnectLost(Throwable arg0) {
LogUtil.i(TAG, "onConnectLost");
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,Constants.LogType.POS_ONCONNECT_LOST,"","");
} catch (Exception e) {
e.printStackTrace();
}
mHandler.sendEmptyMessage(CONNECTLOST);
// String previousBlueToothDeviceMac = Utils.Preference.getStringPref(getActivity(),Constants.Prefence.PREF_CONNECTED_BLUETOOTH_DEVICE,"");
// IController controller = Me31Controller.getInstance();
// controller.connect(getActivity(), previousBlueToothDeviceMac, mBluetoothConnectCallback);
}
@Override
public void onInputPin() {
mProgressDialog.setMessage("请输入银行卡密码...");
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr,Constants.LogType.ON_INPUTPIN,"","");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onSwipeCard() {
if(!isOrderPaid()){
mProgressDialog.setMessage("请刷卡...");
}else{
mHandler.sendEmptyMessage(DOUBLEPAID);
}
try {
LogHelper.getInstance(getActivity()).save(mOrderIdStr, Constants.LogType.ON_SWIPECARD,"","");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onInputPinEnd() {
mProgressDialog.setMessage("验证中...");
}
@Override
public void onSendData(int arg0) {
//mProgressDialog.setMessage("数据发送中...");
}
@Override
public void onSwipeCardEnd(String arg0) {
mProgressDialog.setMessage("刷卡成功");
}
};
private String getBizType(int bizType) {
String result = null;
switch (bizType) {
case BizConstant.BIZ_SIGNIN:
result = "签到";
break;
case BizConstant.BIZ_CONSUME:
result = "消费";
break;
case BizConstant.BIZ_CONSUME_REVERSE:
result = "交易冲正";
break;
case BizConstant.BIZ_CANCEL_CONSUME:
result = "消费撤销";
break;
case BizConstant.BIZ_CANCEL_CONSUME_REVERSE:
result = "消费撤销冲正";
break;
case BizConstant.BIZ_SALE_RETURN:
result = "退货";
break;
case BizConstant.BIZ_SETTLEMENT:
result = "结算";
break;
case BizConstant.BIZ_PRINT:
result = "重新打印";
break;
case BizConstant.BIZ_TMS_REQUEST:
result = "TMS请求";
break;
case BizConstant.BIZ_TMS_DOWNLOAD:
result = "TMS下载";
break;
case BizConstant.BIZ_TMS_NOTIFY:
result = "TMS通知";
break;
default:
result = "未知";
break;
}
return result;
}
private String getErrorTypeCode(int errorType) {
String result = null;
switch (errorType) {
case BizConstant.BIZ_ERROR_NO_PAPER:
result = "BIZ_ERROR_NO_PAPER";
break;
case BizConstant.BIZ_ERROR_NEED_SIGNIN:
result = "BIZ_ERROR_NEED_SIGNIN";
break;
case BizConstant.BIZ_ERROR_ARGUMENT:
result = "BIZ_ERROR_ARGUMENT";
break;
case BizConstant.BIZ_ERROR_CONNECT_POS:
result = "BIZ_ERROR_CONNECT_POS";
break;
case BizConstant.BIZ_ERROR_CONNECT_SERVER:
result = "BIZ_ERROR_CONNECT_SERVER";
break;
case BizConstant.BIZ_ERROR_EMPTY_PRINT_PRE:
result = "BIZ_ERROR_EMPTY_PRINT_PRE";
break;
case BizConstant.BIZ_ERROR_INPUT_PARAM_NOT_FOUND:
result = "BIZ_ERROR_INPUT_PARAM_NOT_FOUND";
break;
case BizConstant.BIZ_ERROR_NEED_CANCEL_CONSUME_REVERSE:
result = "BIZ_ERROR_NEED_CANCEL_CONSUME_REVERSE";
break;
case BizConstant.BIZ_ERROR_NEED_CONSUME_REVERSE:
result = "BIZ_ERROR_NEED_CONSUME_REVERSE";
break;
case BizConstant.BIZ_ERROR_POS_PACK:
result = "BIZ_ERROR_POS_PACK";
break;
case BizConstant.BIZ_ERROR_REVERSE_DATE_ERROR:
result = "BIZ_ERROR_REVERSE_DATE_ERROR";
break;
case BizConstant.BIZ_ERROR_SAIL_RETURN_NOT_ALLOW:
result = "BIZ_ERROR_SAIL_RETURN_NOT_ALLOW";
break;
case BizConstant.BIZ_ERROR_SERVER_DATA:
result = "BIZ_ERROR_SERVER_DATA";
break;
case BizConstant.BIZ_ERROR_SETTLEMENT_STATUS_ERROR:
result = "BIZ_ERROR_SETTLEMENT_STATUS_ERROR";
break;
case BizConstant.BIZ_ERROR_TRADE_FOR_SETTLEMENT_ERROR:
result = "BIZ_ERROR_TRADE_FOR_SETTLEMENT_ERROR";
break;
default:
result = "BIZ_ERROR_UNKNOW";
break;
}
return result;
}
private String getBizTypeCode(int bizType) {
String result = null;
switch (bizType) {
case BizConstant.BIZ_SIGNIN:
result = "BIZ_SIGNIN";
break;
case BizConstant.BIZ_CONSUME:
result = "BIZ_CONSUME";
break;
case BizConstant.BIZ_CONSUME_REVERSE:
result = "BIZ_CONSUME_REVERSE";
break;
case BizConstant.BIZ_CANCEL_CONSUME:
result = "BIZ_CANCEL_CONSUME";
break;
case BizConstant.BIZ_CANCEL_CONSUME_REVERSE:
result = "BIZ_CANCEL_CONSUME_REVERSE";
break;
case BizConstant.BIZ_SALE_RETURN:
result = "BIZ_SALE_RETURN";
break;
case BizConstant.BIZ_SETTLEMENT:
result = "BIZ_SETTLEMENT";
break;
case BizConstant.BIZ_PRINT:
result = "BIZ_PRINT";
break;
case BizConstant.BIZ_TMS_REQUEST:
result = "BIZ_TMS_REQUEST";
break;
case BizConstant.BIZ_TMS_DOWNLOAD:
result = "BIZ_TMS_DOWNLOAD";
break;
case BizConstant.BIZ_TMS_NOTIFY:
result = "BIZ_TMS_NOTIFY";
break;
default:
result = "BIZ_UNKNOW";
break;
}
return result;
}
private void setSumbitButtonAttribute(boolean isClick, int resId) {
mSubmitBtn.setEnabled(isClick);
mSubmitBtn.setText(resId);
}
@Override
public void onDestroyView() {
LogUtil.i(TAG, "onDestroyView");
super.onDestroyView();
if (getActivity() != null) {
mController.disConnect(getActivity());
}
}
private void savePosHistoryList(ArrayList<PosHistory> posHistory) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(baos);
oos.writeObject(posHistory);
} catch (IOException e) {
e.printStackTrace();
}
SharedPreferences mySharedPreferences = getActivity().getSharedPreferences(Constants.posHistoryCache, Activity.MODE_PRIVATE);
// 将Product对象转换成byte数组,并将其进行base64编码
String productBase64 = new String(Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT));
SharedPreferences.Editor editor = mySharedPreferences.edit();
// 将编码后的字符串写到base64.xml文件中
editor.putString("posHistoryCache", productBase64);
editor.commit();
}
private ArrayList<PosHistory> getPosHistoryList(){
ArrayList<PosHistory> posHistoryListObject = null;
Map<String, PosHistory> mProductInfoList = new HashMap<String, PosHistory>();
SharedPreferences pmySharedPreferences = getActivity().getSharedPreferences(Constants.posHistoryCache, Activity.MODE_PRIVATE);
if(pmySharedPreferences != null){
String posHistoryList = null;
if(pmySharedPreferences != null && pmySharedPreferences.getAll() != null && pmySharedPreferences.getAll().size() > 0){
posHistoryList = pmySharedPreferences.getString("posHistoryCache", null);
}
if(posHistoryList != null){
String pproductBase64 = posHistoryList;
if (pproductBase64 != null && pproductBase64.length() > 0) {
// 对Base64格式的字符串进行解码
byte[] base64Bytes = Base64.decode(pproductBase64.getBytes(), Base64.DEFAULT);
ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(bais);
} catch (StreamCorruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 从ObjectInputStream中读取Product对象
try {
posHistoryListObject = (ArrayList<PosHistory>) ois.readObject();
} catch (OptionalDataException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
return posHistoryListObject;
}
}