Browse Source

[쿠폰몰][New] 환불 코인 알림 API 추가

hyodong.min 6 years ago
parent
commit
a681f4e6f2

+ 7 - 0
app/src/common/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIService.java

@@ -7,6 +7,8 @@ import io.reactivex.Single;
 import kr.co.zumo.app.lifeplus.bean.api.AuthConfirmRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.AuthNumberRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.AuthNumberResultBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BookmarkListResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BookmarkResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BucketBackgroundListResultBean;
@@ -804,6 +806,11 @@ public class LifeplusAPIService extends LifeplusRetrofitService implements Lifep
     return api().getCoinBanner(bean);
   }
 
+  @Override
+  public Single<CoinAvailableResultBean> getAvailableCoin(CoinAvailableRequestBean bean) {
+    return api().getAvailableCoin(bean);
+  }
+
   /**
    * 알림
    *

+ 33 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/bean/api/CoinAvailableRequestBean.java

@@ -0,0 +1,33 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.bean.api;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * CoinAvailableRequestBean
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 2. 1.]   [최초 작성]
+ * @since 2019. 2. 1.
+ */
+public class CoinAvailableRequestBean extends RequestBean {
+  @SerializedName("purcId")
+  private String purchaseId;
+
+  public CoinAvailableRequestBean(String purchaseId) {
+    this.purchaseId = purchaseId;
+  }
+
+  public String getPurchaseId() {
+    return purchaseId;
+  }
+
+  public void setPurchaseId(String purchaseId) {
+    this.purchaseId = purchaseId;
+  }
+}

+ 47 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/bean/api/CoinAvailableResultBean.java

@@ -0,0 +1,47 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.bean.api;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * CoinAvailableResultBean
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 2. 1.]   [최초 작성]
+ * @since 2019. 2. 1.
+ */
+public class CoinAvailableResultBean extends LifeplusAPIBean {
+  /*
+  {
+   "sp_rtn":0 ,
+   "rtn_message" :"성공",
+   "price" : "300",
+   "unavailable" : "200"
+  }
+   */
+  @SerializedName("price")
+  private String price;
+  @SerializedName("unavailable")
+  private String unavailableCoin; // 환불 불가 코인
+
+  public String getPrice() {
+    return price;
+  }
+
+  public void setPrice(String price) {
+    this.price = price;
+  }
+
+  public String getUnavailableCoin() {
+    return unavailableCoin;
+  }
+
+  public void setUnavailableCoin(String unavailableCoin) {
+    this.unavailableCoin = unavailableCoin;
+  }
+}

+ 26 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/model/module/APICoInAvailabeModule.java

@@ -0,0 +1,26 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.model.module;
+
+import io.reactivex.Single;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableResultBean;
+import kr.co.zumo.app.lifeplus.network.api.LifeplusAPIRepository;
+
+/**
+ * APICoInAvailabeModule
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 1. 2.]   [최초 작성]
+ * @since 2019. 1. 2.
+ */
+public class APICoInAvailabeModule extends LifeplusAPIModule<CoinAvailableRequestBean, CoinAvailableResultBean> {
+  @Override
+  protected Single<CoinAvailableResultBean> getAPI(CoinAvailableRequestBean requestBean) {
+    return new LifeplusAPIRepository().getAvailableCoin(requestBean);
+  }
+}

+ 5 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPI.java

@@ -7,6 +7,8 @@ import io.reactivex.Single;
 import kr.co.zumo.app.lifeplus.bean.api.AuthConfirmRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.AuthNumberRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.AuthNumberResultBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BookmarkListResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BookmarkResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BucketBackgroundListResultBean;
