Browse Source

增加案例&订单数据显示

zk 1 year ago
parent
commit
fa4e8f7edb

+ 4 - 0
app/src/main/java/com/datarecovery/master/data/api/AtmobApi.java

@@ -17,6 +17,7 @@ import com.datarecovery.master.data.api.response.MemberDetailResponse;
 import com.datarecovery.master.data.api.response.MemberPayResponse;
 import com.datarecovery.master.data.api.response.OrderPageResponse;
 import com.datarecovery.master.data.api.response.PaymentStatusResponse;
+import com.datarecovery.master.data.api.response.UserCaseResponse;
 
 import atmob.reactivex.rxjava3.core.Single;
 import atmob.retrofit2.http.Body;
@@ -48,4 +49,7 @@ public interface AtmobApi {
 
     @POST("/project/recover/v1/order/find")
     Single<BaseResponse<FindOrderResponse>> findOrder(@Body FindOrderRequest request);
+
+    @POST("/project/recover/v1/user/case/list")
+    Single<BaseResponse<UserCaseResponse>> userCaseList(@Body BaseRequest request);
 }

+ 54 - 0
app/src/main/java/com/datarecovery/master/data/api/bean/ExampleBean.java

@@ -1,4 +1,58 @@
 package com.datarecovery.master.data.api.bean;
 
