package com.taobao.tae.Mshopping.demo.task;
import android.content.Context;
import android.os.AsyncTask;
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.google.gson.Gson;
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.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.*;
import com.taobao.tae.Mshopping.demo.util.SecurityKey;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* 组件化构建订单
* Created by xinyuan on 14/7/8.
*/
public class UpdateOrderTask extends AsyncTask<String, Integer, Boolean> {
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 UpdateOrderTask(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 Boolean doInBackground(String... params) {
try {
String json = getUpdateOrderResult();
return parseUpdateOrderJSON(json);
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if (result) {
updateView();
} else {
confirmOrderActivity.finish();
toast(errorMessage);
}
}
/**
* 获取更新订单结果信息
*
* @return
* @throws java.io.IOException
*/
public String getUpdateOrderResult() throws IOException {
String result = "";
String buildOrderUrl = AppConfig.getInstance().getServer() + "/api/order/updateorder";
int timeout = 30000;
Map param = new HashMap<String, String>();
param.put("securityKey", SecurityKey.getKey());
param.put("sessionKey", accessToken.getValue());
param.put("updateJson", "");
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 Boolean parseUpdateOrderJSON(String json) throws IOException {
Boolean result = false;
try {
JSONObject jsonObject = new JSONObject(json);
} catch (Exception e) {
Log.e("IOException is : ", e.toString());
e.printStackTrace();
}
return result;
}
/**
* 填充页面数据
*/
public void updateView() {
//填充 默认买家留言
if (itemOrderModel.getLeaveMessage() != null) {
TextView leaveMessageTextView = (TextView) confirmOrdcerLayoutView.findViewById(R.id.confirm_order_leave_message);
String placeholder = itemOrderModel.getLeaveMessage().getFields().getPlaceholder();
leaveMessageTextView.setHint(placeholder);
}
//填充 商品小计
if (itemOrderModel.getItemPay() != null) {
TextView singlePriceTextView = (TextView) confirmOrdcerLayoutView.findViewById(R.id.confirm_order_item_price_txt);
singlePriceTextView.setText(itemOrderModel.getItemPay().getFields().getAfterPromotionPrice());
TextView totalPriceTextView = (TextView) confirmOrdcerLayoutView.findViewById(R.id.confirm_order_total_price);
totalPriceTextView.setText(itemOrderModel.getItemPay().getFields().getPrice());
}
//填充商品优惠
if (itemOrderModel.getItemPay() != null) {
TextView promotionTextView = (TextView) confirmOrdcerLayoutView.findViewById(R.id.confirm_order_promotion);
String promotionPrice = itemOrderModel.getItemPromotion().getQuark();
if (promotionPrice == null || promotionPrice == "") {
promotionPrice = "0.00";
}
if (promotionPrice.startsWith("-")) {
promotionPrice = promotionPrice.substring(1, promotionPrice.length());
}
promotionTextView.setText("为您节省了¥".concat(promotionPrice));
}
//填充 商品总计
if (itemOrderModel.getOrderPay() != null) {
TextView summaryPriceTextView = (TextView) confirmOrdcerLayoutView.findViewById(R.id.confirm_order_price_summary_value);
summaryPriceTextView.setText(itemOrderModel.getOrderPay().getFields().getPrice());
}
}
/**
* 将 itemModels 转换为 taobao.trade.tae.build 接口需要的入参Json格式
*
* @param itemModels
* @return
*/
private String convertItemModelListToJson(ArrayList<ItemModel> itemModels) {
if (itemModels == null) {
return "{}";
}
Map map = new HashMap();
map.put("items", itemModels);
Gson gson = new Gson();
gson.toJson(map);
return gson.toJson(map);
}
/**
* 将 Json 结构列表 从List 转换为 Map
* 使用 value的 _ 之前的数据作为key,比如address_436168931 ,key=address
*
* @param structure
* @return
*/
private Map convertStructureToMap(String structure) {
structure = structure.replace("[", "");
structure = structure.replace("]", "");
structure = structure.replace("\"", "");
Map map = new HashMap<String, String>();
for (String value : Arrays.asList(structure.split(","))) {
String key = "";
if (value.contains("_")) {
key = value.split("_")[0];
} else {
key = value;
}
map.put(key, value);
}
return map;
}
/**
* 展示一个粉色的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();
}
}