@@ -294,6 +296,9 @@ public interface LifeplusAPI {
   @POST("mapi/my/mybnerlist.plus")
   Single<CoinBannerResultBean> getCoinBanner(@Body RequestBean bean);
 
+  @POST("mapi/my/getUnavailableCoin.plus")
+  Single<CoinAvailableResultBean> getAvailableCoin(@Body CoinAvailableRequestBean bean);
+
 
   /***********************************
    * 문의 / FAQ

+ 7 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIRepository.java

@@ -9,6 +9,8 @@ import io.reactivex.Single;
 import kr.co.zumo.app.lifeplus.bean.api.AuthConfirmRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.AuthNumberRequestBean;
 import kr.co.zumo.app.lifeplus.bean.api.AuthNumberResultBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BookmarkListResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BookmarkResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.BucketBackgroundListResultBean;
@@ -520,6 +522,11 @@ public class LifeplusAPIRepository implements LifeplusAPI {
     return new LifeplusAPIService().getCoinBanner(bean);
   }
 
+  @Override
+  public Single<CoinAvailableResultBean> getAvailableCoin(CoinAvailableRequestBean bean) {
+    return new LifeplusAPIService().getAvailableCoin(bean);
+  }
+
   @Override
   public Single<NotificationResultBean> getNotification(RequestBean bean) {
     return new LifeplusAPIService().getNotification(bean);

+ 61 - 16
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/couponmall/CouponMallModel.java

@@ -3,13 +3,18 @@
  */
 package kr.co.zumo.app.lifeplus.view.screen.couponmall;
 
-import kr.co.zumo.app.R;
+import io.reactivex.disposables.Disposable;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableResultBean;
 import kr.co.zumo.app.lifeplus.config.NetworkConfig;
-import kr.co.zumo.app.lifeplus.model.AES;
+import kr.co.zumo.app.lifeplus.model.BasicParamProvider;
 import kr.co.zumo.app.lifeplus.model.Model;
 import kr.co.zumo.app.lifeplus.model.SuperModel;
-import kr.co.zumo.app.lifeplus.util.ResourceUtil;
+import kr.co.zumo.app.lifeplus.model.module.APICoInAvailabeModule;
+import kr.co.zumo.app.lifeplus.model.module.APIError;
+import kr.co.zumo.app.lifeplus.model.module.APIModuleListener;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
+import kr.co.zumo.app.lifeplus.view.Event;
 
 /**
  * CouponMallModel
@@ -30,7 +35,10 @@ public class CouponMallModel extends Model {
 
   @Override
   protected void destroyInternal() {
-
+    if (null != disposable) {
+      disposable.dispose();
+      disposable = null;
+    }
   }
 
   @Override
@@ -82,22 +90,59 @@ public class CouponMallModel extends Model {
    * @return
    */
   public String getEncryptedUserId() {
-    String userId = super.getUserId();
+//    String userId = super.getUserId();
+//
+//    if (StringUtil.isEmpty(userId)) {
+//      return "";
+//    }
+//
+//    try {
+//      return AES.encrypt(userId, ResourceUtil.getString(R.string.aes_key));
+//    } catch (Exception e) {
+//      e.printStackTrace();
+//    }
+
+    return new BasicParamProvider().getAesUserId();
+  }
 
-    if (StringUtil.isEmpty(userId)) {
-      return "";
-    }
+  public String getCoopCode() {
+    return NetworkConfig.getCoopCode();
+  }
 
-    try {
-      return AES.encrypt(userId, ResourceUtil.getString(R.string.aes_key));
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
+  private Disposable disposable;
+  private String price = "0";
+  private String unavailableCoin = "0";
+
+  public void loadAvailableCoin(String purchaseId) {
+    disposable = new APICoInAvailabeModule().call(new CoinAvailableRequestBean(purchaseId), new APIModuleListener<CoinAvailableResultBean>() {
+      @Override
+      public void onApiSuccess(CoinAvailableResultBean resultBean) {
+        if (null != resultBean) {
+          price = resultBean.getPrice();
+          unavailableCoin = resultBean.getUnavailableCoin();
+        }
+
+        onResult(new Event.Builder(Event.SUCCESS).build());
+      }
+
+      @Override
+      public void onApiError(String errorMessage, APIError error) {
+        onResult(new Event.Builder(Event.ERROR).string(errorMessage).build());
+      }
+    });
+  }
 
-    return userId;
+  public String getPrice() {
+    if(StringUtil.isEmpty(price)) {
+      price = "0";
+    }
+    return price;
   }
 
-  public String getCoopCode() {
-    return NetworkConfig.getCoopCode();
+  public String getUnavailableCoin() {
+    if(StringUtil.isEmpty(unavailableCoin)) {
+      unavailableCoin = "0";
+    }
+    return unavailableCoin;
   }
 }

+ 72 - 36
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/couponmall/CouponMallPresenter.java

@@ -87,7 +87,23 @@ public class CouponMallPresenter extends Presenter<CouponMallModel, ICouponMallV
 
   @Override
   public void onResult(Event event) {
-
+    switch (event.getEventId()) {
+      case Event.SUCCESS:
+        String price = model.getPrice();
+        String unavailableCoin = model.getUnavailableCoin();
+        if (Integer.parseInt(price) > 0) {
+          showAvailableCoinPopup(price, unavailableCoin);
+        }
+        else {
+          showErrorDialog(R.string.invalid_data);
+        }
+        break;
+      case Event.ERROR:
+        showErrorDialog(event.getString());
+        break;
+      default:
+        break;
+    }
   }
 
   @Override
@@ -172,41 +188,61 @@ public class CouponMallPresenter extends Presenter<CouponMallModel, ICouponMallV
    * @param purchaseId
    */
   public void onRefundSelected(String purchaseId) {
-      if (null == purchaseCancelDialog) {
-        Log.i("APP# Presenter | onRefundSelected", "|" + " purchaseId -------- " + purchaseId);
-        purchaseCancelDialog = new DialogBuilder<ConfirmDialog, ICustomConfirmListener>(getFragmentManager(), DialogID.CONFIRM)
-          .listener(new ICustomConfirmListener<ConfirmDialog>() {
-            @Override
-            public void onPositiveResult(ConfirmDialog dialog, Event event) {
-              purchaseCancelDialog = null;
-              dialog.dispose();
-              // 취소함
-              view.performRefundConfirm();
-            }
-
-            @Override
-            public void onNegativeResult(ConfirmDialog dialog, Event event) {
-              purchaseCancelDialog = null;
-              dialog.dispose();
-              // 취소 안함
-              view.performRefundCancel();
-            }
-
-            @Override
-            public void onDialogCanceled(ConfirmDialog dialog) {
-              purchaseCancelDialog = null;
-              dialog.dispose();
-              // 취소 안함
-              view.performRefundCancel();
-            }
-          })
-          .attribute(dialog -> {
-            dialog.setTitleId(R.string.coupon_purchase_cancel_title);
-            dialog.setText(ResourceUtil.getString(R.string.coupon_purchase_cancel_message));
-            dialog.setNegativeButtonLabelId(R.string.coupon_purchase_cancel_no);
-            dialog.setPositiveButtonLabelId(R.string.coupon_purchase_cancel_yes);
-          })
-          .show();
+    Log.i("APP# Presenter | onRefundSelected", "|" + " purchaseId -------- " + purchaseId);
+    model.loadAvailableCoin(purchaseId);
+  }
+
+  private void showAvailableCoinPopup(String price, String unavailableCoin) {
+    if (null == purchaseCancelDialog) {
+      String text;
+      int priceValue = Integer.parseInt(price);
+      int unavailableCoinValue = Integer.parseInt(unavailableCoin);
+      if (unavailableCoinValue == 0) {
+        // 전체 환불
+        text = ResourceUtil.getString(R.string.coupon_purchase_cancel_message);
+      }
+      else if (priceValue == unavailableCoinValue) {
+        // 전체 불가
+        text = ResourceUtil.getString(R.string.coupon_purchase_cancel_message_anything, StringUtil.toComma(unavailableCoinValue));
       }
+      else {
+        // 부분 가능
+        text = ResourceUtil.getString(R.string.coupon_purchase_cancel_message_partially, StringUtil.toComma(priceValue), StringUtil.toComma(unavailableCoinValue));
+      }
+
+      purchaseCancelDialog = new DialogBuilder<ConfirmDialog, ICustomConfirmListener>(getFragmentManager(), DialogID.CONFIRM)
+        .listener(new ICustomConfirmListener<ConfirmDialog>() {
+          @Override
+          public void onPositiveResult(ConfirmDialog dialog, Event event) {
+            purchaseCancelDialog = null;
+            dialog.dispose();
+            // 취소함
+            view.performRefundConfirm();
+          }
+
+          @Override
+          public void onNegativeResult(ConfirmDialog dialog, Event event) {
+            purchaseCancelDialog = null;
+            dialog.dispose();
+            // 취소 안함
+            view.performRefundCancel();
+          }
+
+          @Override
+          public void onDialogCanceled(ConfirmDialog dialog) {
+            purchaseCancelDialog = null;
+            dialog.dispose();
+            // 취소 안함
+            view.performRefundCancel();
+          }
+        })
+        .attribute(dialog -> {
+          dialog.setTitleId(R.string.coupon_purchase_cancel_title);
+          dialog.setText(text);
+          dialog.setNegativeButtonLabelId(R.string.coupon_purchase_cancel_no);
+          dialog.setPositiveButtonLabelId(R.string.coupon_purchase_cancel_yes);
+        })
+        .show();
+    }
   }
 }

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -690,6 +690,8 @@
   <string name="coupon_mall">쿠폰몰</string>
   <string name="coupon_purchase_cancel_title">주문취소</string>
   <string name="coupon_purchase_cancel_message">쿠폰 취소 하시겠어요?\n\n- Coin 환불 시, 사용가능기간은 이전과 동일하게 유지됩니다.</string>
+  <string name="coupon_purchase_cancel_message_partially">쿠폰을 취소하시면\n%1$sⓒ 만 환불됩니다.\n\n- 유효기간 만료 Coin : %2$sⓒ\n\n그래도 쿠폰을 취소하시겠어요?</string>
+  <string name="coupon_purchase_cancel_message_anything">쿠폰을 취소하시면\nCoin 환불이 불가합니다.\n\n- 유효기간 만료 Coin : %sⓒ\n\n그래도 쿠폰을 취소하시겠어요?</string>
   <string name="coupon_purchase_cancel_yes">확인</string>
   <string name="coupon_purchase_cancel_no">취소</string>
 

+ 11 - 0
app/src/sandbox/java/kr/co/zumo/app/lifeplus/network/api/LifeplusAPIService.java

@@ -27,6 +27,8 @@ import kr.co.zumo.app.lifeplus.bean.api.CategoryContentsResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.CategoryFilterResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.CategoryRecommendResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.CategoryRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableRequestBean;
+import kr.co.zumo.app.lifeplus.bean.api.CoinAvailableResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.CoinBannerResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.CoinExtinctionResultBean;
 import kr.co.zumo.app.lifeplus.bean.api.CoinInfoRequestBean;
@@ -727,6 +729,15 @@ public class LifeplusAPIService implements LifeplusAPI {
     });
   }
 
+  @Override
+  public Single<CoinAvailableResultBean> getAvailableCoin(CoinAvailableRequestBean bean) {
+    return Single.fromCallable(() -> {
+      String result = "{\"sp_rtn\":0,\"rtn_message\":\"성공\",\"price\":\"300\",\"unavailable\":\"200\"}";
+
+      return new Gson().fromJson(result, CoinAvailableResultBean.class);
+    });
+  }
+
   @Override
   public Single<NotificationResultBean> getNotification(RequestBean bean) {
     return Single.fromCallable(() -> {