PayPresenter.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. package com.edufound.reader.presenter;
  2. import android.app.ActionBar;
  3. import android.graphics.Color;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.widget.ImageView;
  9. import android.widget.LinearLayout;
  10. import android.widget.TextView;
  11. import com.edufound.reader.R;
  12. import com.edufound.reader.apiserver.OrderApiServerImpl;
  13. import com.edufound.reader.base.BasePresenter;
  14. import com.edufound.reader.bean.ChannelCodeEnum;
  15. import com.edufound.reader.bean.HttpResultBean;
  16. import com.edufound.reader.bean.PayResultBean;
  17. import com.edufound.reader.contract.PayContract;
  18. import com.edufound.reader.cusview.CusToast;
  19. import com.edufound.reader.model.PayModel;
  20. import com.edufound.reader.util.Consts;
  21. import com.edufound.reader.util.DeviceUuidFactory;
  22. import com.google.gson.Gson;
  23. import com.google.gson.reflect.TypeToken;
  24. import com.okhttplib.HttpInfo;
  25. import com.okhttplib.callback.Callback;
  26. import com.orhanobut.logger.Logger;
  27. import java.io.IOException;
  28. import java.util.HashMap;
  29. import java.util.List;
  30. import java.util.Map;
  31. import androidx.annotation.NonNull;
  32. import androidx.constraintlayout.widget.ConstraintLayout;
  33. import org.json.JSONObject;
  34. public class PayPresenter extends BasePresenter<PayContract.View> implements PayContract.Presenter {
  35. PayModel mModel;
  36. OrderApiServerImpl mOrderApi;
  37. List<PayResultBean> mPayResult;
  38. String nowOrderId = null;
  39. public PayPresenter() {
  40. this.mModel = new PayModel();
  41. mOrderApi = new OrderApiServerImpl();
  42. }
  43. @Override
  44. public void getProductInfo() {
  45. mOrderApi.getProductListInfo(mView.getActivity(), Consts.getUMengChannel(), new Callback() {
  46. @Override
  47. public void onSuccess(HttpInfo info) throws IOException {
  48. HttpResultBean<List<PayResultBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<List<PayResultBean>>>() {
  49. }.getType());
  50. mPayResult = bean.getData();
  51. mView.getProductSuccess();
  52. }
  53. @Override
  54. public void onFailure(HttpInfo info) throws IOException {
  55. }
  56. });
  57. }
  58. @Override
  59. public void activityDestory() {
  60. if (handler != null) {
  61. handler.removeMessages(1);
  62. handler.removeMessages(2);
  63. handler = null;
  64. }
  65. }
  66. @Override
  67. public void initPayItem(LinearLayout itemFrame) {
  68. for (int i = 0; i < mPayResult.size(); i++) {
  69. Message message = new Message();
  70. message.obj = itemFrame;
  71. message.what = 1;
  72. message.arg1 = i;
  73. handler.sendMessageDelayed(message, 50 * i);
  74. }
  75. }
  76. @Override
  77. public void isPaySuccess() {
  78. mModel.isPay(mView.getActivity(), nowOrderId, new Callback() {
  79. @Override
  80. public void onSuccess(HttpInfo info) throws IOException {
  81. HttpResultBean<PayResultBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<PayResultBean>>() {
  82. }.getType());
  83. if (bean.getData().getPayStatus().equals("SUCCESS")) {
  84. CusToast.getInstance(mView.getActivity()).show("支付成功", 3000);
  85. mView.getActivity().finish();
  86. handler.removeMessages(2);
  87. } else {
  88. handler.sendEmptyMessageDelayed(2, 3000);
  89. }
  90. }
  91. @Override
  92. public void onFailure(HttpInfo info) throws IOException {
  93. }
  94. });
  95. }
  96. void initItem(LinearLayout itemFrame, int position) {
  97. View view = LayoutInflater.from(mView.getActivity()).inflate(R.layout.activity_pay_item, null);
  98. view.setLayoutParams(new LinearLayout.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, 0, 1));
  99. PayItemHolder holder = new PayItemHolder(view);
  100. holder.mTitle.setText(mPayResult.get(position).getTitle());
  101. holder.mPayMoney.setText(String.valueOf(Double.parseDouble(mPayResult.get(position).getPrice()) / 100));
  102. holder.mIsCheck.setVisibility(View.INVISIBLE);
  103. double a = (Double.parseDouble(mPayResult.get(position).getOriginPrice()) / 100);
  104. double b = (Double.parseDouble(mPayResult.get(position).getPrice()) / 100);
  105. holder.mContent.setText("原价:" + a + ",现价:" + b + "元");
  106. if (mPayResult.get(position).getPayType().equals("YEAR")) {
  107. holder.mConstraintLayoutBg.setBackgroundColor(Color.parseColor("#FF904E"));
  108. } else if (mPayResult.get(position).getPayType().equals("MONTH")) {
  109. holder.mConstraintLayoutBg.setBackgroundColor(Color.parseColor("#E08CFF"));
  110. } else {
  111. holder.mConstraintLayoutBg.setBackgroundColor(Color.parseColor("#FFFFFF"));
  112. }
  113. view.setTag(holder);
  114. mView.addUiClick(view, o -> {
  115. for (int j = 0; j < itemFrame.getChildCount(); j++) {
  116. ((PayItemHolder) itemFrame.getChildAt(j).getTag()).mIsCheck.setVisibility(View.INVISIBLE);
  117. }
  118. ((PayItemHolder) view.getTag()).mIsCheck.setVisibility(View.VISIBLE);
  119. Map<String, String> createOrderMap = new HashMap<>();
  120. createOrderMap.put("channel", Consts.getUMengChannel());
  121. createOrderMap.put("deviceID", DeviceUuidFactory.getUuid());
  122. createOrderMap.put("first", "false");
  123. createOrderMap.put("payType", mPayResult.get(position).getPayType());
  124. createOrderMap.put("productId", mPayResult.get(position).getId());
  125. createOrderMap.put("uid", Consts.getUID());
  126. if (Consts.getUMengChannel().equals(ChannelCodeEnum.LENOVO_PAD.getChannelCode())) {
  127. //创建联想订单
  128. Logger.e("创建联想订单");
  129. mOrderApi.createdOrderByLianXiang(mView.getActivity(), new Gson().toJson(createOrderMap), new Callback() {
  130. @Override
  131. public void onSuccess(HttpInfo info) throws IOException {
  132. try {
  133. JSONObject object = new JSONObject(info.getRetDetail());
  134. JSONObject json = object.getJSONObject("data");
  135. String qrCode = json.getString("qrCode");
  136. nowOrderId = json.getString("orderId");
  137. Logger.e("二维码地址:" + qrCode.toString());
  138. mView.setQRCode(qrCode);
  139. handler.sendEmptyMessage(2);
  140. } catch (Exception e) {
  141. e.printStackTrace();
  142. }
  143. }
  144. @Override
  145. public void onFailure(HttpInfo info) throws IOException {
  146. Logger.e("创建订单失败:" + info.getRetDetail());
  147. }
  148. });
  149. } else {
  150. //创建普通订单
  151. mOrderApi.createdOrder(mView.getActivity(), new Gson().toJson(createOrderMap), new Callback() {
  152. @Override
  153. public void onSuccess(HttpInfo info) throws IOException {
  154. try {
  155. JSONObject object = new JSONObject(info.getRetDetail());
  156. JSONObject json = object.getJSONObject("data");
  157. nowOrderId = json.getString("orderId");
  158. mModel.getPayQRCode(mView.getActivity(), mPayResult.get(position).getId(), new Callback() {
  159. @Override
  160. public void onSuccess(HttpInfo info) throws IOException {
  161. HttpResultBean<String> bean = info.getRetDetail(new TypeToken<HttpResultBean<String>>() {
  162. }.getType());
  163. mView.setQRCode(bean.getData().toString());
  164. handler.sendEmptyMessage(2);
  165. }
  166. @Override
  167. public void onFailure(HttpInfo info) throws IOException {
  168. }
  169. });
  170. } catch (Exception e) {
  171. e.printStackTrace();
  172. }
  173. }
  174. @Override
  175. public void onFailure(HttpInfo info) throws IOException {
  176. Logger.e("创建订单失败:" + info.getRetDetail());
  177. }
  178. });
  179. }
  180. });
  181. itemFrame.addView(view);
  182. if (position >= mPayResult.size() - 1) {
  183. itemFrame.getChildAt(0).performClick();
  184. }
  185. }
  186. Handler handler = new Handler(new Handler.Callback() {
  187. @Override
  188. public boolean handleMessage(@NonNull Message message) {
  189. switch (message.what) {
  190. case 1:
  191. initItem(((LinearLayout) message.obj), message.arg1);
  192. break;
  193. case 2:
  194. isPaySuccess();
  195. break;
  196. }
  197. return false;
  198. }
  199. });
  200. class PayItemHolder {
  201. ConstraintLayout mConstraintLayoutBg;
  202. TextView mTitle;
  203. TextView mContent;
  204. TextView mPayMoney;
  205. ImageView mIsCheck;
  206. public PayItemHolder(View itemView) {
  207. mConstraintLayoutBg = itemView.findViewById(R.id.activity_pay_item_bg);
  208. mTitle = itemView.findViewById(R.id.activity_pay_item_title);
  209. mContent = itemView.findViewById(R.id.activity_pay_item_content);
  210. mPayMoney = itemView.findViewById(R.id.activity_pay_item_money);
  211. mIsCheck = itemView.findViewById(R.id.activity_pay_item_check);
  212. }
  213. }
  214. }