package com.ectrip.cyt.center; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.res.Resources; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.CheckBox; import android.widget.ListView; import android.widget.Toast; import com.ectrip.cyt.adapter.RePrintAdapter; import com.ectrip.cyt.base.DataTrans; import com.ectrip.cyt.callback.HttpCallback; import com.ectrip.cyt.callback.ListOnclickCallback; import com.ectrip.cyt.config.MyApp; import com.ectrip.cyt.constant.OrderCode; import com.ectrip.cyt.db.DbManager; import com.ectrip.cyt.inteface.ReprintInteface; import com.ectrip.cyt.response.OrderConsumedItem; import com.ectrip.cyt.response.QueryConsumedDetailResponse; import com.ectrip.cyt.response.ReprintVoucherResponse; import com.ectrip.cyt.ui.BaseActivity; import com.ectrip.cyt.utils.SharedPreferences2Obj; import com.ectrip.trips.check.R; import com.ectrip.trips.net.DataTool; import com.ectrip.trips.net.HttpHelper; /** * @author jigo 补打小票 */ public class ReprintHandle implements ReprintInteface,OnItemClickListener { private String orid; private View v; private AtomicBoolean isClick; private BaseActivity activity; private Integer type; private Resources resources; @Override public void reprintHandle(String orid, ListOnclickCallback callback, final View v, final AtomicBoolean isClick, BaseActivity activity) { this.resources = activity.getResources(); this.orid = orid; this.v = v; this.isClick = isClick; this.activity = activity; type = SharedPreferences2Obj.getInstance(activity) .setName("MachineType").getObject("type", Integer.class); if (isClick.get()) { isClick.set(false); v.setClickable(false); HttpHelper.getInstance(activity).queryConsumedDetail(orid, new ReprintListCallback()); } else { activity.MToast(activity, "点击过快,稍等两秒!", Toast.LENGTH_SHORT); } } /** * @author jigo 获取补打列表 */ public class ReprintListCallback extends HttpCallback { private String signed; private String data; ProgressDialog progressDialog = null; @Override public void onPreCallback() { if (progressDialog == null) { // 显示ProgressDialog progressDialog = new ProgressDialog(activity); progressDialog.setMessage(resources .getString(R.string.get_ticket_info)); progressDialog.setCanceledOnTouchOutside(false); progressDialog.setCancelable(true); if (type == 8) { progressDialog.getWindow().setType( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); } try { if (progressDialog != null && !progressDialog.isShowing()) { progressDialog.show(); } } catch (Exception e) { e.printStackTrace(); } } else { progressDialog.setMessage(resources .getString(R.string.get_ticket_info)); } } @Override public void onCompletedCallback(DataTrans result) { } @Override public void afterCompletedCallback(DataTrans result) { if (result != null) { signed = result.getSigned(); data = result.getData(); parse2(result.getData(), QueryConsumedDetailResponse.class,activity); } else { isClick.set(true); v.setClickable(true); if (progressDialog != null && progressDialog.isShowing()) { try { progressDialog.dismiss(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } activity.MToast(activity, resources.getString(R.string.get_order_error), Toast.LENGTH_SHORT); } } @Override public void onAgainParseCallback(Object parse) { isClick.set(true); v.setClickable(true); if (progressDialog != null && progressDialog.isShowing()) { try { progressDialog.dismiss(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } if (parse != null) { QueryConsumedDetailResponse detailResponse = (QueryConsumedDetailResponse) parse; String code = detailResponse.getCode(); if (code != null && OrderCode.SUCESS.getValue().equals(code)) { if (signed == null || signed.equals(DataTool.getSign(MyApp .getInstance().getSignkey(), data))) { // 获取一个订单中每个记录 List items = detailResponse .getOrderConsumedItems(); dialog(items); } else { onFailureCallback(resources .getString(R.string.sign_not_pass)); activity.MToast(activity, resources.getString(R.string.sign_not_pass), Toast.LENGTH_SHORT); } } else { onFailureCallback(detailResponse.getDescribe()); activity.MToast(activity, detailResponse.getDescribe(), Toast.LENGTH_SHORT); } } } @Override public void onFailureCallback(String FailureStr) { isClick.set(true); v.setClickable(true); if (progressDialog != null && progressDialog.isShowing()) { try { progressDialog.dismiss(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } try { activity.MToast(activity, FailureStr, Toast.LENGTH_SHORT); } catch (Exception e) { e.printStackTrace(); } } @Override public void onStopCallback() { } } /** * @author jigo 获取打票信息 */ public class ReprintInfoCallback extends HttpCallback { private String signed; private String data; ProgressDialog progressDialog = null; @Override public void onPreCallback() { if (progressDialog == null) { // 显示ProgressDialog progressDialog = new ProgressDialog(activity); progressDialog.setMessage(resources .getString(R.string.ready_to_print)); progressDialog.setCanceledOnTouchOutside(false); progressDialog.setCancelable(true); if (type == 8) { progressDialog.getWindow().setType( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); } try { if (progressDialog != null && !progressDialog.isShowing()) { progressDialog.show(); } } catch (Exception e) { e.printStackTrace(); } } else { progressDialog.setMessage(resources .getString(R.string.ready_to_print)); } } @Override public void onCompletedCallback(DataTrans result) { } @Override public void afterCompletedCallback(DataTrans result) { if (result != null) { signed = result.getSigned(); data = result.getData(); parse2(result.getData(), ReprintVoucherResponse.class,activity); } else { isClick.set(true); v.setClickable(true); if (progressDialog != null && progressDialog.isShowing()) { try { progressDialog.dismiss(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } activity.MToast(activity, resources.getString(R.string.get_order_error), Toast.LENGTH_SHORT); } } @Override public void onAgainParseCallback(Object parse) { isClick.set(true); v.setClickable(true); if (progressDialog != null && progressDialog.isShowing()) { try { progressDialog.dismiss(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } if (parse != null) { ReprintVoucherResponse voucherResponse = (ReprintVoucherResponse) parse; String code = voucherResponse.getCode(); if (code != null && OrderCode.SUCESS.getValue().equals(code)) { if (signed == null || signed.equals(DataTool.getSign(MyApp .getInstance().getSignkey(), data))) { // 获取一个订单中每个记录 // List> items = voucherResponse // .getPrintInfos(); List items = voucherResponse .getPrintInfos(); PrintHandle.getInstance().print(saveInfo(items), activity); } else { onFailureCallback(resources .getString(R.string.sign_not_pass)); activity.MToast(activity, resources.getString(R.string.sign_not_pass), Toast.LENGTH_SHORT); } } else { onFailureCallback(voucherResponse.getDescribe()); activity.MToast(activity, voucherResponse.getDescribe(), Toast.LENGTH_SHORT); } } } @Override public void onFailureCallback(String FailureStr) { isClick.set(true); v.setClickable(true); if (progressDialog != null && progressDialog.isShowing()) { try { progressDialog.dismiss(); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } try { activity.MToast(activity, FailureStr, Toast.LENGTH_SHORT); } catch (Exception e) { e.printStackTrace(); } } @Override public void onStopCallback() { } } private LayoutInflater inflater; private AlertDialog dialog; // 打票列表 private View layout; private RePrintAdapter adapter; private ListView orderListView; private List rePrintList; @SuppressLint("InflateParams") private void dialog(final List items) { try { if (dialog == null) { rePrintList = new ArrayList(); adapter = new RePrintAdapter(activity, items, rePrintList); inflater = LayoutInflater.from(activity); layout = inflater.inflate(R.layout.dialog_order_consumed, null); orderListView = (ListView) layout .findViewById(R.id.orderListView); orderListView.setOnItemClickListener(this); Builder builder = new AlertDialog.Builder(activity); builder.setTitle(R.string.select_print); builder.setPositiveButton(R.string.btn_ok, null); builder.setView(layout); builder.setNegativeButton(R.string.btn_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (dialog != null) { dialog.dismiss(); } } }); orderListView.setAdapter(adapter); dialog = builder.create(); } if (dialog != null && !dialog.isShowing()) { if (MyApp.getInstance().isHandset) { dialog.getWindow().setType( WindowManager.LayoutParams.TYPE_SYSTEM_ERROR); } dialog.show(); } dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { getPrintInfo(items, dialog); return; } }); } catch (Exception e) { e.printStackTrace(); } } /********************** 获取信息,再请求 **************************/ List orderDetailIds; private void getPrintInfo(List items, AlertDialog dialog) { if (orderDetailIds == null) { orderDetailIds = new ArrayList(); } else { orderDetailIds.clear(); } if (rePrintList != null && rePrintList.size() == 0) { activity.MToast(activity, activity.getString(R.string.select_at_least_one_item), Toast.LENGTH_SHORT); return; } if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } for (int i = 0; i < rePrintList.size(); i++) { orderDetailIds.add(items.get(rePrintList.get(i)).getOrderDetailId() + ""); } rePrintList.clear(); HttpHelper.getInstance(activity).reprintVoucher(orid, orderDetailIds, new ReprintInfoCallback()); } /******************** 打印信息转化 *************************/ private String list2Str(List> list) { StringBuffer sb = new StringBuffer(); if (list != null && list.size() > 0) { for (LinkedHashMap temp : list) { for (LinkedHashMap.Entry entry : temp.entrySet()) { if (entry != null) { if (entry.getValue() != null) { sb.append(entry.getValue() + "\n"); } } } sb.append("\n\n\n"); } try {// 加了时间有问题 if (type != null && type == 8) { } else { sb.append("\n"); } } catch (Exception e) { e.printStackTrace(); } } return sb.toString(); } @Override public void onItemClick(AdapterView parent, View view, final int position, long id) { if(parent.getId()==R.id.orderListView){ CheckBox check=(CheckBox) view.findViewById(R.id.check); if (!check.isChecked()) { rePrintList.add(position); check.setChecked(true); } else { if (rePrintList.contains(new Integer(position))) { rePrintList.remove(rePrintList.indexOf(new Integer(position))); } check.setChecked(false); } } } /**************************打印数据******************************/ /** * @param PrintInfos * @return 保存打印信息 */ @SuppressLint("SimpleDateFormat") public String saveInfo(List PrintInfos) { // 保存打印票的信息 String[] str = null; String orderNumber = null; StringBuilder sb = new StringBuilder(); for (String temp : PrintInfos) { if (temp != null) { if (temp.contains("证件号码")&&temp.length()>24){ String buf = temp.substring(13, 21); temp = temp.replace(buf, "****"); } if (temp.contains(resources.getString(R.string.orderid))) { try { str = temp.split(resources.getString(R.string.orderid)); orderNumber = str[1].split(":")[1].trim(); } catch (Exception e) { e.printStackTrace(); } } sb.append(temp + "\n"); } } SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式 String currentData = df.format(new Date());// new // Date()为获取当前系统时间 try { if (orderNumber != null && DbManager.queryOrderNumber(orderNumber) == null) { DbManager .insertPrint(currentData, sb.toString(), str[1].trim()); } else { DbManager .ModifyPrint(currentData, sb.toString(), str[1].trim()); } } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } }