app/src/main/assets/js/map.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/bean/net/InspectPointResult.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/bean/net/InspectResult.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/view/TipUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/dialog_loading.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/values/styles.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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, 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 -> { 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); } }); } } app/src/main/java/com/dayu/pipirrapp/bean/net/InspectPointResult.java
New file @@ -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; // 巡检记录的ID,关联到巡检记录表 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; } // 获取巡检记录的ID public String getInspectId() { return inspectId; } // 设置巡检记录的ID 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 + '\'' + '}'; } } 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; } } 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 -> { // 显示加载动画 TipUtil.showLoading(MapFragment.this.getActivity(), "正在更新数据..."); // 创建多个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); }); // 组合所有Single 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(), "数据更新失败"); } ) ); }); } 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 { app/src/main/res/layout/dialog_loading.xml
New file @@ -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> 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>