package com.taobao.tae.Mshopping.demo.task; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.taobao.api.internal.util.WebUtils; import com.taobao.tae.Mshopping.demo.MshoppingApplication; import com.taobao.tae.Mshopping.demo.R; import com.taobao.tae.Mshopping.demo.activity.ConfirmOrderActivity; import com.taobao.tae.Mshopping.demo.activity.ItemDetailActivity; import com.taobao.tae.Mshopping.demo.activity.PayOrderActivity; import com.taobao.tae.Mshopping.demo.config.AppConfig; import com.taobao.tae.Mshopping.demo.constant.Constants; import com.taobao.tae.Mshopping.demo.login.LoginType; import com.taobao.tae.Mshopping.demo.login.User; import com.taobao.tae.Mshopping.demo.login.taobao.AccessToken; import com.taobao.tae.Mshopping.demo.login.taobao.TaobaoUser; import com.taobao.tae.Mshopping.demo.model.CreateOrderResp; import com.taobao.tae.Mshopping.demo.model.ItemModel; import com.taobao.tae.Mshopping.demo.model.ItemOrderModel; import com.taobao.tae.Mshopping.demo.util.SecurityKey; import org.json.JSONObject; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** * 组件化构建订单 * Created by xinyuan on 14/7/8. */ public class CreateOrderTask extends AsyncTask<String, Integer, CreateOrderResp> { private Context context; private AccessToken accessToken; private ArrayList<ItemModel> itemModels; private ItemOrderModel itemOrderModel; private RelativeLayout confirmOrdcerLayoutView; private ConfirmOrderActivity confirmOrderActivity; private String errorMessage; /** * 初始化 UpdateOrderTask * * @param context 为 ApplicationContext * @param itemModels */ public CreateOrderTask(Context context, ArrayList<ItemModel> itemModels, RelativeLayout confirmOrdcerLayoutView, ConfirmOrderActivity confirmOrderActivity) { super(); this.context = context; User user = ((MshoppingApplication) context).getUser(); if(((MshoppingApplication) context).getLoginType() == LoginType.TAOBAO.getType()){ this.accessToken = ((TaobaoUser)user).getAccessToken(); } this.itemModels = itemModels; this.confirmOrdcerLayoutView = confirmOrdcerLayoutView; this.confirmOrderActivity = confirmOrderActivity; } @Override protected CreateOrderResp doInBackground(String... params) { try { String json = getCreateOrderResult(params[0]); return parseCreateOrderJSON(json); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(CreateOrderResp createOrderResp) { super.onPostExecute(createOrderResp); if (createOrderResp != null && createOrderResp.isSuccess()) { //跳转支付宝支付页面 Intent intent = new Intent(); intent.putExtra("createOrderResp", createOrderResp); if (itemModels != null && itemModels.size() > 0) { intent.putExtra("itemId", itemModels.get(0).getItemId().toString()); } intent.putExtra("ACTIVITY_NAME_KEY", R.string.title_activity_confirm_order); intent.setClass(confirmOrderActivity, PayOrderActivity.class); confirmOrderActivity.startActivity(intent); } else { int fromActivity = confirmOrderActivity.getIntent().getIntExtra("ACTIVITY_NAME_KEY", 0); if (fromActivity == R.string.title_activity_login) { Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("itemId", itemModels.get(0).getItemId().toString()); bundle.putInt("ACTIVITY_NAME_KEY", R.string.title_activity_confirm_order); intent.putExtras(bundle); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setClass(confirmOrderActivity, ItemDetailActivity.class); confirmOrderActivity.startActivity(intent); } confirmOrderActivity.finish(); if (errorMessage == null) { errorMessage = "提交订单失败"; } toast(errorMessage); } } /** * 获取更新订单结果信息 * * @return * @throws java.io.IOException */ public String getCreateOrderResult(String submitJson) throws IOException { String result = ""; String buildOrderUrl = AppConfig.getInstance().getServer() + "/api/order/createorder"; int timeout = 30000; Map param = new HashMap<String, String>(); param.put("securityKey", SecurityKey.getKey()); param.put("sessionKey", accessToken.getValue()); param.put("submitJson", submitJson); try { result = WebUtils.doPost(buildOrderUrl, param, timeout, timeout); } catch (IOException e) { Log.e("", e.getMessage()); } return result; } /** * 解析 创建的订单 Json 结果 * * @param json * @return * @throws java.io.IOException */ public CreateOrderResp parseCreateOrderJSON(String json) throws IOException { CreateOrderResp createOrderResp = null; try { JSONObject jsonObject = new JSONObject(json); if (jsonObject.has("trade_tae_create_response") && jsonObject.getJSONObject("trade_tae_create_response").has("create_order_resp")) { JSONObject order = jsonObject.getJSONObject("trade_tae_create_response").getJSONObject("create_order_resp"); createOrderResp = new CreateOrderResp(); createOrderResp.setPayOrderId(order.getString("pay_order_id")); createOrderResp.setBizOrderId(order.getString("biz_order_id")); createOrderResp.setSuccess(order.getBoolean("is_success")); } } catch (Exception e) { Log.e("IOException is : ", e.toString()); e.printStackTrace(); } return createOrderResp; } /** * 展示一个粉色的Toast * * @param message */ public void toast(String message) { View toastRoot = LayoutInflater.from(context).inflate(R.layout.toast, null); Toast toast = new Toast(context); toast.setView(toastRoot); TextView tv = (TextView) toastRoot.findViewById(R.id.pink_toast_notice); tv.setText(message); toast.show(); } }