+import com.google.gson.annotations.SerializedName;
+
 public class ExampleBean {
+
+
+    @SerializedName("title")
+    private String title;
+    @SerializedName("content")
+    private String content;
+    @SerializedName("images")
+    private String images;
+    @SerializedName("link")
+    private String link;
+    @SerializedName("createTime")
+    private String createTime;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getImages() {
+        return images;
+    }
+
+    public void setImages(String images) {
+        this.images = images;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
 }

+ 12 - 2
app/src/main/java/com/datarecovery/master/data/api/bean/OrderBean.java

@@ -1,5 +1,7 @@
 package com.datarecovery.master.data.api.bean;
 
+import com.atmob.common.text.TextUtil;
+import com.datarecovery.master.utils.DateUtil;
 import com.google.gson.annotations.SerializedName;
 
 public class OrderBean {
@@ -27,6 +29,14 @@ public class OrderBean {
         return tutorialLink;
     }
 
+    public String getExpireDate() {
+        if (permanent) {
+            return "永久有效";
+        } else {
+            return DateUtil.formatNormalDate(DateUtil.YYYY_MM_DD, endTimestamp);
+        }
+    }
+
     public String getItemName() {
         return itemName;
     }
@@ -35,8 +45,8 @@ public class OrderBean {
         this.itemName = itemName;
     }
 
-    public int getAmount() {
-        return amount;
+    public String getAmount() {
+        return String.valueOf(amount / 100.0);
     }
 
     public void setAmount(int amount) {

+ 17 - 0
app/src/main/java/com/datarecovery/master/data/api/response/UserCaseResponse.java

@@ -0,0 +1,17 @@
+package com.datarecovery.master.data.api.response;
+
+import com.datarecovery.master.data.api.bean.ExampleBean;
+import com.google.gson.annotations.SerializedName;
+
+import java.util.List;
+
+public class UserCaseResponse {
+
+    @SerializedName("list")
+    private List<ExampleBean> exampleBeans;
+
+
+    public List<ExampleBean> getExampleBeans() {
+        return exampleBeans;
+    }
+}

+ 12 - 0
app/src/main/java/com/datarecovery/master/data/repositories/DeviceFuncRepository.java

@@ -7,7 +7,10 @@ import com.atmob.app.lib.handler.RxHttpHandler;
 import com.atmob.common.text.TextUtil;
 import com.datarecovery.master.data.api.AtmobApi;
 import com.datarecovery.master.data.api.request.BaseRequest;
+import com.datarecovery.master.data.api.request.FindOrderRequest;
+import com.datarecovery.master.data.api.response.FindOrderResponse;
 import com.datarecovery.master.data.api.response.FuncAuthsResponse;
+import com.datarecovery.master.data.api.response.UserCaseResponse;
 import com.datarecovery.master.module.member.MemberType;
 
 import java.util.ArrayList;
@@ -18,6 +21,7 @@ import javax.inject.Inject;
 import javax.inject.Singleton;
 
 import atmob.reactivex.rxjava3.annotations.NonNull;
+import atmob.reactivex.rxjava3.core.Single;
 import atmob.reactivex.rxjava3.core.SingleObserver;
 import atmob.reactivex.rxjava3.disposables.Disposable;
 import atmob.rxjava.utils.RxJavaUtil;
@@ -84,4 +88,12 @@ public class DeviceFuncRepository {
     public void clearAuths() {
         authsList.clear();
     }
+
+
+    public Single<UserCaseResponse> userCaseList() {
+        return atmobApi.userCaseList(new BaseRequest())
+                .compose(RxHttpHandler.handle(true))
+                .compose(RxJavaUtil.SingleSchedule.io2Main());
+    }
+
 }

+ 1 - 1
app/src/main/java/com/datarecovery/master/data/repositories/PayRepository.java

@@ -30,7 +30,7 @@ public class PayRepository {
 
 
     public Single<OrderPageResponse> orderPage(int offset, int limit) {
-        return atmobApi.orderPage(new OrderPageRequest(offset, limit))
+        return atmobApi.orderPage(new OrderPageRequest(limit, offset))
                 .compose(RxHttpHandler.handle(true))
                 .compose(RxJavaUtil.SingleSchedule.io2Main());
     }

+ 3 - 0
app/src/main/java/com/datarecovery/master/module/example/ExampleFragment.java

@@ -8,7 +8,9 @@ import androidx.annotation.Nullable;
 import androidx.recyclerview.widget.LinearLayoutManager;
 
 import com.atmob.app.lib.base.BaseFragment;
+import com.datarecovery.master.data.api.bean.ExampleBean;
 import com.datarecovery.master.databinding.FragmentExampleBinding;
+import com.datarecovery.master.module.browser.BrowserActivity;
 import com.gyf.immersionbar.ImmersionBar;
 
 import dagger.hilt.android.AndroidEntryPoint;
@@ -32,6 +34,7 @@ public class ExampleFragment extends BaseFragment<FragmentExampleBinding> {
         exampleAdapter = new ExampleAdapter(this);
         binding.ryExample.setLayoutManager(new LinearLayoutManager(getContext()));
         binding.ryExample.setAdapter(exampleAdapter);
+        exampleAdapter.setOnItemClickListener(itemBean -> BrowserActivity.start(getActivity(), itemBean.getLink()));
     }
 
     private void initObserver() {

+ 30 - 2
app/src/main/java/com/datarecovery/master/module/example/ExampleViewModel.java

@@ -5,11 +5,16 @@ import androidx.lifecycle.MutableLiveData;
 
 import com.atmob.app.lib.base.BaseViewModel;
 import com.datarecovery.master.data.api.bean.ExampleBean;
+import com.datarecovery.master.data.api.response.UserCaseResponse;
+import com.datarecovery.master.data.repositories.DeviceFuncRepository;
 
 import java.util.List;
 
 import javax.inject.Inject;
 
+import atmob.reactivex.rxjava3.annotations.NonNull;
+import atmob.reactivex.rxjava3.core.SingleObserver;
+import atmob.reactivex.rxjava3.disposables.Disposable;
 import dagger.hilt.android.lifecycle.HiltViewModel;
 
 @HiltViewModel
@@ -17,14 +22,37 @@ public class ExampleViewModel extends BaseViewModel {
 
 
     private final MutableLiveData<List<ExampleBean>> exampleList = new MutableLiveData<>();
+    private final DeviceFuncRepository deviceFuncRepository;
 
     @Inject
-    public ExampleViewModel() {
-
+    public ExampleViewModel(DeviceFuncRepository deviceFuncRepository) {
+        this.deviceFuncRepository = deviceFuncRepository;
+        refreshExampleData();
     }
 
+
     public LiveData<List<ExampleBean>> getExampleList() {
         return exampleList;
     }
 
+
+    private void refreshExampleData() {
+        deviceFuncRepository.userCaseList().subscribe(new SingleObserver<UserCaseResponse>() {
+            @Override
+            public void onSubscribe(@NonNull Disposable d) {
+                addDisposable(d);
+            }
+
+            @Override
+            public void onSuccess(@NonNull UserCaseResponse userCaseResponse) {
+                exampleList.setValue(userCaseResponse.getExampleBeans());
+            }
+
+            @Override
+            public void onError(@NonNull Throwable e) {
+
+            }
+        });
+    }
+
 }

+ 13 - 0
app/src/main/java/com/datarecovery/master/module/order/OrderItemAdapter.java

@@ -9,8 +9,11 @@ import androidx.recyclerview.widget.AsyncListDiffer;
 import androidx.recyclerview.widget.DiffUtil;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.datarecovery.master.R;
 import com.datarecovery.master.data.api.bean.OrderBean;
 import com.datarecovery.master.databinding.ItemOrderBinding;
+import com.datarecovery.master.utils.ClipboardUtil;
+import com.datarecovery.master.utils.ToastUtil;
 
 import java.util.List;
 import java.util.Objects;
@@ -84,6 +87,16 @@ public class OrderItemAdapter extends RecyclerView.Adapter<OrderItemAdapter.View
             super(binding.getRoot());
             this.binding = binding;
             binding.setLifecycleOwner(lifecycleOwner);
+            binding.tvCopyOrder.setOnClickListener(v -> {
+                OrderBean orderBean = binding.getOrderBean();
+                ClipboardUtil.copy(orderBean.getOutTradeNo());
+                ToastUtil.show(R.string.copy_success, ToastUtil.LENGTH_SHORT);
+            });
+            binding.tvCopyLink.setOnClickListener(v -> {
+                OrderBean orderBean = binding.getOrderBean();
+                ClipboardUtil.copy(orderBean.getTutorialLink());
+                ToastUtil.show(R.string.copy_success, ToastUtil.LENGTH_SHORT);
+            });
         }
 
         public void bind(OrderBean orderBean) {

+ 1 - 0
app/src/main/java/com/datarecovery/master/utils/DateUtil.java

@@ -8,6 +8,7 @@ public class DateUtil {
 
 
     public static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
+    public static final String YYYY_MM_DD = "yyyy-MM-dd";
     public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
 
     /**

+ 3 - 0
app/src/main/res/layout/item_example.xml

@@ -20,6 +20,7 @@
 
 
         <TextView
+            android:text="@{bean.title}"
             android:id="@+id/tv_title"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
@@ -37,12 +38,14 @@
             android:layout_height="wrap_content"
             android:layout_marginTop="4dp"
             android:textColor="#A7A7A7"
+            android:text="@{bean.createTime}"
             android:textSize="12sp"
             app:layout_constraintLeft_toLeftOf="@+id/tv_title"
             app:layout_constraintTop_toBottomOf="@+id/tv_title"
             tools:text="2023-12-29 13:15:26" />
 
         <ImageView
+            imageUrl="@{bean.images}"
             android:id="@+id/iv_example"
             android:layout_width="0dp"
             android:layout_height="0dp"

+ 7 - 0
app/src/main/res/layout/item_order.xml

@@ -8,6 +8,8 @@
         <variable
             name="orderBean"
             type="com.datarecovery.master.data.api.bean.OrderBean" />
+
+        <import type="com.datarecovery.master.utils.DateUtil" />
     </data>
 
     <androidx.constraintlayout.widget.ConstraintLayout
@@ -36,6 +38,7 @@
             app:layout_constraintTop_toTopOf="parent" />
 
         <TextView
+            android:text="@{orderBean.outTradeNo}"
             android:id="@+id/tv_order"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -80,6 +83,7 @@
             app:layout_constraintTop_toBottomOf="@+id/space1" />
 
         <TextView
+            android:text="@{orderBean.itemName}"
             style="@style/Order_List_Content_Txt"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -105,6 +109,7 @@
             app:layout_constraintTop_toBottomOf="@+id/space2" />
 
         <TextView
+            android:text="@{DateUtil.formatNormalDate(DateUtil.YYYY_MM_DD,orderBean.startTimestamp)}"
             style="@style/Order_List_Content_Txt"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -132,6 +137,7 @@
             app:layout_constraintTop_toBottomOf="@+id/space3" />
 
         <TextView
+            android:text="@{orderBean.expireDate}"
             style="@style/Order_List_Content_Txt"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -165,6 +171,7 @@
             app:layout_constraintTop_toBottomOf="@+id/v_line" />
 
         <TextView
+            android:text="@{@string/member_price(orderBean.amount)}"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textColor="#404040"