From 15f5680b532238290d0adf095a93e5af1c5f1203 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 07 二月 2025 17:14:57 +0800
Subject: [PATCH] 1.添加显示隐藏取水口、分水房功能 2.完善图例自定义控件功能和显示 3.处理工单添加选择时间功能
---
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java | 905 ++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 742 insertions(+), 163 deletions(-)
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 fb357d8..7229bca 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -5,9 +5,11 @@
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
+import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -20,28 +22,38 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
import androidx.lifecycle.Observer;
+import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.activity.AddIssueActivity;
import com.dayu.pipirrapp.bean.db.CenterPointBean;
+import com.dayu.pipirrapp.bean.db.DivideBean;
import com.dayu.pipirrapp.bean.db.InspectionBean;
import com.dayu.pipirrapp.bean.db.InspectionLocationBean;
import com.dayu.pipirrapp.bean.db.LatLonBean;
import com.dayu.pipirrapp.bean.db.MarkerBean;
+import com.dayu.pipirrapp.bean.db.PipeNetworkBean;
import com.dayu.pipirrapp.bean.net.CenterPointResult;
+import com.dayu.pipirrapp.bean.net.DivideListResult;
+import com.dayu.pipirrapp.bean.net.DivideResult;
import com.dayu.pipirrapp.bean.net.InsectionResult;
import com.dayu.pipirrapp.bean.net.InspectionRequest;
+import com.dayu.pipirrapp.bean.net.MarkerListResult;
import com.dayu.pipirrapp.bean.net.MarkerResult;
+import com.dayu.pipirrapp.bean.net.PipeNetworkListResult;
+import com.dayu.pipirrapp.bean.net.PipeNetworkResult;
import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.databinding.FragmentMapBinding;
-import com.dayu.pipirrapp.js.MyWebViewInterface;
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.observer.MapFragmenObserver;
import com.dayu.pipirrapp.tool.InspectionUtils;
+import com.dayu.pipirrapp.tool.MarkerUtils;
+import com.dayu.pipirrapp.tool.MyWebViewInterface;
import com.dayu.pipirrapp.utils.CommonData;
import com.dayu.pipirrapp.utils.CommonKeyName;
import com.dayu.pipirrapp.utils.DateUtils;
@@ -53,6 +65,7 @@
import com.dayu.pipirrapp.utils.WebViewUtils;
import com.dayu.pipirrapp.view.ConfirmDialog;
import com.dayu.pipirrapp.view.TipUtil;
+import com.example.expand_button.ExpandButton;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
@@ -63,11 +76,15 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
-import java.util.Random;
+import java.util.Map;
+import java.util.stream.Collectors;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
+import kotlin.Triple;
/**
* author: zuo
@@ -82,17 +99,31 @@
WebView mWebView;
CenterPointBean centerPointBean;
- String strMarkerJson;
//褰撳墠宸℃鐘舵��
int mInspectionState;
MapFragmenObserver mapFragmenObserver;
//褰撳墠宸℃璁板綍鐨勭浉鍏充俊鎭�
public InspectionBean mInspectionBean;
+ //鏈�鍚庝竴娆″畾浣嶇殑鍧愭爣
LatLonBean lastLatLonBean;
- InspectionRequest inspectionRequest;
- volatile boolean isHaseAginData = false;
+ //web鏄惁鍔犺浇瀹屾垚
volatile boolean webViewIsFinished = false;
List<InspectionLocationBean> aginShowlocationBeans;
+ //web鍔犺浇鏃剁綉椤佃繕娌″姞杞藉畬鏃剁殑鏁版嵁
+ List<MarkerBean> webNoFinishMarkerData = new ArrayList<>();
+ List<DivideBean> webNoFinishDivideData = new ArrayList<>();
+ //鎵�鏈夌殑Marker鏁版嵁閿负marker鐨処d
+ Map<String, MarkerBean> markerBeanSet = new HashMap<>();
+ //鎵�鏈夊垎姘存埧
+ Map<String, DivideBean> divideBeanMap = new HashMap<>();
+ //涓績鐐瑰潗鏍�
+ public double centerLng;
+ public double centerLat;
+
+ MarkerBean mMarkerBean;
+
+ // 娣诲姞CompositeDisposable鏉ョ鐞嗘墍鏈夎闃�
+ private CompositeDisposable compositeDisposable = new CompositeDisposable();
@Override
public void onAttach(@NonNull Context context) {
@@ -105,8 +136,16 @@
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setRetainInstance(true);
Log.i(TAG, "onCreate");
mInspectionState = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.inspectionState, 0);
+
+ // 娣诲姞鍒锋柊鏁版嵁鐨勭洃鍚�
+ LiveEventBus.get(CommonKeyName.refreshData).observe(this, o -> {
+ getCenterPoint();
+ getMarkerData();
+ getDivideList();
+ });
}
@Override
@@ -119,7 +158,6 @@
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-
binding = FragmentMapBinding.inflate(inflater, container, false);
mapFragmenObserver.setmWebView(binding.webView);
Log.i("MapFragment", "onCreateView");
@@ -128,160 +166,94 @@
MyWebViewInterface myWebViewInterface = new MyWebViewInterface(MapFragment.this);
mWebView.addJavascriptInterface(myWebViewInterface, "Android");
mWebView.loadUrl("file:///android_asset/index.html");
- getCenterPoint();
+
+ // 寮傛鍔犺浇鏈湴鏁版嵁
+ loadLocalData();
+
initView();
- initLocalData();
- getMarkerData();
- //鏄剧ず宸℃鐘舵�佸苟涓旀樉绀哄洜鎰忓鍏抽棴鐨勫巻鍙叉暟鎹�
- switch (mInspectionState) {
- case InspectionUtils.STAT_INSPECTION:
- case InspectionUtils.PAUSE_INSPECTION:
- InspectionUtils.aginShowLocation(MapFragment.this);
- }
+ initWeb();
+
chageInspecState(mInspectionState);
return binding.getRoot();
}
-
/**
- * 鍒濆鍖栧悇涓姸鎬�
+ * 寮傛鍔犺浇鏈湴鏁版嵁
*/
- private void initState() {
- //寮�鍚畾浣�
-
- }
-
- /**
- * 鍒濆鍖栨湰鍦版暟鎹�
- */
- public void initLocalData() {
- centerPointBean = DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().findFirst();
- List<MarkerBean> markerBeans = DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().findAll();
- strMarkerJson = WebViewUtils.beanToJson(markerBeans);
- jumpCenterPoint();
- setMapMarker();
- }
-
-
- /**
- * 璺宠浆鍦板浘涓績鐐�
- */
- public void jumpCenterPoint() {
- if (centerPointBean != null) {
- Log.d(TAG, "jumpCenterPoint>>>>>>>>>>>>>>>>>>>" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat());
- mWebView.evaluateJavascript("javascript:setCenterAndZoom(\"" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat() + "\",\"" + centerPointBean.getZoomMp() + "\")", value -> {
- });
- }
- }
-
- /**
- * 娣诲姞鏍囨敞鐐�
- */
- public void setMapMarker() {
- Log.i("mWebView", "addMarker????????????" + strMarkerJson);
- mWebView.evaluateJavascript("javascript:addMarker(\"" + strMarkerJson + "\")", new ValueCallback<String>() {
- @Override
- public void onReceiveValue(String value) {
- Log.i("mWebView", "addMarker锛侊紒锛侊紒锛侊紒锛侊紒锛�" + value);
- }
- });
- }
-
-
- /**
- * 鑾峰彇鍙栨按鍙e垪琛�
- */
- private void getMarkerData() {
- ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/project/intake/all", MarkerResult.class, null, new SubscriberListener<BaseResponse<MarkerResult>>() {
- @Override
- public void onNext(BaseResponse<MarkerResult> t) {
- if (t.isSuccess()) {
- if (t.isSuccess()) {
- if (t.getContent().getObj() != null && !t.getContent().getObj().isEmpty()) {
- List<MarkerBean> markerBeans = new ArrayList<>();
- for (int i = 0; i < t.getContent().getObj().size(); i++) {
- MarkerResult.Obj result = t.getContent().getObj().get(i);
- //淇濆瓨鏁版嵁
- MarkerBean markerBean = new MarkerBean();
- markerBean.setLng(result.getLng());
- markerBean.setLat(result.getLat());
- markerBean.setBlockId(result.getBlockId());
- markerBean.setName(result.getName());
- markerBean.setRemarks(result.getRemarks());
- markerBean.setTownId(result.getTownId());
- markerBean.setVillageId(result.getVillageId());
- markerBean.setCountyId(result.getCountyId());
- markerBeans.add(markerBean);
+ private void loadLocalData() {
+ // 寮傛鍔犺浇涓績鐐规暟鎹�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(this.getContext()).centerPointDao().findFirst()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ centerPointBean = result;
+ if (centerPointBean == null) {
+ getCenterPoint();
+ } else {
+ jumpCenterPoint();
}
- strMarkerJson = WebViewUtils.beanToJson(markerBeans);
- setMapMarker();
- DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().deleteAll();
- // 浣跨敤 RxJava 寮傛鎻掑叆鏁版嵁
- DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll(markerBeans)
- .subscribeOn(Schedulers.io()) // 鍦� IO 绾跨▼涓婃墽琛�
- .observeOn(AndroidSchedulers.mainThread()) // 鍦ㄤ富绾跨▼涓婅瀵�
- .subscribe(() -> {
- // 鎻掑叆鎴愬姛
- Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
- }, throwable -> {
- // 鎻掑叆澶辫触
- Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
- });
- }
- }
- } else {
- ToastUtil.showToast(MapFragment.this.getContext(), t.getMsg());
- }
- }
+ }, throwable -> {
+ Log.e(TAG, "Load centerPoint error: " + throwable);
+ getCenterPoint();
+ }, () -> {
+ // 褰揗aybe涓虹┖鏃惰皟鐢�
+ getCenterPoint();
+ })
+ );
- });
+ // 寮傛鍔犺浇鍙栨按鍙f暟鎹�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(this.getContext()).markerDao().getAll()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(markers -> {
+ if (markers == null || markers.isEmpty()) {
+ getMarkerData();
+ } else {
+ for (MarkerBean marker : markers) {
+ markerBeanSet.put(marker.getId(), marker);
+ setMapMarker(marker);
+ }
+ }
+ }, throwable -> {
+ Log.e(TAG, "Load markers error: " + throwable.getMessage());
+ getMarkerData();
+ }, () -> {
+ // 褰揗aybe涓虹┖鏃惰皟鐢�
+ getMarkerData();
+ })
+ );
+
+ // 寮傛鍔犺浇鍒嗘按鎴挎暟鎹�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(this.getContext()).divideDao().getAll()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(divides -> {
+ if (divides == null || divides.isEmpty()) {
+ getDivideList();
+ } else {
+ for (DivideBean divide : divides) {
+ divideBeanMap.put(divide.getId(), divide);
+ setMapDivide(divide);
+ }
+ }
+ }, throwable -> {
+ Log.e(TAG, "Load divides error: " + throwable.getMessage());
+ getDivideList();
+ }, () -> {
+ // 褰揗aybe涓虹┖鏃惰皟鐢�
+ getDivideList();
+ })
+ );
}
-
- /**
- * 娣诲姞鏍囨敞鐐�
- */
- public void addMarker() {
- Random random = new Random();
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append("[");
-
- // 涓浗缁忕含搴﹁寖鍥�
- double minLongitude = 73.43;
- double maxLongitude = 135.05;
- double minLatitude = 3.52;
- double maxLatitude = 53.57;
-
- for (int i = 0; i < 1000; i++) {
- stringBuilder.append("[");
- // 鐢熸垚闅忔満缁忓害
- double longitude = minLongitude + (maxLongitude - minLongitude) * random.nextDouble();
- stringBuilder.append(longitude);
- stringBuilder.append(",");
- // 鐢熸垚闅忔満绾害
- double latitude = minLatitude + (maxLatitude - minLatitude) * random.nextDouble();
- stringBuilder.append(latitude);
- stringBuilder.append(",\"237鍙栨按鍙"],");
- }
- stringBuilder.append("[116.417854,39.921988,\"235鍙栨按鍙"]]");
- String jsonData = stringBuilder.toString().replace("\\", "\\\\").replace("\"", "\\\"");
- Log.i("mWebView", "addMarker????????????" + jsonData);
- mWebView.evaluateJavascript("javascript:addMarker(\"" + jsonData + "\")", new ValueCallback<String>() {
- @Override
- public void onReceiveValue(String value) {
- Log.i("mWebView", "addMarker锛侊紒锛侊紒锛侊紒锛侊紒锛�" + value);
- }
- });
- }
-
-
- void initView() {
-
+ private void initWeb() {
mWebView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
-// Log.d(TAG, "鍔犺浇鍦板潃>>>" + url);
//鍒ゆ柇褰撳墠鏄惁涓哄姞杞界摝鐗�
if (MapJpgUtils.getInsatance().isTianDiTuTileRequest(url)) {
String androidUrl = url.replace(CommonData.webKey, CommonData.androidKey);
@@ -303,7 +275,7 @@
//涓嬭浇鐡︾墖
ApiManager.getInstance().donwLoadTile(MapFragment.this.getContext(), androidUrl);
}
-// Log.d(TAG, "鍦ㄧ嚎鍔犺浇>>>" + url);
+
}
@@ -319,7 +291,6 @@
String failingUrl = request.getUrl().toString();
Log.e("setWebViewClient", "errorCode:" + errorCode + ">>>>description:" + description + ">>>>failingUrl:" + failingUrl);
// 澶勭悊閿欒锛屼緥濡傛樉绀洪敊璇〉闈㈡垨鎻愮ず鐢ㄦ埛
- // view.loadUrl("file:///android_asset/error.html");
}
@Override
@@ -335,17 +306,110 @@
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
- webViewIsFinished = true;
//椤甸潰鍔犺浇瀹屾垚
- if (isHaseAginData) {
- aginShowLocation(null);
- }
+ webViewIsFinished = true;
+ webFinishInitLocalData();
+ aginShowLocation(null);
+
}
});
+ }
+
+ /**
+ * web鍔犺浇瀹屽垵濮嬪寲鏈湴鏁版嵁
+ */
+ public void webFinishInitLocalData() {
+ // 鍙湪鏈湴娌℃湁鏁版嵁鏃惰幏鍙栦腑蹇冪偣
+ if (centerPointBean != null) {
+ jumpCenterPoint();
+ }
+ //娣诲姞鍥爓ebview娌℃湁鍔犺浇瀹屾垚瀵艰嚧娌℃湁娣诲姞鐨勫湴鍥炬爣娉�
+ if (!webNoFinishMarkerData.isEmpty()) {
+ for (MarkerBean bean : webNoFinishMarkerData) {
+ setMapMarker(bean);
+ }
+ }
+ if (!webNoFinishDivideData.isEmpty()) {
+ for (DivideBean bean : webNoFinishDivideData) {
+ setMapDivide(bean);
+ }
+ }
+ //鏄剧ず鎵�鏈夊彇姘村彛
+ MarkerUtils.showLocoMarks(MapFragment.this);
+ //鏄剧ず宸℃鐘舵�佸苟涓旀樉绀哄洜鎰忓鍏抽棴鐨勫巻鍙叉暟鎹�
+ switch (mInspectionState) {
+ case InspectionUtils.STAT_INSPECTION:
+ case InspectionUtils.PAUSE_INSPECTION:
+ InspectionUtils.aginShowLocation(MapFragment.this);
+ }
+ }
+
+ /**
+ * 鑾峰彇鍙栨按鍙e垪琛�
+ */
+ private void getMarkerData() {
+ ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/project/intake/all", MarkerListResult.class, null, new SubscriberListener<BaseResponse<MarkerListResult>>() {
+ @Override
+ public void onNext(BaseResponse<MarkerListResult> t) {
+ if (t.isSuccess()) {
+ if (t.getContent().getObj() != null && !t.getContent().getObj().isEmpty()) {
+ List<MarkerBean> markerBeans = t.getContent().getObj().stream()
+ .map(result -> {
+ MarkerBean markerBean = new MarkerBean();
+ markerBean.setId(result.getId());
+ markerBean.setLng(result.getLng());
+ markerBean.setLat(result.getLat());
+ markerBean.setBlockId(result.getBlockId());
+ markerBean.setName(result.getName());
+ markerBean.setRemarks(result.getRemarks());
+ markerBean.setTownId(result.getTownId());
+ markerBean.setVillageId(result.getVillageId());
+ markerBean.setCountyId(result.getCountyId());
+ markerBean.setAddress(result.getAddress());
+ markerBean.setBlockName(result.getBlockName());
+ markerBean.setDivideId(result.getDivideId());
+ setMapMarker(markerBean);
+ return markerBean;
+ })
+ .collect(Collectors.toList());
+
+ // 浣跨敤 CompositeDisposable 绠$悊鏁版嵁搴撴彃鍏ユ搷浣�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll(markerBeans)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ () -> {
+ // 鎻掑叆鎴愬姛
+ Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
+ },
+ throwable -> {
+ // 鎻掑叆澶辫触
+ Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
+ }
+ )
+ );
+ }
+
+ } else {
+ ToastUtil.showToast(MapFragment.this.getContext(), t.getMsg());
+ }
+ }
+
+ });
+ }
+
+
+ void initView() {
+
//宸℃鎸夐挳
binding.inspectButton.setOnClickListener(v -> {
if (XXPermissions.isGranted(MapFragment.this.getContext(), Permission.ACCESS_BACKGROUND_LOCATION)) {
- chageInspecState(InspectionUtils.STAT_INSPECTION_ONCLICK);
+ new ConfirmDialog(MapFragment.this.getActivity(), (confirmDialog, v1) -> {
+ chageInspecState(InspectionUtils.STAT_INSPECTION_ONCLICK);
+ confirmDialog.dismiss();
+ }).show();
+
} else {
TipUtil.show(MapFragment.this.getActivity(), "宸℃瀹氫綅闇�瑕佹偍閫夋嫨\"濮嬬粓鍏佽\"瀹氫綅淇℃伅锛屽惁鍒欐棤娉曞贰妫�銆�", new TipUtil.TipListener() {
@Override
@@ -373,21 +437,63 @@
Intent issue = new Intent(MapFragment.this.getActivity(), AddIssueActivity.class);
MapFragment.this.getActivity().startActivity(issue);
});
+ binding.expandButton.setLegendsArray(new Triple<>(
+ ContextCompat.getDrawable(requireContext(), R.drawable.marker_blue),
+ ContextCompat.getDrawable(requireContext(), R.drawable.marker_unselected),
+ "鍙栨按鍙�"
+ ),
+ new Triple<>(
+ ContextCompat.getDrawable(requireContext(), R.drawable.divide_home_blue),
+ ContextCompat.getDrawable(requireContext(), R.drawable.divide_home_unselected),
+ "鍒嗘按鎴�"
+ ));
+ binding.expandButton.setOnLegendItemClickListener((position, isSelected) -> {
+ switch (position) {
+ case 0:
+ showMarkers(isSelected);
+ break;
+ case 1:
+ showDivideMarkers(isSelected);
+ break;
+
+ }
+ });
}
-
+ /**
+ * 鏄剧ず鍙栨按鍙h鎯�
+ *
+ * @param data
+ */
public void showWaterIntakeDetail(String data) {
MyLog.i(data);
- binding.bottomLL.setVisibility(View.VISIBLE);
+ MarkerBean markerBean = markerBeanSet.get(data);
+ if (markerBean != null) {
+ getInstakeDetail(markerBean);
+ }
+
}
+ /**
+ * 鏄剧ず鍒嗘按鎴胯鎯�
+ *
+ * @param data
+ */
+ public void showDivideDetail(String data) {
+ MyLog.i(data);
+ DivideBean markerBean = divideBeanMap.get(data);
+ if (markerBean != null) {
+ binding.bottomLL.setVisibility(View.GONE);
+ getDivideDetail(markerBean);
+ }
+
+ }
/**
* 鑾峰彇鍦板浘涓績鐐�
*/
private void getCenterPoint() {
-
- ApiManager.getInstance().requestGet(this.getContext(), Constants.BASE_URL + "/base/dict_item/map_center", CenterPointResult.class, null, new SubscriberListener<BaseResponse<CenterPointResult>>() {
+ ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/base/dict_item/map_center", CenterPointResult.class, null, new SubscriberListener<BaseResponse<CenterPointResult>>() {
@Override
public void onNext(BaseResponse<CenterPointResult> t) {
if (t.isSuccess()) {
@@ -415,6 +521,7 @@
* 涓婃姤宸℃璁板綍
*/
private void pushLocationData(InspectionLocationBean inspectionLocationBean) {
+ InspectionRequest inspectionRequest = InspectionRequest.getInstance();
inspectionRequest.setInspectId(inspectionLocationBean.getInspectId());
inspectionRequest.setInspectorId(mInspectionBean.getInspectorId());
if (mInspectionBean != null) {
@@ -427,7 +534,6 @@
track.setLat(inspectionLocationBean.getLat());
track.setLng(inspectionLocationBean.getLng());
track.setLocateTime(inspectionLocationBean.getLocateTime());
- inspectionRequest.getTracks().clear();
inspectionRequest.addTracks(track);
ApiManager.getInstance().requestPostHideLoading(MapFragment.this.getContext(), BASE_URL + "/app/inspect/save", InsectionResult.class, inspectionRequest.toMap(inspectionRequest), new SubscriberListener<BaseResponse<List<InsectionResult>>>() {
@Override
@@ -435,6 +541,7 @@
try {
if (t.isSuccess()) {
if (t.getContent() != null) {
+ MyLog.d("InspectId:" + String.valueOf(t.getContent().get(0).getInspectId()));
mInspectionBean.setInspectId(String.valueOf(t.getContent().get(0).getInspectId()));
InspectionUtils.upataInspectionData(MapFragment.this.getContext(), mInspectionBean);
}
@@ -466,6 +573,7 @@
lastLatLonBean = latLonBean;
Log.i("chageInspecState", "lat:" + latLonBean.getLatitude() + ",log:" + latLonBean.getLongitude());
InspectionLocationBean inspectionLocationBean = InspectionUtils.createInspectionLocation(latLonBean, mInspectionBean);
+ //娣诲姞宸℃璁板綍鍧愭爣
InspectionUtils.addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean);
//鏇存柊鍒板湴鍥�
mWebView.evaluateJavascript("javascript:updateInspectionLocation(\"" + latLonBean.getLongitude() + "\",\"" + latLonBean.getLatitude() + "\")", value -> {
@@ -558,7 +666,6 @@
* 鎰忓閫�鍑哄悗缁х画鏄剧ず涔嬪墠鐨勫潗鏍�
*/
public void aginShowLocation(List<InspectionLocationBean> locationBeans) {
- isHaseAginData = true;
if (locationBeans != null) {
aginShowlocationBeans = locationBeans;
}
@@ -570,12 +677,89 @@
});
}
// 鍚� WebView 娉ㄥ叆鏁版嵁
-
aginShowlocationBeans.clear();
-
}
-
}
+ }
+
+ /**
+ * 璺宠浆鍦板浘涓績鐐�
+ */
+ public void jumpCenterPoint() {
+ if (webViewIsFinished) {
+ if (centerPointBean != null) {
+ Log.d(TAG, "jumpCenterPoint>>>>>>>>>>>>>>>>>>>" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat());
+ mWebView.evaluateJavascript("javascript:setCenterAndZoom(\"" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat() + "\",\"" + centerPointBean.getZoomMp() + "\")", value -> {
+ });
+ }
+ }
+ }
+
+ /**
+ * 娣诲姞鏍囨敞鐐�
+ */
+ public void setMapMarker(MarkerBean markerBean) {
+ if (markerBean != null) {
+ if (webViewIsFinished) {
+ if (!TextUtils.isEmpty(markerBean.getLng()) && !TextUtils.isEmpty(markerBean.getLat())) {
+ mWebView.evaluateJavascript("javascript:addMarker(\"" + markerBean.getId() + "\",\"" + markerBean.getLng() + "\",\"" + markerBean.getLat() + "\",\"" + markerBean.getName() + "\")", new ValueCallback<String>() {
+ @Override
+ public void onReceiveValue(String value) {
+ }
+ });
+ markerBeanSet.put(markerBean.getId(), markerBean);
+ } else {
+ MyLog.d("setMapMarker>" + markerBean.getName() + "缁忕含搴︿负绌�");
+ }
+ } else {
+ webNoFinishMarkerData.add(markerBean);
+ }
+ }
+ }
+
+ /**
+ * 娣诲姞鍙栨按鍙f爣娉�
+ */
+ public void setMapDivide(DivideBean divide) {
+ if (divide != null) {
+ if (webViewIsFinished) {
+ if (!TextUtils.isEmpty(divide.getLng()) && !TextUtils.isEmpty(divide.getLat())) {
+ mWebView.evaluateJavascript("javascript:addDivide(\"" + divide.getId() + "\",\"" + divide.getLng() + "\",\"" + divide.getLat() + "\",\"" + divide.getDivideName() + "\")", new ValueCallback<String>() {
+ @Override
+ public void onReceiveValue(String value) {
+ }
+ });
+ divideBeanMap.put(divide.getId(), divide);
+ } else {
+ MyLog.d("setMapDivide>" + divide.getDivideName() + "缁忕含搴︿负绌�");
+ }
+ } else {
+ webNoFinishDivideData.add(divide);
+ }
+ }
+ }
+
+ /**
+ * 娣诲姞绠$綉鏍囨敞
+ */
+ public void setMapDivide(PipeNetworkBean pipeNetworkBean) {
+// if (divide != null) {
+// if (webViewIsFinished) {
+// for ()
+// if (!TextUtils.isEmpty(divide.getLng()) && !TextUtils.isEmpty(divide.getLat())) {
+// mWebView.evaluateJavascript("javascript:addDivide(\"" + divide.getId() + "\",\"" + divide.getLng() + "\",\"" + divide.getLat() + "\",\"" + divide.getDivideName() + "\")", new ValueCallback<String>() {
+// @Override
+// public void onReceiveValue(String value) {
+// }
+// });
+// divideBeanMap.put(divide.getId(), divide);
+// } else {
+// MyLog.d("setMapDivide>" + divide.getDivideName() + "缁忕含搴︿负绌�");
+// }
+// } else {
+// webNoFinishDivideData.add(divide);
+// }
+// }
}
/**
@@ -585,13 +769,12 @@
*/
private void startLocation() {
//鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐�
- LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver);
+ LiveEventBus.get(CommonKeyName.locationData).observe(this, locationObserver);
binding.inspectRL.setVisibility(View.VISIBLE);
binding.inspectButton.setVisibility(View.GONE);
binding.inspectPause.setText("鏆傚仠");
binding.stateText.setText("宸插紑鍚贰妫�");
binding.inspectRL.setBackgroundColor(this.getContext().getResources().getColor(R.color.base_blue));
- inspectionRequest = new InspectionRequest();
SharedPreferencesHelper.getInstance(this.getContext()).put(CommonKeyName.inspectionState, InspectionUtils.STAT_INSPECTION);
ServiceUtils.startLocationService(MapFragment.this.getContext(), false);
}
@@ -634,4 +817,400 @@
e.printStackTrace();
}
}
+
+ /**
+ * 鎺ユ敹js浼犳潵鐨勪腑蹇冪偣鍧愭爣
+ *
+ * @param lng
+ * @param lat
+ */
+ public void refreshCenterPoint(double lng, double lat) {
+ centerLng = lng;
+ centerLat = lat;
+ binding.pointText.setText(centerLng + "锛�" + centerLat);
+ }
+
+ /**
+ * 淇敼缁忕含搴�
+ *
+ * @param markerBean
+ */
+ private void updataInstake(MarkerBean markerBean) {
+ String lng = String.valueOf(centerLng);
+ String lat = String.valueOf(centerLat);
+ Map<String, Object> params = new HashMap<>();
+ params.put("id", markerBean.getId());
+ params.put("lng", lng);
+ params.put("lat", lat);
+ params.put("operator", MyApplication.myApplication.userId);
+
+ ApiManager.getInstance().requestPost(MapFragment.this.getContext(), BASE_URL + "/project/intake/updateIntakeLngLat", Boolean.class, params, new SubscriberListener<BaseResponse<Boolean>>() {
+ @Override
+ public void onNext(BaseResponse<Boolean> t) {
+ try {
+ if (t.isSuccess()) {
+ mWebView.evaluateJavascript("javascript:refreshMarker(\"" + markerBean.getId() + "\",\"" + centerLng + "\",\"" + centerLat + "\",\"" + markerBean.getName() + "\")", new ValueCallback<String>() {
+ @Override
+ public void onReceiveValue(String value) {
+ }
+ });
+ binding.pointCenterImg.setVisibility(View.GONE);
+ binding.pointRL.setVisibility(View.GONE);
+ mMarkerBean.setLat(lat);
+ mMarkerBean.setLng(lng);
+ binding.lng.setText(lng);
+ binding.lat.setText(lat);
+ mWebView.evaluateJavascript("javascript:cancelPin()", value -> {
+ });
+ ToastUtil.showToastLong(MapFragment.this.getContext(), "淇敼鎴愬姛锛�");
+
+ } else {
+ ToastUtil.showToastLong(MapFragment.this.getContext(), t.getMsg());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ CrashReport.postCatchedException(e);
+ }
+
+ }
+ });
+ }
+
+ /**
+ * 鑾峰彇鍙栨按鍙h鎯�
+ *
+ * @param markerBean
+ */
+ private void getInstakeDetail(MarkerBean markerBean) {
+ Map<String, Object> params = new HashMap<>();
+ params.put("id", markerBean.getId());
+ ApiManager.getInstance().requestGet(this.getContext(), Constants.BASE_URL + "/project/intake/one", MarkerResult.class, params, new SubscriberListener<BaseResponse<MarkerResult>>() {
+ @Override
+ public void onNext(BaseResponse<MarkerResult> t) {
+ if (t.isSuccess()) {
+ MarkerResult result = t.getContent();
+ mMarkerBean = new MarkerBean();
+ mMarkerBean.setId(result.getId());
+ mMarkerBean.setLng(result.getLng());
+ mMarkerBean.setLat(result.getLat());
+ mMarkerBean.setBlockId(result.getBlockId());
+ mMarkerBean.setName(result.getName());
+ mMarkerBean.setRemarks(result.getRemarks());
+ mMarkerBean.setTownId(result.getTownId());
+ mMarkerBean.setVillageId(result.getVillageId());
+ mMarkerBean.setCountyId(result.getCountyId());
+ mMarkerBean.setAddress(result.getAddress());
+ mMarkerBean.setBlockName(result.getBlockName());
+ mMarkerBean.setDivideId(result.getDivideId());
+ showMarker(mMarkerBean);
+ } else {
+ ToastUtil.showToast(MapFragment.this.getContext(), t.getMsg());
+ }
+ }
+
+ });
+ }
+
+ /**
+ * 鏄剧ず鍙栨按鍙h鎯�
+ */
+ private void getDivideDetail(DivideBean divideBean) {
+ ApiManager.getInstance().requestGet(this.getContext(), Constants.BASE_URL + "/project/divide/getone/" + divideBean.getDivideId(), DivideResult.class, null, new SubscriberListener<BaseResponse<DivideResult>>() {
+ @Override
+ public void onNext(BaseResponse<DivideResult> t) {
+ if (t.isSuccess()) {
+ DivideBean divideBean = getDivideBean(t.getContent());
+ showDivideMarker(divideBean);
+ } else {
+ ToastUtil.showToast(MapFragment.this.getContext(), t.getMsg());
+ }
+ }
+
+ });
+ }
+
+ /**
+ * 鏄剧ず鍙栨按鍙h鎯�
+ */
+ private void showMarker(MarkerBean markerBean) {
+ binding.bottomLL.setVisibility(View.VISIBLE);
+ binding.phoneLL.setVisibility(View.GONE);
+ binding.headerLL.setVisibility(View.GONE);
+ binding.editePoint.setVisibility(View.VISIBLE);
+ binding.markerAddress.setText(markerBean.getAddress());
+ binding.markerName.setText(markerBean.getName());
+ binding.markerBlockName.setText(markerBean.getBlockName());
+ binding.lat.setText(markerBean.getLat());
+ binding.lng.setText(markerBean.getLng());
+ //淇敼缁忕含搴�
+ binding.editePoint.setOnClickListener(v -> {
+
+ mWebView.evaluateJavascript("javascript:showPin(\"" + markerBean.getLng() + "\",\"" + markerBean.getLat() + "\")", value -> {
+ binding.pointRL.setVisibility(View.VISIBLE);
+ binding.pointCenterImg.setVisibility(View.VISIBLE);
+ MyLog.d("showPin>>" + value);
+ });
+
+ });
+ //鍙栨秷淇敼缁忕含搴�
+ binding.pointCancel.setOnClickListener(v -> {
+ binding.pointCenterImg.setVisibility(View.GONE);
+ binding.pointRL.setVisibility(View.GONE);
+ mWebView.evaluateJavascript("javascript:cancelPin()", value -> {
+
+ });
+ }
+ );
+ //纭淇敼缁忕含搴�
+ binding.pointEdt.setOnClickListener(v -> {
+ ConfirmDialog confirmDialog = new ConfirmDialog(MapFragment.this.getActivity(), "纭淇敼鍒拌浣嶇疆鍚楋紵", (confirmDialog1, v1) -> {
+ confirmDialog1.dismiss();
+ updataInstake(markerBean);
+ });
+ confirmDialog.show();
+ });
+ }
+
+ /**
+ * 鏄剧ず鍒嗘按鎴胯鎯�
+ *
+ * @param divideBean
+ */
+ private void showDivideMarker(DivideBean divideBean) {
+ binding.bottomLL.setVisibility(View.VISIBLE);
+ binding.phoneLL.setVisibility(View.VISIBLE);
+ binding.headerLL.setVisibility(View.VISIBLE);
+ binding.editePoint.setVisibility(View.GONE);
+ binding.markerAddress.setText(divideBean.getAddress());
+ binding.markerName.setText(divideBean.getDivideName());
+ binding.markerBlockName.setText(divideBean.getBlockName());
+ binding.phone.setText(divideBean.getPhone());
+ binding.header.setText(divideBean.getHeader());
+ binding.lat.setText(divideBean.getLat());
+ binding.lng.setText(divideBean.getLng());
+ //淇敼缁忕含搴�
+ binding.editePoint.setOnClickListener(v -> {
+
+ mWebView.evaluateJavascript("javascript:showPin(\"" + divideBean.getLng() + "\",\"" + divideBean.getLat() + "\")", value -> {
+ binding.pointRL.setVisibility(View.VISIBLE);
+ binding.pointCenterImg.setVisibility(View.VISIBLE);
+ MyLog.d("showPin>>" + value);
+ });
+
+ });
+ //鍙栨秷淇敼缁忕含搴�
+ binding.pointCancel.setOnClickListener(v -> {
+ binding.pointCenterImg.setVisibility(View.GONE);
+ binding.pointRL.setVisibility(View.GONE);
+ mWebView.evaluateJavascript("javascript:cancelPin()", value -> {
+
+ });
+ }
+ );
+ //纭淇敼缁忕含搴�
+ binding.pointEdt.setOnClickListener(v -> {
+ ConfirmDialog confirmDialog = new ConfirmDialog(MapFragment.this.getActivity(), "纭淇敼鍒拌浣嶇疆鍚楋紵", (confirmDialog1, v1) -> {
+ confirmDialog1.dismiss();
+// updataInstake(markerBean);
+ });
+ confirmDialog.show();
+ });
+ }
+
+
+ /**
+ * 鑾峰彇鍒嗘按鎴�
+ */
+ private void getDivideList() {
+ ApiManager.getInstance().requestGetHideLoading(MapFragment.this.getContext(), BASE_URL + "/project/divide/getDivides", DivideListResult.class, null, new SubscriberListener<BaseResponse<DivideListResult>>() {
+ @Override
+ public void onNext(BaseResponse<DivideListResult> t) {
+ try {
+ if (t.isSuccess()) {
+ if (t.getContent().getObj() != null && !t.getContent().getObj().isEmpty()) {
+ List<DivideBean> divideBeans = new ArrayList<>();
+ for (DivideResult divideResult : t.getContent().getObj()) {
+ DivideBean divideBean = getDivideBean(divideResult);
+ setMapDivide(divideBean);
+ divideBeans.add(divideBean);
+ }
+
+ // 浣跨敤 CompositeDisposable 绠$悊鏁版嵁搴撴彃鍏ユ搷浣�
+ compositeDisposable.add(
+ DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).divideDao().insertAll(divideBeans)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ () -> {
+ // 鎻掑叆鎴愬姛
+ Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
+ },
+ throwable -> {
+ // 鎻掑叆澶辫触
+ Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
+ }
+ )
+ );
+ }
+ } else {
+ ToastUtil.showToastLong(MapFragment.this.getContext(), t.getMsg());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ CrashReport.postCatchedException(e);
+ }
+ }
+ });
+ }
+
+ /**
+ * 鑾峰彇绠$綉
+ */
+ private void getPipeNetworkList() {
+ ApiManager.getInstance().requestGetHideLoading(MapFragment.this.getContext(), BASE_URL + "/project/network/all", PipeNetworkListResult.class, null, new SubscriberListener<BaseResponse<PipeNetworkListResult>>() {
+ @Override
+ public void onNext(BaseResponse<PipeNetworkListResult> t) {
+ try {
+ if (t.isSuccess()) {
+ if (t.getContent().getObj() != null && !t.getContent().getObj().isEmpty()) {
+
+ List<DivideBean> divideBeans = new ArrayList<>();
+ for (PipeNetworkResult divideResult : t.getContent().getObj()) {
+ PipeNetworkBean divideBean = getPipeNetworkBean(divideResult);
+ setMapDivide(divideBean);
+// divideBeans.add(divideBean);
+ }
+ // 浣跨敤 RxJava 寮傛鎻掑叆鏁版嵁
+ DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).divideDao().insertAll(divideBeans)
+ .subscribeOn(Schedulers.io()) // 鍦� IO 绾跨▼涓婃墽琛�
+ .observeOn(AndroidSchedulers.mainThread()) // 鍦ㄤ富绾跨▼涓婅瀵�
+ .subscribe(() -> {
+ // 鎻掑叆鎴愬姛
+ Log.i("mWebView", "鏁版嵁鎻掑叆鎴愬姛");
+ }, throwable -> {
+ // 鎻掑叆澶辫触
+ Log.e("mWebView", "鏁版嵁鎻掑叆澶辫触: " + throwable.getMessage());
+ });
+ }
+
+
+ } else {
+ ToastUtil.showToastLong(MapFragment.this.getContext(), t.getMsg());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ CrashReport.postCatchedException(e);
+ }
+ }
+
+ });
+ }
+
+ /**
+ * @param divideResult
+ * @return
+ */
+ private static @NonNull DivideBean getDivideBean(DivideResult divideResult) {
+ DivideBean divideBean = new DivideBean();
+ divideBean.setAddress(divideResult.getAddress());
+ divideBean.setBlockId(divideResult.getBlockId());
+ divideBean.setBlockName(divideResult.getBlockName());
+ divideBean.setDivideId(divideResult.getDivideId());
+ if (!TextUtils.isEmpty(divideResult.getDivideName())) {
+ divideBean.setDivideName(divideResult.getDivideName());
+ } else {
+ divideBean.setDivideName(divideResult.getName());
+ }
+
+ divideBean.setHeader(divideResult.getHeader());
+ divideBean.setId(divideResult.getId());
+ divideBean.setLat(divideResult.getLat());
+ divideBean.setLng(divideResult.getLng());
+ divideBean.setOperateDt(divideResult.getOperateDt());
+ divideBean.setOperator(divideResult.getOperator());
+ divideBean.setPhone(divideResult.getPhone());
+ divideBean.setRemarks(divideResult.getRemarks());
+ divideBean.setVillages(divideResult.getVillages());
+ divideBean.setArea(divideResult.getArea());
+ return divideBean;
+ }
+
+ private static @NonNull PipeNetworkBean getPipeNetworkBean(PipeNetworkResult divideResult) {
+ PipeNetworkBean pipeNetworkBean = new PipeNetworkBean();
+
+ return pipeNetworkBean;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ // 娓呯悊鎵�鏈夎闃�
+ if (compositeDisposable != null && !compositeDisposable.isDisposed()) {
+ compositeDisposable.dispose();
+ }
+ LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver);
+ if (mWebView != null) {
+ mWebView.destroy();
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mWebView.onResume();
+ mWebView.resumeTimers();
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ mWebView.onPause();
+ mWebView.pauseTimers();
+ }
+
+ @Override
+ public void onSaveInstanceState(@NonNull Bundle outState) {
+ super.onSaveInstanceState(outState);
+ mWebView.saveState(outState);
+ }
+
+ @Override
+ public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
+ super.onViewStateRestored(savedInstanceState);
+ if (savedInstanceState != null) {
+ mWebView.restoreState(savedInstanceState);
+ }
+ }
+
+ /**
+ * 鏄剧ず鎴栭殣钘忓湴鍥句笂鐨勫彇姘村彛
+ *
+ * @param isShow
+ */
+ private void showMarkers(boolean isShow) {
+ if (isShow) {
+ mWebView.evaluateJavascript("javascript:showAllWaterIntakes()", value -> {
+ });
+ } else {
+ mWebView.evaluateJavascript("javascript:hideAllWaterIntakes()", value -> {
+ });
+ }
+
+ }
+
+ /**
+ * 鏄剧ず鎴栭殣钘忓湴鍥句笂鐨勫垎姘存埧
+ *
+ * @param isShow
+ */
+ private void showDivideMarkers(boolean isShow) {
+ if (isShow) {
+ mWebView.evaluateJavascript("javascript:showAllDivides()", value -> {
+ });
+ } else {
+ mWebView.evaluateJavascript("javascript:hideAllDivides()", value -> {
+ });
+ }
+ }
+
}
--
Gitblit v1.8.0