package com.xiaomi.xms.sales.loader;
import android.content.Context;
import android.os.AsyncTask;
import android.text.TextUtils;
import com.xiaomi.xms.sales.ShopApp;
import com.xiaomi.xms.sales.loader.BaseResult.ResultStatus;
import com.xiaomi.xms.sales.model.Order;
import com.xiaomi.xms.sales.model.Tags;
import com.xiaomi.xms.sales.request.HostManager;
import com.xiaomi.xms.sales.request.Request;
import com.xiaomi.xms.sales.request.HostManager.Parameters;
import com.xiaomi.xms.sales.util.Constants;
import com.xiaomi.xms.sales.util.JsonUtil;
import com.xiaomi.xms.sales.util.Utils;
import com.xiaomi.xms.sales.xmsf.account.LoginManager;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
public class OrderInfoLoader extends BaseLoader<OrderInfoLoader.Result> {
// private static final String TAG = "OrderInfoLoader";
private static final String CACHE_KEY = "OrderInfo";
private String mOrderId;
private boolean mNeedSecurityKey;
public static final class Result extends BaseResult {
public Order mOrderInfo;
public String mOrderError;
public String mSecurityKey; // 安全支付Key
@Override
public BaseResult shallowClone() {
Result newResult = new Result();
newResult.mOrderInfo = mOrderInfo;
newResult.mOrderError = mOrderError;
newResult.mSecurityKey = mSecurityKey;
return newResult;
}
@Override
protected int getCount() {
return mOrderInfo == null ? 0 : 1;
}
}
public OrderInfoLoader(Context context) {
super(context);
mNeedSecurityKey = true;
}
public void setOrderId(String orderId) {
mOrderId = orderId;
}
public void setNeedSecurityKeyTask(boolean need) {
mNeedSecurityKey = need;
}
@Override
protected void initTaskList(List<AsyncTask<Void, Void, Result>> tasks) {
if (mNeedDatabase) {
DatabaseTask task = getDatabaseTask();
if (task != null) {
tasks.add(task);
}
}
if (mNeedSecurityKey) {
tasks.add(new SecurityPayUpdateTask());
}
tasks.add(new OrderInfoUpdateTask());
}
private class OrderInfoUpdateTask extends UpdateTask {
@Override
protected Request getRequest() {
Request request = new Request(HostManager.URL_XMS_SALE_API);
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put(Tags.XMSAPI.ORGID,
Utils.Preference.getStringPref(ShopApp.getContext(), Constants.Account.PREF_USER_ORGID, ""));
jsonObject.put(Tags.XMSAPI.USERID, LoginManager.getInstance().getUserId());
jsonObject.put("serviceNumber", mOrderId);
String data = JsonUtil.creatRequestJson(HostManager.Method.METHOD_GETSALESORDERINFO, jsonObject);
if (!TextUtils.isEmpty(data)) {
request.addParam(Tags.RequestKey.DATA, data);
}
} catch (JSONException e) {
e.printStackTrace();
}
return request;
}
}
private class SecurityPayUpdateTask extends UpdateTask {
@Override
protected Request getRequest() {
Request request = new Request(HostManager.getSecurityPay());
request.addParam(Parameters.Keys.ORDER_ID, mOrderId);
return request;
}
@Override
protected Result parseTaskResult(JSONObject json) {
Result result = getResultInstance();
if (json != null) {
String security = json.optString(Parameters.Keys.SECURITY_PAYMENT_KEY);
if (!TextUtils.isEmpty(security)) {
result.mSecurityKey = security;
} else {
result.setResultStatus(ResultStatus.DATA_ERROR);
}
} else {
result.setResultStatus(ResultStatus.DATA_ERROR);
}
return result;
}
@Override
protected Result onDataLoaded(Result oldResult, Result newResult) {
if (newResult != null && oldResult != null) {
newResult.mOrderInfo = oldResult.mOrderInfo;
}
return newResult;
}
}
@Override
protected String getCacheKey() {
return CACHE_KEY + mOrderId;
}
@Override
protected boolean isUserRelated() {
return true;
}
@Override
protected Result parseResult(JSONObject json, Result result) throws Exception {
result.mOrderInfo = Order.valueOf(json);
if (result.mOrderInfo == null) {
result.mOrderError = Order.getErrorInfo(json);
}
return result;
}
@Override
protected Result getResultInstance() {
return new Result();
}
}