package com.xiaomi.xms.sales.model; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import com.xiaomi.xms.sales.util.Constants; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.Serializable; import java.util.ArrayList; public class Order { private String mOrderId; // 订单Id private double mFee; // 金额 private String mConsignee; // 收货人 private String mConsigneePhone; // 收货人电话 private String mConsigneeAddress; // 收货人地址 private String mDeliveryTime; // 送货时间 private String mAddTime; // 订单添加时间 private String mInvoiceInfo; // 发票信息 private int mOrderStatus; // 支付状态 private String mOrderStatusInfo; // 支付状态信息 private ArrayList<OrderTrack> mTracks; // 流程信息 private String mProvince; // 收货地址-省 private String mCity; // 收货地址-市 private String mDistrict; // 收货地址-区 private String mZipCode; // 收货地址-邮编 private ArrayList<ProductBrief> mProducts; // 商品列表 private ArrayList<ProductBrief> mProductSnList; // 商品Sn列表 private ArrayList<String> mNextList; private OrderExpress mExpress; private int mProvinceId; private int mCityId; private int mDistrictId; private boolean mHasPhone; private ArrayList<String> mShowType; private ArrayList<DeliverOrder> mDeliverOrderList; private String mReducePrice; private String mOriginalPrice; private String mShipmentExpense; private PickupInfo mPickupInfo; private String mOrderPayNo; private String mOrderPayTime; private String mOrderUserName; private String mOrderUserTel; private String mOrderUserEmail; private int orderType; //订单类型 private String orgName; //机构名 private String orgTel; //机构电话 private String orgAddress; //机构地址 private int payId; //支付类型 private String mituShuo; //米兔说 private String mMerchantName; //商户名称 private String mPosName; //pos机名 private String posRequstId;//流水号 private String referenceNumber;//交易参考号 private String mPayStatus; //支付状态 /** * OrderTrack 用来记录流程中的一个步骤的信息 */ public static class OrderTrack { public String mText; public String mTime; } /** * ProductBrief 商品的简单介绍 */ public static class ProductBrief implements Serializable{ /** * */ private static final long serialVersionUID = 3996395189010372008L; public String mProductId; public String mProductName; public Image mProductImage; public int mProductCount; public String mProductPrice; public String mTotalPrice; public String mImei; public String mSn; public String mNewImei; public String mNewSn; public String mIsMobile; public ProductBrief(String productId, String productName, String productPrice, int productCount, String imageURL, String totalPrice,String imei,String sn,String isMobile) { mProductId = productId; mProductName = productName; mProductPrice = productPrice; mProductCount = productCount; mProductImage = new Image(imageURL); mTotalPrice = totalPrice; mImei = imei; mSn = sn; mIsMobile = isMobile; } public void setSnOrImei(String mSn){ if(mIsMobile.equals("0")){ setmSn(mSn); }else{ setmImei(mSn); } } public void setNewSnOrImei(String mNewdSn){ if(mIsMobile.equals("0")){ setmNewSn(mNewdSn); }else{ setmNewImei(mNewdSn); } } public String getmNewImei() { return mNewImei; } public void setmNewImei(String mNewImei) { this.mNewImei = mNewImei; } public String getmNewSn() { return mNewSn; } public void setmNewSn(String mNewSn) { this.mNewSn = mNewSn; } public String getmImei() { return mImei; } public void setmImei(String mImei) { this.mImei = mImei; } public String getmSn() { return mSn; } public void setmSn(String mSn) { this.mSn = mSn; } } /** * DeliverOrder 发货单的内容 */ public static class DeliverOrder { public String mDeliverId; public String mOrderStatusInfo; public ArrayList<OrderTrack> mTrackList; public ArrayList<ProductBrief> mDeliveProducts; public String mShipmentExpense; public OrderExpress mDeliveExpress; public DeliverOrder(String deliverId, String orderStatusInfo, ArrayList<OrderTrack> trackList, ArrayList<ProductBrief> products, String shipmentExpense, OrderExpress express) { mDeliverId = deliverId; mOrderStatusInfo = orderStatusInfo; mTrackList = trackList; mDeliveProducts = products; mShipmentExpense = shipmentExpense; mDeliveExpress = express; } } /** * 物流信息 */ public static class OrderExpressTrace implements Serializable { public String mText; public String mTime; public String mType; } public static class OrderExpress implements Parcelable { public String mExpressId; public String mExpressName; public String mExpressSN; public String mUpdateTime; public boolean mIsShow = false; public ArrayList<OrderExpressTrace> mTraces; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flag) { dest.writeString(mExpressId); dest.writeString(mExpressName); dest.writeString(mExpressSN); dest.writeString(mUpdateTime); dest.writeBooleanArray(new boolean[] { mIsShow }); dest.writeList(mTraces); } public static final Parcelable.Creator<OrderExpress> CREATOR = new Creator<OrderExpress>() { @Override public OrderExpress[] newArray(int size) { return new OrderExpress[size]; } @Override public OrderExpress createFromParcel(Parcel p) { OrderExpress order = new OrderExpress(); order.mExpressId = p.readString(); order.mExpressName = p.readString(); order.mExpressSN = p.readString(); order.mUpdateTime = p.readString(); p.readBooleanArray(new boolean[] { order.mIsShow }); p.readList(order.mTraces, OrderExpressTrace.class.getClassLoader()); return order; } }; } public static class PickupInfo { public String mPickupAddress; public String mPickupName; public String mPickupTel; public String mPickupLonLat; public PickupInfo(String pickupAddress, String pickupName, String pickupTel, String pickupLonLat) { mPickupAddress = pickupAddress; mPickupName = pickupName; mPickupTel = pickupTel; mPickupLonLat = pickupLonLat; } } public Order(String orderId, double fee, String consignee, String phoneNumber, String address, String deliveryTime, String addTime, String invoiceInfo, int orderStatus, String statusString, String province, String city, String district, String zipcode, ArrayList<OrderTrack> tracks, ArrayList<ProductBrief> products, ArrayList<String> next, boolean hasPhone, ArrayList<String> showType, ArrayList<DeliverOrder> deliverOrderList) { mOrderId = orderId; mFee = fee; mConsignee = consignee; mConsigneePhone = phoneNumber; mConsigneeAddress = address; mDeliveryTime = deliveryTime; mInvoiceInfo = invoiceInfo; mOrderStatus = orderStatus; mOrderStatusInfo = statusString; mProvince = province; mCity = city; mDistrict = district; mZipCode = zipcode; mTracks = tracks; mProducts = products; mNextList = next; mAddTime = addTime; mHasPhone = hasPhone; mShowType = showType; mDeliverOrderList = deliverOrderList; } public Order() { super(); } public String getOrderId() { return mOrderId; } public double getFee() { return mFee; } public String getConsignee() { return mConsignee; } public String getConsigneePhone() { return mConsigneePhone; } public String getConsigneeAddress() { return mConsigneeAddress; } public String getDeliveryTime() { return mDeliveryTime; } public String getAddTime() { return mAddTime; } public String getInvoiceInfo() { return mInvoiceInfo; } public int getOrderStatus() { return mOrderStatus; } public String getOrderStatusInfo() { return mOrderStatusInfo; } public String getProvince() { return mProvince; } public String getCity() { return mCity; } public String getDistrict() { return mDistrict; } public String getZipCode() { return mZipCode; } public ArrayList<ProductBrief> getProductList() { return mProducts; } public ArrayList<OrderTrack> getTracks() { return mTracks; } public ArrayList<String> getNexts() { return mNextList; } public void setOrderId(String mOrderId) { this.mOrderId = mOrderId; } public void setFee(double mFee) { this.mFee = mFee; } public void setConsignee(String mConsignee) { this.mConsignee = mConsignee; } public void setConsigneePhone(String mConsigneePhone) { this.mConsigneePhone = mConsigneePhone; } public void setConsigneeAddress(String mConsigneeAddress) { this.mConsigneeAddress = mConsigneeAddress; } public void setDeliveryTime(String mDeliveryTime) { this.mDeliveryTime = mDeliveryTime; } public void setAddTime(String mAddTime) { this.mAddTime = mAddTime; } public void setInvoiceInfo(String mInvoiceInfo) { this.mInvoiceInfo = mInvoiceInfo; } public void setOrderStatus(int mOrderStatus) { this.mOrderStatus = mOrderStatus; } public void setOrderStatusInfo(String mOrderStatusInfo) { this.mOrderStatusInfo = mOrderStatusInfo; } public void setTracks(ArrayList<OrderTrack> mTracks) { this.mTracks = mTracks; } public void setProvince(String mProvince) { this.mProvince = mProvince; } public void setCity(String mCity) { this.mCity = mCity; } public void setDistrict(String mDistrict) { this.mDistrict = mDistrict; } public void setZipCode(String mZipCode) { this.mZipCode = mZipCode; } public void setProducts(ArrayList<ProductBrief> mProducts) { this.mProducts = mProducts; } public void setNextList(ArrayList<String> mNextList) { this.mNextList = mNextList; } public void setExpress(OrderExpress mExpress) { this.mExpress = mExpress; } public void setHasPhone(boolean mHasPhone) { this.mHasPhone = mHasPhone; } public void setShowType(ArrayList<String> mShowType) { this.mShowType = mShowType; } public boolean hasPhone() { return mHasPhone; } public boolean isMihomeBuy() { return mShowType != null && mShowType.contains("MIHOME"); } public static ArrayList<OrderTrack> getTracks(JSONArray tracks) { ArrayList<OrderTrack> list = new ArrayList<OrderTrack>(); for (int i = 0; i < tracks.length(); i++) { JSONObject one = tracks.optJSONObject(i); if (one != null) { OrderTrack t = new OrderTrack(); t.mText = one.optString(Tags.Order.TRACK_TEXT); t.mTime = one.optString(Tags.Order.TRACK_TIME); list.add(t); } } if (list.size() == 0) { return null; } return list; } public static ArrayList<ProductBrief> getProducts(JSONObject json) { JSONArray productlist = json.optJSONArray("salesOrderItemList"); ArrayList<ProductBrief> list = new ArrayList<ProductBrief>(); for (int i = 0; i < productlist.length(); i++) { JSONObject one = productlist.optJSONObject(i); if (one != null) { String productId = one.optString("goodsId"); String productName = one.optString("goodsName"); String productPrice = one.optString("realShopPrice"); String totalPrice = one.optString("realShopPrice"); int productCount = one.optInt("goodsCount"); String productImage = TextUtils.isEmpty(one.optString("imageUrl")) ? "" : one.optString("imageUrl") + "?width=180&height=180"; list.add(new ProductBrief(productId, productName, productPrice, productCount, productImage, totalPrice, "", "", "")); } } if (list.size() == 0) { return null; } return list; } public static ArrayList<ProductBrief> getProductSnList(JSONObject json) { JSONArray productlist = json.optJSONArray("goodsInfo"); ArrayList<ProductBrief> list = new ArrayList<ProductBrief>(); if(productlist == null){ return list; } for (int i = 0; i < productlist.length(); i++) { JSONObject one = productlist.optJSONObject(i); if (one != null) { String productId = one.optString("goodsId"); String productName = one.optString("goodsName"); String productPrice = one.optString("realShopPrice"); String totalPrice = one.optString("realShopPrice"); String imei = one.optString("imei"); String sn = one.optString("sn"); String isMobile = one.optString("isMobile"); int productCount = one.optInt("goodsCount"); String productImage = TextUtils.isEmpty(one.optString("imageUrl")) ? "" : one.optString("imageUrl") + "?width=180&height=180"; list.add(new ProductBrief(productId, productName, productPrice, productCount, productImage, totalPrice, imei, sn, isMobile)); } } if (list.size() == 0) { return null; } return list; } public static ArrayList<OrderExpressTrace> getExpressTraces(JSONObject json) { ArrayList<OrderExpressTrace> traces = new ArrayList<OrderExpressTrace>(); JSONArray list = json.optJSONArray(Tags.Order.EXPRESS_TRACE); if (list == null) { return null; } for (int i = 0; i < list.length(); i++) { JSONObject one = list.optJSONObject(i); if (one != null) { OrderExpressTrace t = new OrderExpressTrace(); t.mText = one.optString(Tags.Order.EXPRESS_TRACE_TEXT); t.mTime = one.optString(Tags.Order.EXPRESS_TRACE_TIME); t.mType = Constants.OrderExpressType.ORDER_EXPRESS_LIST_TYPE_DEFAULT; traces.add(0, t); } } return traces; } public int getProvinceId() { return mProvinceId; } public void setProvinceId(int mProvinceId) { this.mProvinceId = mProvinceId; } public String getReducePrice() { return mReducePrice; } public void setReducePrice(String reducePrice) { this.mReducePrice = reducePrice; } public String getShipmentExpense() { return mShipmentExpense; } public void setShipmentExpense(String shipmentExpense) { this.mShipmentExpense = shipmentExpense; } public String getOriginalPrice() { return mOriginalPrice; } public void setOriginalPrice(String originalPrice) { this.mOriginalPrice = originalPrice; } public int getCityId() { return mCityId; } public void setCityId(int mCityId) { this.mCityId = mCityId; } public int getDistrictId() { return mDistrictId; } public void setDistrictId(int mDistrictId) { this.mDistrictId = mDistrictId; } public void setDeliverOrderList(ArrayList<DeliverOrder> deliverOrderList) { mDeliverOrderList = deliverOrderList; } public ArrayList<DeliverOrder> getDeliverOrderList() { return mDeliverOrderList; } public void setPickupInfo(PickupInfo pickupInfo) { mPickupInfo = pickupInfo; } public PickupInfo getPickupInfo() { return mPickupInfo; } public String getOrderPayNo() { return mOrderPayNo; } public void setOrderPayNo(String mOrderPayNo) { this.mOrderPayNo = mOrderPayNo; } public String getOrderPayTime() { return mOrderPayTime; } public void setOrderPayTime(String mOrderPayTime) { this.mOrderPayTime = mOrderPayTime; } public String getOrderUserName() { return mOrderUserName; } public void setOrderUserName(String mOrderUserName) { this.mOrderUserName = mOrderUserName; } public String getOrderUserTel() { return mOrderUserTel; } public void setOrderUserTel(String mOrderUserTel) { this.mOrderUserTel = mOrderUserTel; } public String getOrderUserEmail() { return mOrderUserEmail; } public void setOrderUserEmail(String mOrderUserEmail) { this.mOrderUserEmail = mOrderUserEmail; } public static Order valueOf(JSONObject json) throws JSONException { Order order = null; if (Tags.isJSONReturnedOK(json)) { String bodyStr = json.optString(Tags.BODY); if (!TextUtils.isEmpty(bodyStr)) { JSONObject bodyJson = new JSONObject(bodyStr); if (bodyJson != null) { JSONObject dataJson = bodyJson.optJSONObject("data"); JSONObject posInfoJson = bodyJson.optJSONObject("posInfo"); JSONObject payCompanyInfoJson = bodyJson.optJSONObject("payCompanyInfo"); ArrayList<ProductBrief> productSns = getProductSnList(bodyJson); if (dataJson != null) { // product list ArrayList<ProductBrief> products = getProducts(dataJson); // own fields String consignee = dataJson.optString(Tags.Order.CONSIGNEE); double fee = dataJson.optDouble("realTotalPrice"); String reducePrice = dataJson.optString(Tags.Order.REDUCE_PRICE); String originalPrice = dataJson.optString(Tags.Order.ORIGINAL_PRICE); String shipmentExpress = dataJson.optString(Tags.Order.SHIPMENT_EXPRENSE); String orderId = dataJson.optString("serviceNumber"); String invoiceTitle = dataJson.optString(Tags.Order.INVOICE_TITLE); String deliveryTime = dataJson.optString(Tags.Order.BEST_TIME); String addTime = dataJson.optString("addTime"); String consigneePhone = dataJson.optString(Tags.Order.CONSIGNEE_PHONE); String address = dataJson.optString(Tags.Order.ADDRESS); int status = dataJson.optInt("orderStatus"); int orderType = dataJson.optInt("orderType"); String statusStr = dataJson.optString("orderStatusName"); String zipcode = dataJson.optString(Tags.Order.ZIPCODE); boolean hasPhone = dataJson.optBoolean(Tags.Order.HAS_PHONE, false); order = new Order(orderId, fee, consignee, consigneePhone, address, deliveryTime, addTime, invoiceTitle, status, statusStr, null, null, null, zipcode, null, products, null, hasPhone, null, null); order.setmProductSnList(productSns); order.setShipmentExpense(shipmentExpress); order.setReducePrice(reducePrice); order.setOriginalPrice(originalPrice); String orderPayNo = dataJson.optString("companyOrderNumber"); String orderPayTime = dataJson.optString("payTime"); String orderUserName = dataJson.optString("consignee"); String orderUserTel = dataJson.optString("tel"); String orderUserEmail = dataJson.optString("email"); order.setOrderPayNo(orderPayNo); order.setOrderPayTime(orderPayTime); order.setOrderUserName(orderUserName); order.setOrderUserTel(orderUserTel); order.setOrderUserEmail(orderUserEmail); order.setOrderType(orderType); //订单类型 if(dataJson.has(Tags.Order.ORDER_STATUS_DESC)){ String orderStatusDesc = dataJson.optString(Tags.Order.ORDER_STATUS_DESC); order.setOrderStatusInfo(orderStatusDesc); } JSONArray subSalesOrderList = dataJson.optJSONArray("subSalesOrderList"); if(subSalesOrderList != null){ if(subSalesOrderList.length() == 1){ if(subSalesOrderList.optJSONObject(0).optString("payId").equals("100") && subSalesOrderList.optJSONObject(0).optString("orderStatus").equals("39") && subSalesOrderList.optJSONObject(0).optString("orderStatusDesc").equals("已退款")){ String orderStatusDesc = subSalesOrderList.optJSONObject(0).optString("orderStatusDesc"); order.setOrderStatusInfo(orderStatusDesc); } } } order.setPayId(dataJson.optInt("payId")); order.setOrgName(dataJson.optString("orgName")); order.setOrgAddress(dataJson.optString("orgAddress")); order.setOrgTel(dataJson.optString("orgTel")); order.setMituShuo(dataJson.optString("mituShuo")); } if (posInfoJson != null) { if(posInfoJson.has(Tags.Order.DEVICE_NAME)){ String deviceName = posInfoJson.optString(Tags.Order.DEVICE_NAME); order.setmPosName(deviceName); } } if(bodyJson.has("companyName")){ String companyName = bodyJson.optString("companyName"); order.setmMerchantName(companyName); } if (payCompanyInfoJson != null) { if(payCompanyInfoJson.has(Tags.Order.RETURN_POSREQUSTID)){ String posRequstId = payCompanyInfoJson.optString(Tags.Order.RETURN_POSREQUSTID); order.setPosRequstId(posRequstId); } if(payCompanyInfoJson.has(Tags.Order.RETURN_REFERENCENUMBER)){ String referenceNumber = payCompanyInfoJson.optString(Tags.Order.RETURN_REFERENCENUMBER); order.setReferenceNumber(referenceNumber); } if(payCompanyInfoJson.has(Tags.Order.RETURN_PAY_STATUS)){ String payStatus = payCompanyInfoJson.optString(Tags.Order.RETURN_PAY_STATUS); order.setmPayStatus(payStatus); } } } } } return order; } public static String getErrorInfo(JSONObject json) { return json.optString(Tags.DESCRIPTION); } public static String getErrorDescInfo(JSONObject json) throws JSONException { String headerStr = json.optString(Tags.HEADER); JSONObject headerJson = new JSONObject(headerStr); return headerJson.optString(Tags.DESC); } public int getOrderType() { return orderType; } public void setOrderType(int orderType) { this.orderType = orderType; } public String getOrgName() { return orgName; } public void setOrgName(String orgName) { this.orgName = orgName; } public String getOrgTel() { return orgTel; } public void setOrgTel(String orgTel) { this.orgTel = orgTel; } public String getOrgAddress() { return orgAddress; } public void setOrgAddress(String orgAddress) { this.orgAddress = orgAddress; } public int getPayid() { return payId; } public void setPayId(int payId) { this.payId = payId; } public String getMituShuo() { return mituShuo; } public void setMituShuo(String mituShuo) { this.mituShuo = mituShuo; } public String getmMerchantName() { return mMerchantName; } public void setmMerchantName(String mMerchantName) { this.mMerchantName = mMerchantName; } public String getmPosName() { return mPosName; } public void setmPosName(String mPosName) { this.mPosName = mPosName; } public String getPosRequstId() { return posRequstId; } public void setPosRequstId(String posRequstId) { this.posRequstId = posRequstId; } public String getReferenceNumber() { return referenceNumber; } public void setReferenceNumber(String referenceNumber) { this.referenceNumber = referenceNumber; } public String getmPayStatus() { return mPayStatus; } public void setmPayStatus(String mPayStatus) { this.mPayStatus = mPayStatus; } public ArrayList<ProductBrief> getmProductSnList() { return mProductSnList; } public void setmProductSnList(ArrayList<ProductBrief> mProductSnList) { this.mProductSnList = mProductSnList; } }