From 986648a7fc5d377d5c100ba41350e6313dcf6e5b Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 21 二月 2025 17:04:29 +0800
Subject: [PATCH] 1.优化我的界面的更新本地数据功能添加loding 2.优化巡检详情页面增大放大级别 3.优化我的界面的更新本地数据功能所有接口都结束后显示数据更新成功

---
 app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java |   65 ++++++++++
 app/src/main/res/values/styles.xml                                       |   11 +
 app/src/main/assets/js/map.js                                            |    1 
 app/src/main/res/layout/dialog_loading.xml                               |   25 ++++
 app/src/main/java/com/dayu/pipirrapp/bean/net/InspectPointResult.java    |   91 +++++++++++++++
 app/src/main/java/com/dayu/pipirrapp/view/TipUtil.java                   |   43 +++++++
 app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java           |  105 ++++++++++++----
 app/src/main/java/com/dayu/pipirrapp/bean/net/InspectResult.java         |    8 
 8 files changed, 312 insertions(+), 37 deletions(-)

diff --git a/app/src/main/assets/js/map.js b/app/src/main/assets/js/map.js
index aed2047..8480ecc 100644
--- a/app/src/main/assets/js/map.js
+++ b/app/src/main/assets/js/map.js
@@ -627,6 +627,7 @@
                 { icon: createIcon(CONFIG.IMAGES.MARKER_START, 35) }
             );
             map.addOverLay(marker);
+            map.setZoom(15);
         } else if (end === "true" || end === true) {
             let marker = new T.Marker(
                 newPoint,
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java
index 3c33518..a60d46b 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java
@@ -17,8 +17,13 @@
 
 import com.dayu.pipirrapp.R;
 import com.dayu.pipirrapp.bean.db.InspectionLocationBean;
+import com.dayu.pipirrapp.bean.net.InspectListResult;
+import com.dayu.pipirrapp.bean.net.InspectPointResult;
 import com.dayu.pipirrapp.dao.DaoSingleton;
 import com.dayu.pipirrapp.net.ApiManager;
+import com.dayu.pipirrapp.net.BaseResponse;
+import com.dayu.pipirrapp.net.Constants;
+import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
 import com.dayu.pipirrapp.utils.CommonData;
 import com.dayu.pipirrapp.utils.MapJpgUtils;
 import com.dayu.pipirrapp.view.TitleBar;
@@ -26,7 +31,10 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
 import io.reactivex.rxjava3.schedulers.Schedulers;
@@ -205,7 +213,11 @@
         // 鏌ヨ褰撳墠鏈叧闂殑宸℃璁板綍涓嬫墍鏈夌殑鍧愭爣
         DaoSingleton.getAsynchInstance(this).inspectionLocationDao().findByInspectId(inspectId).subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread()).subscribe(inspectionLocationBeans -> {
-                    aginShowLocation(inspectionLocationBeans);
+                    if (inspectionLocationBeans != null && inspectionLocationBeans.size() > 0) {
+                        aginShowLocation(inspectionLocationBeans);
+                    } else {
+                        getHttpLocation();
+                    }
                 });
     }
 
@@ -233,9 +245,7 @@
                     } else {
                         isEnd = false;
                     }
-                    Log.i("mWebView", "showHistoryLocation" + inspectionLocationBean.getLng() + "\",\"" + inspectionLocationBean.getLat());
-                    mWebView.evaluateJavascript("javascript:showHistoryLocation(\"" + inspectionLocationBean.getLng() + "\",\"" + inspectionLocationBean.getLat() + "\",\"" + isStart + "\",\"" + isEnd + "\")", value -> {
-                    });
+                    putDataToWeb(inspectionLocationBean.getLng(), inspectionLocationBean.getLat(), isStart + "", isEnd + "");
                     index++;
                 }
                 // 鍚� WebView 娉ㄥ叆鏁版嵁
@@ -244,8 +254,55 @@
         }
     }
 
