package com.xiaomi.xms.sales.loader; import android.content.Context; import com.xiaomi.xms.sales.model.Order; import com.xiaomi.xms.sales.model.Tags; import com.xiaomi.xms.sales.model.Order.PickupInfo; import com.xiaomi.xms.sales.request.HostManager; import com.xiaomi.xms.sales.request.Request; import com.xiaomi.xms.sales.request.HostManager.Parameters; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; public class PaymentInfoLoader extends BaseLoader<PaymentInfoLoader.Result> { private static final String CACHE_KEY = "Payment_mode_Info"; private String mOrderId; public PaymentInfoLoader(Context context, String orderId) { super(context); mOrderId = orderId; } public static final class Result extends BaseResult { public Order mOrderInfo; public String mOrderError; public ArrayList<PayMode> mPayModeList; @Override public BaseResult shallowClone() { Result newResult = new Result(); newResult.mOrderInfo = mOrderInfo; newResult.mOrderError = mOrderError; newResult.mPayModeList = mPayModeList; return newResult; } @Override protected int getCount() { return mOrderInfo == null ? 0 : 1; } } @Override protected UpdateTask getUpdateTask() { return new PaymentInfoUpdateTask(); } private class PaymentInfoUpdateTask extends UpdateTask { @Override protected Request getRequest() { Request request = new Request(HostManager.getPaymentMode()); request.addParam(Parameters.Keys.ORDER_ID, mOrderId); return request; } } @Override protected Result parseResult(JSONObject json, Result result) throws Exception { result.mOrderInfo = parseOrderOfJson(json); if (result.mOrderInfo == null) { result.mOrderError = Order.getErrorInfo(json); } result.mPayModeList = parsePaymentModeOfJson(json); return result; } @Override protected Result getResultInstance() { return new Result(); } @Override protected String getCacheKey() { return CACHE_KEY + mOrderId; } public Order parseOrderOfJson(JSONObject json) { Order order = null; if (Tags.isJSONResultOK(json)) { JSONObject dataJson = json.optJSONObject(Tags.DATA); if (dataJson != null) { JSONObject orderJson = dataJson.optJSONObject("order"); if (orderJson != null) { // area obj JSONObject provinceObj = orderJson.optJSONObject(Tags.Order.PROVINCE); JSONObject cityObj = orderJson.optJSONObject(Tags.Order.CITY); JSONObject districtObj = orderJson.optJSONObject(Tags.Order.DISTRICT); if (provinceObj == null || cityObj == null || districtObj == null) { return null; } String province = provinceObj.optString(Tags.Order.AREA_NAME); int provinceId = provinceObj.optInt(Tags.Order.AREA_ID); String city = cityObj.optString(Tags.Order.AREA_NAME); int cityId = cityObj.optInt(Tags.Order.AREA_ID); String district = districtObj.optString(Tags.Order.AREA_NAME); int districtId = districtObj.optInt(Tags.Order.AREA_ID); // pickup info JSONObject pickupObject = orderJson.optJSONObject(Tags.Order.PICKUP_INFO); PickupInfo pickupInfo = null; if (pickupObject != null) { String pickupName = pickupObject.optString(Tags.Order.PICKUP_NAME); String pickupAddress = pickupObject.optString(Tags.Order.PICKUP_ADDRESS); String pickupTel = pickupObject.optString(Tags.Order.PICKUP_TEL); String pickupLonLat = pickupObject.optString(Tags.Order.PICKUP_LONLAT); pickupInfo = new PickupInfo(pickupAddress, pickupName, pickupTel, pickupLonLat); } // own fields String consignee = orderJson.optString(Tags.Order.CONSIGNEE); double fee = orderJson.optDouble(Tags.Order.FEE); String orderId = orderJson.optString(Tags.Order.ID); String invoiceTitle = orderJson.optString(Tags.Order.INVOICE_TITLE); String deliveryTime = orderJson.optString(Tags.Order.BEST_TIME); String addTime = orderJson.optString(Tags.Order.ADD_TIME); String consigneePhone = orderJson.optString(Tags.Order.CONSIGNEE_PHONE); String address = orderJson.optString(Tags.Order.ADDRESS); int status = orderJson.optInt(Tags.Order.STATUS); String zipcode = orderJson.optString(Tags.Order.ZIPCODE); boolean hasPhone = orderJson.optBoolean(Tags.Order.HAS_PHONE, false); order = new Order(orderId, fee, consignee, consigneePhone, address, deliveryTime, addTime, invoiceTitle, status, null, province, city, district, zipcode, null, null, null, hasPhone, null, null); order.setPickupInfo(pickupInfo); order.setProvinceId(provinceId); order.setCityId(cityId); order.setDistrictId(districtId); } } } return order; } public ArrayList<PayMode> parsePaymentModeOfJson(JSONObject json) { ArrayList<PayMode> list = null; if (Tags.isJSONResultOK(json)) { JSONObject dataJson = json.optJSONObject(Tags.DATA); if (dataJson != null) { JSONArray modeArray = dataJson.optJSONArray("payments"); list = new ArrayList<PayMode>(); if (modeArray != null) { if (!modeArray.isNull(0)) { for (int i = 0; i < modeArray.length(); i++) { JSONObject r = (JSONObject) modeArray.opt(i); String modeKey = r.optString("key"); String modeValue = r.optString("value"); list.add(new PayMode(modeKey, modeValue)); } } } } } return list; } public static class PayMode { public String mModeKey; public String mModeValue; public PayMode(String modeKey, String modeValue) { mModeKey = modeKey; mModeValue = modeValue; } } }