+    /**
+     * 鍚� WebView 娉ㄥ叆鏁版嵁
+     *
+     * @param lng
+     * @param lat
+     * @param isStart
+     * @param isEnd
+     */
+    private void putDataToWeb(String lng, String lat, String isStart, String isEnd) {
+        Log.i("mWebView", "showHistoryLocation" + lng + "\",\"" + lat);
+        mWebView.evaluateJavascript("javascript:showHistoryLocation(\"" + lng + "\",\"" + lat + "\",\"" + isStart + "\",\"" + isEnd + "\")", value -> {
+        });
+    }
 
     public void getHttpLocation() {
+        Map<String, Object> params = new HashMap<>();
+        params.put("inspectId", inspectId);
+        ApiManager.getInstance().requestGet(this, Constants.BASE_URL + "/app/inspect/getInspects", InspectListResult.class, params, new SubscriberListener<BaseResponse<InspectListResult>>() {
+            @Override
+            public void onNext(BaseResponse<InspectListResult> t) {
+                if (t.isSuccess()) {
+                    if (t.getContent() != null) {
+                        List<InspectionLocationBean> locationBeans = new ArrayList<>();
+                        if (t.getContent().getObj()!=null&&t.getContent().getObj().size()>0){
+                            for (InspectPointResult inspectPointResult : t.getContent().getObj().get(0).getTracks()) {
+                                InspectionLocationBean inspectionLocationBean = new InspectionLocationBean();
+                                inspectionLocationBean.setLng(inspectPointResult.getLng());
+                                inspectionLocationBean.setLat(inspectPointResult.getLat());
+                                inspectionLocationBean.setInspectId(inspectId);
+                                inspectionLocationBean.setId(inspectPointResult.getId());
+                                inspectionLocationBean.setLocateTime(inspectPointResult.getLocateTime());
+                                locationBeans.add(inspectionLocationBean);
+                            }
+                        }
+                        aginShowLocation(locationBeans);
+                    }
+                }
+            }
 
+            @Override
+            public void onCloose() {
+                super.onCloose();
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+
+            }
+        });
     }
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectPointResult.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectPointResult.java
new file mode 100644
index 0000000..4c2d405
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectPointResult.java
@@ -0,0 +1,91 @@
+package com.dayu.pipirrapp.bean.net;
+
+/**
+ * InspectPointResult - 宸℃鐐圭粨鏋�
+ *
+ * @author zuoxiao
+ * @version 1.0
+ * @since 2025-02-21
+ */
+public class InspectPointResult {
+
+
+    // 宸℃浣嶇疆璁板綍鐨勫敮涓�鏍囪瘑绗�
+    private String id;
+
+    // 宸℃璁板綍鐨処D锛屽叧鑱斿埌宸℃璁板綍琛�
+    private String inspectId;
+
+    // 缁忓害淇℃伅锛岃〃绀哄贰妫�浣嶇疆鐨勭粡搴﹀潗鏍�
+    private String lng;
+
+    // 绾害淇℃伅锛岃〃绀哄贰妫�浣嶇疆鐨勭含搴﹀潗鏍�
+    private String lat;
+
+    // 鎵撶偣鏃堕棿锛岃〃绀鸿褰曡宸℃浣嶇疆鐨勬椂闂�
+    private String locateTime;
+
+    // 鑾峰彇宸℃浣嶇疆璁板綍鐨勫敮涓�鏍囪瘑绗�
+    public String getId() {
+        return id;
+    }
+
+    // 璁剧疆宸℃浣嶇疆璁板綍鐨勫敮涓�鏍囪瘑绗�
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    // 鑾峰彇宸℃璁板綍鐨処D
+    public String getInspectId() {
+        return inspectId;
+    }
+
+    // 璁剧疆宸℃璁板綍鐨処D
+    public void setInspectId(String inspectId) {
+        this.inspectId = inspectId;
+    }
+
+    // 鑾峰彇缁忓害淇℃伅
+    public String getLng() {
+        return lng;
+    }
+
+    // 璁剧疆缁忓害淇℃伅
+    public void setLng(String lng) {
+        this.lng = lng;
+    }
+
+    // 鑾峰彇绾害淇℃伅
+    public String getLat() {
+        return lat;
+    }
+
+    // 璁剧疆绾害淇℃伅
+    public void setLat(String lat) {
+        this.lat = lat;
+    }
+
+    // 鑾峰彇鎵撶偣鏃堕棿
+    public String getLocateTime() {
+        return locateTime;
+    }
+
+    // 璁剧疆鎵撶偣鏃堕棿
+    public void setLocateTime(String locateTime) {
+        this.locateTime = locateTime;
+    }
+
+    // 閲嶅啓toString鏂规硶锛屼究浜庢墦鍗板璞′俊鎭�
+    @Override
+    public String toString() {
+        return "InspectionLocationBean{" +
+                "id='" + id + '\'' +
+                ", inspectId='" + inspectId + '\'' +
+                ", lng='" + lng + '\'' +
+                ", lat='" + lat + '\'' +
+                ", locateTime='" + locateTime + '\'' +
+                '}';
+    }
+
+
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectResult.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectResult.java
index ba14340..a8e2e6b 100644
--- a/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectResult.java
+++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectResult.java
@@ -17,10 +17,10 @@
     private String startTime; // 寮�濮嬫椂闂�
     private String stopTime; // 缁撴潫鏃堕棿
     private Double inspectDistance; // 宸℃璺濈
-    private List<String> tracks; // 宸℃鑺傜偣鍒楄〃
+    private List<InspectPointResult> tracks; // 宸℃鑺傜偣鍒楄〃
 
     // 鏋勯�犲嚱鏁�
-    public InspectResult(String inspectorId, String inspectorName, String inspectId, String startTime, String stopTime, Double inspectDistance, List<String> tracks) {
+    public InspectResult(String inspectorId, String inspectorName, String inspectId, String startTime, String stopTime, Double inspectDistance, List<InspectPointResult> tracks) {
         this.inspectorId = inspectorId;
         this.inspectorName = inspectorName;
         this.inspectId = inspectId;
@@ -79,11 +79,11 @@
         this.inspectDistance = inspectDistance;
     }
 
-    public List<String> getTracks() {
+    public List<InspectPointResult> getTracks() {
         return tracks;
     }
 
-    public void setTracks(List<String> tracks) {
+    public void setTracks(List<InspectPointResult> tracks) {
         this.tracks = tracks;
     }
 }
diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
index 82ab38e..31e8b08 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -72,6 +72,7 @@
 import com.jeremyliao.liveeventbus.LiveEventBus;
 import com.tencent.bugly.crashreport.CrashReport;
 
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -84,6 +85,7 @@
 import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
 import io.reactivex.rxjava3.disposables.CompositeDisposable;
 import io.reactivex.rxjava3.schedulers.Schedulers;
+import io.reactivex.rxjava3.core.Single;
 
 /**
  * author: zuo
@@ -145,10 +147,55 @@
 
         // 娣诲姞鍒锋柊鏁版嵁鐨勭洃鍚�
         LiveEventBus.get(CommonKeyName.refreshData).observe(this, o -> {
-            getCenterPoint();
-            getMarkerData();
-            getDivideList();
-            getPipeNetworkList();
+            // 鏄剧ず鍔犺浇鍔ㄧ敾
+            TipUtil.showLoading(MapFragment.this.getActivity(), "姝e湪鏇存柊鏁版嵁...");
+            
+            // 鍒涘缓澶氫釜Single瀵硅薄鏉ヨ〃绀烘瘡涓綉缁滆姹�
+            Single<Boolean> centerPointSingle = Single.create(emitter -> {
+                getCenterPoint();
+                emitter.onSuccess(true);
+            });
+
+            Single<Boolean> markerDataSingle = Single.create(emitter -> {
+                getMarkerData();
+                emitter.onSuccess(true);
+            });
+
+            Single<Boolean> divideListSingle = Single.create(emitter -> {
+                getDivideList();
+                emitter.onSuccess(true);
+            });
+
+            Single<Boolean> pipeNetworkListSingle = Single.create(emitter -> {
+                getPipeNetworkList();
+                emitter.onSuccess(true);
+            });
+
+            // 缁勫悎鎵�鏈塖ingle
+            compositeDisposable.add(
+                Single.zip(
+                    centerPointSingle,
+                    markerDataSingle, 
+                    divideListSingle,
+                    pipeNetworkListSingle,
+                    (centerPoint, marker, divide, pipe) -> true
+                )
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .doFinally(() -> {
+                    // 鏃犺鎴愬姛杩樻槸澶辫触锛岄兘闇�瑕侀殣钘忓姞杞藉姩鐢�
+                    TipUtil.dismissLoading();
+                })
+                .subscribe(
+                    result -> {
+                        ToastUtil.showToast(MapFragment.this.getContext(), "鏁版嵁鏇存柊瀹屾垚");
+                    },
+                    throwable -> {
+                        Log.e(TAG, "鏁版嵁鏇存柊澶辫触: " + throwable.getMessage());
+                        ToastUtil.showToast(MapFragment.this.getContext(), "鏁版嵁鏇存柊澶辫触");
+                    }
+                )
+            );
         });
     }
 
@@ -440,7 +487,7 @@
         //宸℃鎸夐挳
         binding.inspectButton.setOnClickListener(v -> {
             if (XXPermissions.isGranted(MapFragment.this.getContext(), Permission.ACCESS_BACKGROUND_LOCATION)) {
-                new ConfirmDialog(MapFragment.this.getActivity(), "纭寮�濮嬪贰妫�鍚楋紵",(confirmDialog, v1) -> {
+                new ConfirmDialog(MapFragment.this.getActivity(), "纭寮�濮嬪贰妫�鍚楋紵", (confirmDialog, v1) -> {
                     chageInspecState(InspectionUtils.STAT_INSPECTION_ONCLICK);
                     confirmDialog.dismiss();
                 }).show();
@@ -521,33 +568,33 @@
 //                    }
                     // 璺宠浆鍒伴�夋嫨鐨勪綅缃�
                     mWebView.evaluateJavascript(
-                        String.format("javascript:setCenterAndZoom(\"%s\",\"%s\",\"17\")", 
-                        item.getLng(), 
-                        item.getLat()), 
-                        null
+                            String.format("javascript:setCenterAndZoom(\"%s\",\"%s\",\"17\")",
+                                    item.getLng(),
+                                    item.getLat()),
+                            null
                     );
                 });
-                
+
                 // 鎵ц鎼滅储
                 compositeDisposable.add(
-                    DaoSingleton.getAsynchInstance(requireContext())
-                        .divideDao()
-                        .searchAllByKeyword(s)
-                        .subscribeOn(Schedulers.io())
-                        .observeOn(AndroidSchedulers.mainThread())
-                        .subscribe(
-                            results -> {
-                                if (results != null && !results.isEmpty()) {
-                                    searchDialog.setData(results);
-                                    searchDialog.show();
-                                } else {
-                                    ToastUtil.showToast(requireContext(), "鏈壘鍒扮浉鍏崇粨鏋�");
-                                }
-                            },
-                            throwable -> {
-                                ToastUtil.showToast(requireContext(), "鎼滅储澶辫触锛�" + throwable.getMessage());
-                            }
-                        )
+                        DaoSingleton.getAsynchInstance(requireContext())
+                                .divideDao()
+                                .searchAllByKeyword(s)
+                                .subscribeOn(Schedulers.io())
+                                .observeOn(AndroidSchedulers.mainThread())
+                                .subscribe(
+                                        results -> {
+                                            if (results != null && !results.isEmpty()) {
+                                                searchDialog.setData(results);
+                                                searchDialog.show();
+                                            } else {
+                                                ToastUtil.showToast(requireContext(), "鏈壘鍒扮浉鍏崇粨鏋�");
+                                            }
+                                        },
+                                        throwable -> {
+                                            ToastUtil.showToast(requireContext(), "鎼滅储澶辫触锛�" + throwable.getMessage());
+                                        }
+                                )
                 );
             }
             return null;
@@ -844,7 +891,7 @@
                 boolean isfrist = true;
                 for (PipeNetworkDataCoordinateBean data : pipeNetworkBean.getData().getCoordinates()) {
                     if (!TextUtils.isEmpty(data.getLat()) && !TextUtils.isEmpty(data.getLng())) {
-                        mWebView.evaluateJavascript("javascript:addPipeNetwork(\"" + data.getLng() + "\",\"" + data.getLat() + "\",\"" + isfrist +  "\",\"" + isShowPipeNetwork +"\")", new ValueCallback<String>() {
+                        mWebView.evaluateJavascript("javascript:addPipeNetwork(\"" + data.getLng() + "\",\"" + data.getLat() + "\",\"" + isfrist + "\",\"" + isShowPipeNetwork + "\")", new ValueCallback<String>() {
                             @Override
                             public void onReceiveValue(String value) {
                             }
diff --git a/app/src/main/java/com/dayu/pipirrapp/view/TipUtil.java b/app/src/main/java/com/dayu/pipirrapp/view/TipUtil.java
index 0ec205d..d5ded9e 100644
--- a/app/src/main/java/com/dayu/pipirrapp/view/TipUtil.java
+++ b/app/src/main/java/com/dayu/pipirrapp/view/TipUtil.java
@@ -1,17 +1,60 @@
 package com.dayu.pipirrapp.view;
 
 import android.app.Activity;
+import android.app.Dialog;
 import android.os.Build;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import com.dayu.pipirrapp.MyApplication;
+import com.dayu.pipirrapp.R;
 
 
 public class TipUtil {
+    private static Dialog loadingDialog;
+
     public interface TipListener {
          void onCancle();
     }
 
+    /**
+     * 鏄剧ず鍔犺浇鍔ㄧ敾
+     *
+     * @param activity Activity
+     * @param loadingText 鍔犺浇鎻愮ず鏂囧瓧
+     */
+    public static void showLoading(Activity activity, String loadingText) {
+        if (isDestroy(activity)) {
+            return;
+        }
+
+        dismissLoading();
+
+        View view = LayoutInflater.from(activity).inflate(R.layout.dialog_loading, null);
+        TextView tvLoading = view.findViewById(R.id.tv_loading_text);
+        tvLoading.setText(loadingText);
+
+        loadingDialog = new Dialog(activity, R.style.LoadingDialog);
+        loadingDialog.setCancelable(false);
+        loadingDialog.setContentView(view);
+        
+        if (!activity.isFinishing()) {
+            loadingDialog.show();
+        }
+    }
+
+    /**
+     * 闅愯棌鍔犺浇鍔ㄧ敾
+     */
+    public static void dismissLoading() {
+        if (loadingDialog != null && loadingDialog.isShowing()) {
+            loadingDialog.dismiss();
+            loadingDialog = null;
+        }
+    }
+
     public static void show(Activity mActivity, String data) {
 //        Toast.makeText(context, data, Toast.LENGTH_LONG).show();
         try {
diff --git a/app/src/main/res/layout/dialog_loading.xml b/app/src/main/res/layout/dialog_loading.xml
new file mode 100644
index 0000000..2160a1b
--- /dev/null
+++ b/app/src/main/res/layout/dialog_loading.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@drawable/bg_loading_dialog"
+    android:gravity="center"
+    android:minWidth="120dp"
+    android:minHeight="120dp"
+    android:orientation="vertical"
+    android:padding="16dp">
+
+    <ProgressBar
+        android:layout_width="36dp"
+        android:layout_height="36dp"
+        android:indeterminateTint="@color/white" />
+
+    <TextView
+        android:id="@+id/tv_loading_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:textColor="@color/white"
+        android:textSize="14sp" />
+
+</LinearLayout> 
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 83c3f71..3760dac 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -23,6 +23,17 @@
         <item name="android:backgroundDimEnabled">true</item>
     </style>
 
+    <!-- 鍔犺浇瀵硅瘽妗嗘牱寮� -->
+    <style name="LoadingDialog" parent="Theme.AppCompat.Dialog">
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowIsTranslucent">false</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:backgroundDimEnabled">false</item>
+    </style>
+
 
 
 

--
Gitblit v1.8.0