From ec6193939600ca7930193b1d5942b1700baf9e06 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期五, 21 二月 2025 09:20:15 +0800 Subject: [PATCH] 1.巡检记录列表页的实现 2.巡检记录地图展示路径的详情页。 3.处理巡检记录详情页因打开同一个网址导致的webView不显示问题。 4.实现地图页搜索后的地图跳转功能。 5.巡检记录详情页数据加载的优化,默认加载本地数据,当本地没有数据时从服务端获取数据。 --- app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java | 9 app/src/main/res/layout/activity_inspect_list.xml | 25 + app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java | 251 +++++++++++++++ app/src/main/java/com/dayu/pipirrapp/adapter/InspectAdapter.java | 92 +++++ app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java | 7 app/src/main/assets/js/map.js | 43 ++ app/src/main/java/com/dayu/pipirrapp/bean/db/SearchResultBean.java | 70 ++++ app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java | 11 app/src/main/res/layout/activity_inspect_detail.xml | 15 app/src/main/res/layout/item_inspect.xml | 45 ++ app/src/main/AndroidManifest.xml | 2 app/src/main/assets/img/marker_blue_start.svg | 9 app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java | 2 app/src/main/res/layout/dialog_search_result.xml | 1 app/src/main/assets/img/marker_blue_end.svg | 9 app/src/main/java/com/dayu/pipirrapp/utils/CommonData.java | 14 app/src/main/res/drawable/ic_pipenetwork_line.xml | 8 app/src/main/java/com/dayu/pipirrapp/bean/net/InspectListResult.java | 59 +++ app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java | 10 app/src/main/res/layout/fragment_my.xml | 26 + app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java | 3 app/src/main/java/com/dayu/pipirrapp/bean/net/InspectResult.java | 89 +++++ app/src/main/java/com/dayu/pipirrapp/activity/InspectListActivity.java | 141 ++++++++ 23 files changed, 915 insertions(+), 26 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7f4bbfe..090e664 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -109,6 +109,8 @@ <activity android:name=".activity.AddIssueActivity" /> <activity android:name=".activity.IssueListActivity" /> <activity android:name=".activity.IssueDetailActivity" /> + <activity android:name=".activity.InspectListActivity"/> + <activity android:name=".activity.InspectDetailActivity"/> <!-- <activity android:name=".activity.MainActivity" />--> diff --git a/app/src/main/assets/img/marker_blue_end.svg b/app/src/main/assets/img/marker_blue_end.svg new file mode 100644 index 0000000..ad4cc14 --- /dev/null +++ b/app/src/main/assets/img/marker_blue_end.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" + viewBox="0 0 24 24" width="24px" fill="#D81E06"> + <rect fill="none" height="24" width="24" /> + <path + d="M12,2L12,2C8.13,2,5,5.13,5,9c0,1.74,0.5,3.37,1.41,4.84c0.95,1.54,2.2,2.86,3.16,4.4c0.47,0.75,0.81,1.45,1.17,2.26 C11,21.05,11.21,22,12,22h0c0.79,0,1-0.95,1.25-1.5c0.37-0.81,0.7-1.51,1.17-2.26c0.96-1.53,2.21-2.85,3.16-4.4 C18.5,12.37,19,10.74,19,9C19,5.13,15.87,2,12,2z" /> + <text x="12" y="12" text-anchor="middle" fill="white" font-size="8" + font-family="Arial, sans-serif">缁� + </text> +</svg> \ No newline at end of file diff --git a/app/src/main/assets/img/marker_blue_start.svg b/app/src/main/assets/img/marker_blue_start.svg new file mode 100644 index 0000000..d1c101b --- /dev/null +++ b/app/src/main/assets/img/marker_blue_start.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" + viewBox="0 0 24 24" width="24px" fill="#1890FF"> + <rect fill="none" height="24" width="24" /> + <path + d="M12,2L12,2C8.13,2,5,5.13,5,9c0,1.74,0.5,3.37,1.41,4.84c0.95,1.54,2.2,2.86,3.16,4.4c0.47,0.75,0.81,1.45,1.17,2.26 C11,21.05,11.21,22,12,22h0c0.79,0,1-0.95,1.25-1.5c0.37-0.81,0.7-1.51,1.17-2.26c0.96-1.53,2.21-2.85,3.16-4.4 C18.5,12.37,19,10.74,19,9C19,5.13,15.87,2,12,2z" /> + <text x="12" y="12" text-anchor="middle" fill="white" font-size="8" + font-family="Arial, sans-serif">璧� + </text> +</svg> \ No newline at end of file diff --git a/app/src/main/assets/js/map.js b/app/src/main/assets/js/map.js index af17e60..aed2047 100644 --- a/app/src/main/assets/js/map.js +++ b/app/src/main/assets/js/map.js @@ -8,7 +8,9 @@ MARKER_BLUE: 'img/marker_blue.svg', CENTER_PIN: 'img/push_pin.svg', DIVIDE_BLUE: 'img/divide_home_blue.svg', - DIVIDE_RED: 'img/divide_home_red.svg' + DIVIDE_RED: 'img/divide_home_red.svg', + MARKER_START: 'img/marker_blue_start.svg', + MARKER_END: 'img/marker_blue_end.svg' }, MAP: { DEFAULT_ZOOM: 12, @@ -56,6 +58,7 @@ window.showAllWaterIntakes = showAllWaterIntakes; window.hideAllDivides = hideAllDivides; window.showAllDivides = showAllDivides; + window.showHistoryLocation = showHistoryLocation; } @@ -143,7 +146,7 @@ // 鎵嬫満鑾峰彇鍒板畾浣嶅悗鏄剧ず瀹氫綅 function locationOverLay(lng, lag) { -// console.log("function銆嬨�嬨�嬨�嬨�媗ocationOverLay"); + // console.log("function銆嬨�嬨�嬨�嬨�媗ocationOverLay"); map.centerAndZoom(new T.LngLat(lng, lag), map.getZoom()); let icon = new T.Icon({ iconUrl: CONFIG.IMAGES.LOCATION, @@ -161,7 +164,7 @@ //璁剧疆鍦板浘涓績鐐� function setCenterAndZoom(lng, lat, thiszoom) { zoom = thiszoom; -// console.log("function銆嬨�嬨�嬨�嬨�媠etCenterAndZoom>>>>lng:" + lng + ",lat:" + lat); + // console.log("function銆嬨�嬨�嬨�嬨�媠etCenterAndZoom>>>>lng:" + lng + ",lat:" + lat); map.centerAndZoom(new T.LngLat(lng, lat), zoom); } @@ -322,7 +325,7 @@ }, addPoint(lng, lat, isNewLine, isShow) { -// console.log(`Adding point: ${lng}, ${lat}, isNewLine: ${isNewLine}`); // 娣诲姞鏃ュ織 + // console.log(`Adding point: ${lng}, ${lat}, isNewLine: ${isNewLine}`); // 娣诲姞鏃ュ織 const point = new T.LngLat(lng, lat); @@ -352,7 +355,7 @@ }, showAll() { -// console.log("showAllpipe" + this.lines.length); + // console.log("showAllpipe" + this.lines.length); this.lines.forEach(line => { if (line.overlay) { map.addOverLay(line.overlay); @@ -362,7 +365,7 @@ }, hideAll() { -// console.log("hideAllpipe" + this.lines.length); + // console.log("hideAllpipe" + this.lines.length); this.lines.forEach(line => { if (line.overlay) { map.removeOverLay(line.overlay); @@ -610,5 +613,31 @@ map.addOverLay(item.label); }); } + var historyPoint = []; + //鏄剧ず鍘嗗彶宸℃璁板綍 + function showHistoryLocation(lng, lat, start, end) { + // 璋冪敤 Android 鎻愪緵鐨勬帴鍙o紝鑾峰彇鏁版嵁 + console.log("aginShowLocation>>lng:" + lng + ">>>lat:" + lat+">>>start:"+start+">>>end:"+end); + var newPoint = new T.LngLat(lng, lat); + historyPoint.push(newPoint); + if (start === "true" || start === true) { + map.panTo(newPoint); + let marker = new T.Marker( + newPoint, + { icon: createIcon(CONFIG.IMAGES.MARKER_START, 35) } + ); + map.addOverLay(marker); + } else if (end === "true" || end === true) { + let marker = new T.Marker( + newPoint, + { icon: createIcon(CONFIG.IMAGES.MARKER_END, 35) } + ); + map.addOverLay(marker); + } + oldLineLayer.setLngLats(historyPoint); + map.addOverLay(oldLineLayer); + } -})(); +} + +)(); diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java new file mode 100644 index 0000000..3c33518 --- /dev/null +++ b/app/src/main/java/com/dayu/pipirrapp/activity/InspectDetailActivity.java @@ -0,0 +1,251 @@ +package com.dayu.pipirrapp.activity; + + +import android.os.Build; +import android.os.Bundle; +import android.util.Log; +import android.webkit.ConsoleMessage; +import android.webkit.WebChromeClient; +import android.webkit.WebResourceError; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import androidx.annotation.Nullable; + +import com.dayu.pipirrapp.R; +import com.dayu.pipirrapp.bean.db.InspectionLocationBean; +import com.dayu.pipirrapp.dao.DaoSingleton; +import com.dayu.pipirrapp.net.ApiManager; +import com.dayu.pipirrapp.utils.CommonData; +import com.dayu.pipirrapp.utils.MapJpgUtils; +import com.dayu.pipirrapp.view.TitleBar; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.List; + +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.schedulers.Schedulers; + +/** + * InspectDetailActivity - 宸℃璇︽儏椤� + * + * @author zuoxiao + * @version 1.0 + * @since 2025-02-20 + */ +public class InspectDetailActivity extends BaseActivity { + + WebView mWebView; + String inspectId; + List<InspectionLocationBean> aginShowlocationBeans; + boolean webViewIsFinished; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + inspectId = getIntent().getStringExtra("inspectId"); + setContentView(R.layout.activity_inspect_detail); + new TitleBar(this).setTitleText("宸℃璇︽儏").setLeftIco().setLeftIcoListening(v -> InspectDetailActivity.this.finish()); + mWebView = findViewById(R.id.InspectWebView); + + Log.d("InspectDetail", "寮�濮嬪垵濮嬪寲WebView"); + + // 鍒濆鍖朩ebView璁剧疆 + WebSettings webSettings = mWebView.getSettings(); + mWebView.clearCache(true); + webSettings.setJavaScriptEnabled(true); + webSettings.setAllowFileAccess(true); + webSettings.setAllowFileAccessFromFileURLs(true); + webSettings.setAllowUniversalAccessFromFileURLs(true); + webSettings.setDomStorageEnabled(true); + webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); + webSettings.setDefaultTextEncodingName("utf-8"); + webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + webSettings.setBlockNetworkImage(false); + webSettings.setBlockNetworkLoads(false); + webSettings.setDatabaseEnabled(true); + webSettings.setGeolocationEnabled(true); + + // 璁剧疆鐙珛鐨勬暟鎹洰褰� + File cacheDir = new File(getDir("webview", MODE_PRIVATE), "cache"); + if (!cacheDir.exists()) { + cacheDir.mkdirs(); + } + webSettings.setDatabasePath(cacheDir.getAbsolutePath()); + webSettings.setGeolocationDatabasePath(cacheDir.getAbsolutePath()); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + WebView.setWebContentsDebuggingEnabled(true); + } + + initWeb(); + Log.d("InspectDetail", "寮�濮嬪姞杞紿TML椤甸潰"); + mWebView.loadUrl("file:///android_asset/index.html"); + showLocation(); + } + + @Override + protected void onDestroy() { + if (mWebView != null) { + mWebView.loadUrl("about:blank"); + mWebView.clearHistory(); + mWebView.clearCache(true); + mWebView.removeAllViews(); + mWebView.destroy(); + mWebView = null; + } + super.onDestroy(); + } + + @Override + protected void onPause() { + super.onPause(); + if (mWebView != null) { + mWebView.onPause(); + mWebView.pauseTimers(); + } + } + + @Override + protected void onResume() { + super.onResume(); + if (mWebView != null) { + mWebView.onResume(); + mWebView.resumeTimers(); + } + } + + private void initWeb() { + mWebView.setWebViewClient(new WebViewClient() { + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { + String url = request.getUrl().toString(); + //鍒ゆ柇褰撳墠鏄惁涓哄姞杞界摝鐗� + if (MapJpgUtils.getInsatance().isTianDiTuTileRequest(url)) { + String androidUrl = url.replace(CommonData.webKey, CommonData.androidKey); + // 妫�鏌ユ湰鍦扮紦瀛� + File cachedTile = MapJpgUtils.getInsatance().getCachedTile(androidUrl); + if (cachedTile != null && cachedTile.exists()) { +// Log.d(TAG, "鏈湴缂撳瓨>>>" + androidUrl); +// if (MapJpgUtils.getInsatance().validateImageFile(androidUrl,request.)) + // 鍒ゆ柇缂撳瓨鏄惁杩囨湡 +// if (!MapJpgUtils.getInsatance(MapFragment.this.getContext()).isCacheExpired(cachedTile)) { + try { + // 浠庣紦瀛樺姞杞界摝鐗� + return new WebResourceResponse("image/jpg", "utf-8", new FileInputStream(cachedTile)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } +// } + } else { + //涓嬭浇鐡︾墖 + ApiManager.getInstance().donwLoadTile(InspectDetailActivity.this, androidUrl); + } + } + return super.shouldInterceptRequest(view, request); + } + + @Override + public void onReceivedError(WebView view, WebResourceRequest + request, WebResourceError error) { + super.onReceivedError(view, request, error); + String url = request.getUrl().toString(); + int errorCode = error.getErrorCode(); + String description = error.getDescription().toString(); + + Log.e("InspectDetail", String.format("鍔犺浇閿欒 - URL: %s\n閿欒鐮�: %d\n鎻忚堪: %s", + url, errorCode, description)); + } + + @Override + public void onReceivedHttpError(WebView view, WebResourceRequest + request, WebResourceResponse errorResponse) { + super.onReceivedHttpError(view, request, errorResponse); + String url = request.getUrl().toString(); + int statusCode = errorResponse.getStatusCode(); + String description = errorResponse.getReasonPhrase(); + + Log.e("InspectDetail", String.format("HTTP閿欒 - URL: %s\n鐘舵�佺爜: %d\n鎻忚堪: %s", + url, statusCode, description)); + } + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + Log.d("InspectDetail", "椤甸潰鍔犺浇瀹屾垚: " + url); + webViewIsFinished = true; + // 娉ㄥ叆涓�涓爣璇嗭紝閬垮厤涓嶮apFragment鍐茬獊 + mWebView.evaluateJavascript( + "window.WEBVIEW_TYPE = 'INSPECT_DETAIL';", + null + ); + aginShowLocation(null); + } + }); + + mWebView.setWebChromeClient(new WebChromeClient() { + @Override + public boolean onConsoleMessage(ConsoleMessage consoleMessage) { + Log.d("InspectDetail", "Console: " + consoleMessage.message() + + " at " + consoleMessage.sourceId() + ":" + consoleMessage.lineNumber()); + return true; + } + }); + } + + /** + * 鍔犺浇宸℃璁板綍 + */ + private void showLocation() { + // 鏌ヨ褰撳墠鏈叧闂殑宸℃璁板綍涓嬫墍鏈夌殑鍧愭爣 + DaoSingleton.getAsynchInstance(this).inspectionLocationDao().findByInspectId(inspectId).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()).subscribe(inspectionLocationBeans -> { + aginShowLocation(inspectionLocationBeans); + }); + } + + /** + * 鎰忓閫�鍑哄悗缁х画鏄剧ず涔嬪墠鐨勫潗鏍� + */ + public void aginShowLocation(List<InspectionLocationBean> locationBeans) { + if (locationBeans != null) { + aginShowlocationBeans = locationBeans; + } + if (webViewIsFinished) { + if (aginShowlocationBeans != null) { + int index = 0; + int size = aginShowlocationBeans.size(); + boolean isStart, isEnd; + for (InspectionLocationBean inspectionLocationBean : aginShowlocationBeans) { + + if (index == 0) { + isStart = true; + } else { + isStart = false; + } + if (index == size - 1) { + isEnd = true; + } else { + isEnd = false; + } + Log.i("mWebView", "showHistoryLocation" + inspectionLocationBean.getLng() + "\",\"" + inspectionLocationBean.getLat()); + mWebView.evaluateJavascript("javascript:showHistoryLocation(\"" + inspectionLocationBean.getLng() + "\",\"" + inspectionLocationBean.getLat() + "\",\"" + isStart + "\",\"" + isEnd + "\")", value -> { + }); + index++; + } + // 鍚� WebView 娉ㄥ叆鏁版嵁 + aginShowlocationBeans.clear(); + } + } + } + + + public void getHttpLocation() { + + } +} diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/InspectListActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/InspectListActivity.java new file mode 100644 index 0000000..bb2de3b --- /dev/null +++ b/app/src/main/java/com/dayu/pipirrapp/activity/InspectListActivity.java @@ -0,0 +1,141 @@ +package com.dayu.pipirrapp.activity; + +import android.os.Bundle; +import android.view.LayoutInflater; + +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.dayu.pipirrapp.MyApplication; +import com.dayu.pipirrapp.adapter.InspectAdapter; +import com.dayu.pipirrapp.bean.net.InspectListResult; +import com.dayu.pipirrapp.bean.net.InspectResult; +import com.dayu.pipirrapp.databinding.ActivityInspectListBinding; +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.ToastUtil; +import com.dayu.pipirrapp.view.TitleBar; +import com.scwang.smart.refresh.footer.ClassicsFooter; +import com.scwang.smart.refresh.header.ClassicsHeader; +import com.scwang.smart.refresh.layout.api.RefreshLayout; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import io.reactivex.rxjava3.disposables.CompositeDisposable; + +/** + * InspectActivity - 宸℃璁板綍鍒楄〃 + * + * @author zuoxiao + * @version 1.0 + * @since 2025-02-17 + */ +public class InspectListActivity extends BaseActivity { + private ActivityInspectListBinding binding; + private RefreshLayout myRefreshLayout; + private List<InspectResult> recordsList = new ArrayList<>(); + private InspectAdapter mAdapter; + private CompositeDisposable compositeDisposable = new CompositeDisposable(); + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityInspectListBinding.inflate(LayoutInflater.from(this)); + setContentView(binding.getRoot()); + initView(); + getData(true); + } + + private void initView() { + new TitleBar(this).setTitleText("宸℃璁板綍").setLeftIco().setLeftIcoListening(v -> InspectListActivity.this.finish()); + myRefreshLayout = binding.refreshLayout; + myRefreshLayout.setRefreshHeader(new ClassicsHeader(this)); + myRefreshLayout.setRefreshFooter(new ClassicsFooter(this)); + + myRefreshLayout.setOnRefreshListener(refreshlayout -> { + recordsList.clear(); + getData(true); + }); + myRefreshLayout.setOnLoadMoreListener(refreshlayout -> { + getData(false); + }); + + mAdapter = new InspectAdapter(this, recordsList); + LinearLayoutManager layoutManager = new LinearLayoutManager(this); + binding.recyclerView.setLayoutManager(layoutManager); + binding.recyclerView.setAdapter(mAdapter); + } + +// private void getData(boolean isRefresh) { +// if (isRefresh) { +// recordsList.clear(); +// } +// +// compositeDisposable.add( +// DaoSingleton.getAsynchInstance(this).inspectionDao().findAll() +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(inspectionList -> { +// if (inspectionList != null && !inspectionList.isEmpty()) { +// recordsList.addAll(inspectionList); +// } +// mAdapter.notifyDataSetChanged(); +// layoutFinish(myRefreshLayout, isRefresh); +// }, throwable -> { +// // 澶勭悊閿欒 +// layoutFinish(myRefreshLayout, isRefresh); +// }) +// ); +// } + + private void getData(boolean isRefresh) { + Map<String, Object> params = new HashMap<>(); + if (isRefresh) { + page = 1; + recordsList.clear(); + } + params.put("pageSize", pageSize); + params.put("pageCurr", page); + params.put("inspectorId", MyApplication.myApplication.userId); + + ApiManager.getInstance().requestGetHideLoading(this, Constants.BASE_URL + "/app/inspect/getInspectRecords", InspectListResult.class, params, new SubscriberListener<BaseResponse<InspectListResult>>() { + @Override + public void onNext(BaseResponse<InspectListResult> t) { + if (t.isSuccess()) { + if (t.isSuccess()) { + if (t.getContent().getObj() != null && t.getContent().getObj().size() > 0) { + recordsList.addAll(t.getContent().getObj()); + if (t.getContent().getPageTotal() == page) { + myRefreshLayout.finishLoadMoreWithNoMoreData(); + } + } else { + myRefreshLayout.finishLoadMoreWithNoMoreData(); + } + } + } else { + ToastUtil.showToast(InspectListActivity.this, t.getMsg()); + } + } + + @Override + public void onCloose() { + super.onCloose(); + layoutFinish(myRefreshLayout, isRefresh); + mAdapter.notifyDataSetChanged(); + + } + + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + compositeDisposable.clear(); + } +} diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java index 411a8e2..3ff4f31 100644 --- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java +++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java @@ -76,6 +76,7 @@ AddPictureAdapter mAdapter; int maxSelectNum = 10;//鏈�澶х収鐗� int maxSelectVideoNum = 0;//鏈�澶ц棰� + int videoMaxSecond = 60; private final List<LocalMedia> mData = new ArrayList<>(); private ActivityResultLauncher<Intent> launcherResult; private ImageEngine imageEngine; @@ -204,12 +205,20 @@ private void mOpenPicture() { // 杩涘叆鐩稿唽 PictureSelectionModel selectionModel = PictureSelector.create(this) - .openGallery(SelectMimeType.ofImage()) + .openGallery(SelectMimeType.ofAll()) .setMaxSelectNum(maxSelectNum) .setMaxVideoSelectNum(maxSelectVideoNum) .setImageEngine(imageEngine) //璁剧疆鍥剧墖鍘嬬缉 .setCompressEngine(new ImageFileCompressEngine()) + //璁剧疆瑙嗛鍥剧墖涓�璧峰湪鐩稿唽閫夋嫨 + .isWithSelectVideoImage(true) + //璁剧疆鏈�澶ц棰戞椂闀� + .setRecordVideoMaxSecond(videoMaxSecond) + // 杩囨护瑙嗛鏈�澶ф椂闀� + .setFilterVideoMaxSecond(videoMaxSecond) + // 鎷嶇収鏄惁绾犳鏃嬭浆鍥剧墖 + .isCameraRotateImage(true) .setSelectedData(mAdapter.getData()); selectionModel.forResult(launcherResult); diff --git a/app/src/main/java/com/dayu/pipirrapp/adapter/InspectAdapter.java b/app/src/main/java/com/dayu/pipirrapp/adapter/InspectAdapter.java new file mode 100644 index 0000000..a8c74b3 --- /dev/null +++ b/app/src/main/java/com/dayu/pipirrapp/adapter/InspectAdapter.java @@ -0,0 +1,92 @@ +package com.dayu.pipirrapp.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import com.dayu.pipirrapp.R; +import com.dayu.pipirrapp.activity.InspectDetailActivity; +import com.dayu.pipirrapp.activity.InspectListActivity; +import com.dayu.pipirrapp.bean.net.InspectResult; +import com.dayu.pipirrapp.databinding.ItemInspectBinding; +import com.dayu.pipirrapp.databinding.ItemNoMoreBinding; + +import java.util.List; + +public class InspectAdapter extends BaseRecyclerAdapter<RecyclerView.ViewHolder> { + private InspectListActivity activity; + private List<InspectResult> list; + + public InspectAdapter(InspectListActivity activity, List<InspectResult> list) { + this.activity = activity; + this.list = list; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + if (viewType == VIEW_TYPE_EMPTY) { + ItemNoMoreBinding emptyView = DataBindingUtil.inflate((LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE), + R.layout.item_no_more, parent, false); + return new BaseRecyclerAdapter.ViewHolderEmpty(emptyView); + } else { + ItemInspectBinding binding = DataBindingUtil.inflate((LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE), + R.layout.item_inspect, parent, false); + return new ViewHolder(binding); + } + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + if (holder instanceof ViewHolder && list != null && list.size() > 0) { + InspectResult item = list.get(position); + ViewHolder viewHolder = (ViewHolder) holder; + viewHolder.binding.tvInspectId.setText("宸℃ID: " + item.getInspectId()); + viewHolder.binding.tvStartTime.setText("寮�濮嬫椂闂�: " + item.getStartTime()); + viewHolder.binding.tvStopTime.setText("缁撴潫鏃堕棿: " + item.getStopTime()); + viewHolder.binding.tvInspectDistance.setText("宸℃璺濈: " + item.getInspectDistance()+" KM"); + + // 娣诲姞鐐瑰嚮浜嬩欢 + viewHolder.itemView.setOnClickListener(v -> { + android.content.Intent intent = new android.content.Intent(activity, InspectDetailActivity.class); + intent.putExtra("inspectId", item.getInspectId()); + activity.startActivity(intent); + }); + } + } + + @Override + public int getItemCount() { + if (list != null) { + if (list.size() == 0) { + return 1; + } + return list.size(); + } + return 1; + } + + @Override + public int getItemViewType(int position) { + if (list != null) { + if (list.size() == 0) { + return VIEW_TYPE_EMPTY; + } + return VIEW_TYPE_ITEM; + } + return VIEW_TYPE_EMPTY; + } + + static class ViewHolder extends RecyclerView.ViewHolder { + ItemInspectBinding binding; + + public ViewHolder(ItemInspectBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/db/SearchResultBean.java b/app/src/main/java/com/dayu/pipirrapp/bean/db/SearchResultBean.java new file mode 100644 index 0000000..d9cefc2 --- /dev/null +++ b/app/src/main/java/com/dayu/pipirrapp/bean/db/SearchResultBean.java @@ -0,0 +1,70 @@ +package com.dayu.pipirrapp.bean.db; + +/** + * 鎼滅储缁撴灉Bean + */ +public class SearchResultBean { + private String name; // 鍚嶇О + private String type; // 绫诲瀷锛歞ivide-鍒嗘按鎴匡紝marker-鍙栨按鍙� + private String lat; // 绾害 + private String lng; // 缁忓害 + private String address; // 鍦板潃 + private String id; // ID + + public SearchResultBean(String name, String type, String lat, String lng, String address, String id) { + this.name = name; + this.type = type; + this.lat = lat; + this.lng = lng; + this.address = address; + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectListResult.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectListResult.java new file mode 100644 index 0000000..9495fb1 --- /dev/null +++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectListResult.java @@ -0,0 +1,59 @@ +package com.dayu.pipirrapp.bean.net; + +import java.util.List; + +/** + * InspectListResult - + * + * @author zuoxiao + * @version 1.0 + * @since 2025-02-18 + */ +public class InspectListResult { + + int itemTotal; + int pageCurr; + int pageSize; + int pageTotal; + List<InspectResult> obj; + + public int getItemTotal() { + return itemTotal; + } + + public void setItemTotal(int itemTotal) { + this.itemTotal = itemTotal; + } + + public int getPageCurr() { + return pageCurr; + } + + public void setPageCurr(int pageCurr) { + this.pageCurr = pageCurr; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageTotal() { + return pageTotal; + } + + public void setPageTotal(int pageTotal) { + this.pageTotal = pageTotal; + } + + public List<InspectResult> getObj() { + return obj; + } + + public void setObj(List<InspectResult> obj) { + this.obj = obj; + } +} 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 new file mode 100644 index 0000000..ba14340 --- /dev/null +++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectResult.java @@ -0,0 +1,89 @@ +package com.dayu.pipirrapp.bean.net; + +import java.util.List; + +/** + * InspectResult - + * + * @author zuoxiao + * @version 1.0 + * @since 2025-02-19 + */ +public class InspectResult { + + private String inspectorId; // 宸℃鍛業D + private String inspectorName; // 宸℃鍛樺鍚� + private String inspectId; // 宸℃ID + private String startTime; // 寮�濮嬫椂闂� + private String stopTime; // 缁撴潫鏃堕棿 + private Double inspectDistance; // 宸℃璺濈 + private List<String> tracks; // 宸℃鑺傜偣鍒楄〃 + + // 鏋勯�犲嚱鏁� + public InspectResult(String inspectorId, String inspectorName, String inspectId, String startTime, String stopTime, Double inspectDistance, List<String> tracks) { + this.inspectorId = inspectorId; + this.inspectorName = inspectorName; + this.inspectId = inspectId; + this.startTime = startTime; + this.stopTime = stopTime; + this.inspectDistance = inspectDistance; + this.tracks = tracks; + } + + // Getter 鍜� Setter 鏂规硶 + public String getInspectorId() { + return inspectorId; + } + + public void setInspectorId(String inspectorId) { + this.inspectorId = inspectorId; + } + + public String getInspectorName() { + return inspectorName; + } + + public void setInspectorName(String inspectorName) { + this.inspectorName = inspectorName; + } + + public String getInspectId() { + return inspectId; + } + + public void setInspectId(String inspectId) { + this.inspectId = inspectId; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getStopTime() { + return stopTime; + } + + public void setStopTime(String stopTime) { + this.stopTime = stopTime; + } + + public Double getInspectDistance() { + return inspectDistance; + } + + public void setInspectDistance(Double inspectDistance) { + this.inspectDistance = inspectDistance; + } + + public List<String> getTracks() { + return tracks; + } + + public void setTracks(List<String> tracks) { + this.tracks = tracks; + } +} diff --git a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java index 8903dff..be79f76 100644 --- a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java +++ b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java @@ -9,7 +9,10 @@ import com.dayu.pipirrapp.bean.db.InspectionBean; +import java.util.List; + import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Single; @@ -41,4 +44,11 @@ @Query("SELECT * FROM InspectionBean WHERE mInspectId =:mInspectId ORDER BY startTime DESC LIMIT 1") Single<InspectionBean> findBymInspectId(String mInspectId); + + /** + * 鑾峰彇鎵�鏈夊贰妫�璁板綍 + * @return + */ + @Query("SELECT * FROM InspectionBean ORDER BY startTime DESC LIMIT 1") + Maybe<List<InspectionBean>> findAll(); } diff --git a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java index efb9a3a..1f87eb9 100644 --- a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java +++ b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java @@ -38,7 +38,14 @@ //鏌ヨ鎵�鏈夎宸℃id鐨勫潗鏍� @Query("select * from InspectionLocationBean where mInspectId=:mInspectId ORDER BY locateTime ASC") - Single<List<InspectionLocationBean>> findByInspectId(String mInspectId); + Single<List<InspectionLocationBean>> findBymInspectId(String mInspectId); + + + //鏌ヨ鎵�鏈夎宸℃id鐨勫潗鏍� + @Query("select * from InspectionLocationBean where InspectId=:inspectId ORDER BY locateTime ASC") + Single<List<InspectionLocationBean>> findByInspectId(String inspectId); + + //鏌ヨ鎵�鏈夋湭涓婁紶鐨刴InspectId @Query("SELECT DISTINCT mInspectId FROM InspectionLocationBean WHERE isPost = false") 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 e01d39b..82ab38e 100644 --- a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java +++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java @@ -84,9 +84,6 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.schedulers.Schedulers; -import kotlin.Triple; -import kotlin.Unit; -import kotlin.jvm.functions.Function1; /** * author: zuo diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java index 4f63ea2..7218451 100644 --- a/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java +++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java @@ -12,6 +12,7 @@ import androidx.annotation.Nullable; import com.dayu.pipirrapp.activity.ChangePSActivity; +import com.dayu.pipirrapp.activity.InspectListActivity; import com.dayu.pipirrapp.activity.IssueListActivity; import com.dayu.pipirrapp.activity.LoginActivity; import com.dayu.pipirrapp.bean.db.LoginBean; @@ -95,10 +96,14 @@ Intent intent = new Intent(MyFragment.this.getContext(), IssueListActivity.class); MyFragment.this.getActivity().startActivity(intent); }); - binding.refreshDataTV.setOnClickListener(v->{ + binding.refreshDataTV.setOnClickListener(v -> { // 鍙戦�佸埛鏂颁簨浠堕�氱煡MapFragment鍒锋柊鏁版嵁 LiveEventBus.get(CommonKeyName.refreshData).post(true); }); + binding.inspectListRL.setOnClickListener(v -> { + Intent intent = new Intent(MyFragment.this.getContext(), InspectListActivity.class); + MyFragment.this.getActivity().startActivity(intent); + }); } private void initData() { diff --git a/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java b/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java index 645aff0..0da7abd 100644 --- a/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java +++ b/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java @@ -76,7 +76,7 @@ .observeOn(Schedulers.io()).subscribe(inspectionBean -> { fragment.mInspectionBean = inspectionBean; // 鏌ヨ褰撳墠鏈叧闂殑宸℃璁板綍涓嬫墍鏈夌殑鍧愭爣 - DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionLocationDao().findByInspectId(inspectionBean.getmInspectId()).subscribeOn(Schedulers.io()) + DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionLocationDao().findBymInspectId(inspectionBean.getmInspectId()).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()).subscribe(inspectionLocationBeans -> { fragment.aginShowLocation(inspectionLocationBeans); }); diff --git a/app/src/main/java/com/dayu/pipirrapp/utils/CommonData.java b/app/src/main/java/com/dayu/pipirrapp/utils/CommonData.java index e5e2620..04f7cf8 100644 --- a/app/src/main/java/com/dayu/pipirrapp/utils/CommonData.java +++ b/app/src/main/java/com/dayu/pipirrapp/utils/CommonData.java @@ -7,14 +7,16 @@ * 澶囨敞锛氬叕鍏卞弬鏁� */ public class CommonData { - //澶╁湴鍥� - public static String webKey = "d8beed89b43160a9a185e5aff431f85d"; - public static String androidKey = "4dace6fd6dad43a9bc08d1ed94ec28d8"; - + //澶╁湴鍥続PI瀵嗛挜 + public static String webKey = "d8beed89b43160a9a185e5aff431f85d"; // Web绔娇鐢ㄧ殑瀵嗛挜 + public static String androidKey = "4dace6fd6dad43a9bc08d1ed94ec28d8"; // Android绔娇鐢ㄧ殑瀵嗛挜 + + // 鑾峰彇褰撳墠浣跨敤鐨勫瘑閽� + public static String getCurrentMapKey() { + return androidKey; // 鍦ˋndroid搴旂敤涓紭鍏堜娇鐢╝ndroidKey + } public final static String NoTag = "-1"; public final static int TestTag = 0; public final static int YuanMouTag = 1; - - } diff --git a/app/src/main/res/drawable/ic_pipenetwork_line.xml b/app/src/main/res/drawable/ic_pipenetwork_line.xml index a60a4c1..0bc1ca2 100644 --- a/app/src/main/res/drawable/ic_pipenetwork_line.xml +++ b/app/src/main/res/drawable/ic_pipenetwork_line.xml @@ -1,12 +1,12 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - android:height="2dp" + android:height="1dp" android:viewportWidth="24" - android:viewportHeight="2"> + android:viewportHeight="1"> <path - android:pathData="M0,1L24,1" - android:strokeWidth="2" + android:pathData="M0,0.5L24,0.5" + android:strokeWidth="1" android:strokeColor="#1890FF" android:strokeLineCap="round"/> </vector> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_inspect_detail.xml b/app/src/main/res/layout/activity_inspect_detail.xml new file mode 100644 index 0000000..b19595d --- /dev/null +++ b/app/src/main/res/layout/activity_inspect_detail.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <include + android:id="@+id/title" + layout="@layout/top_title" /> + + <WebView + android:id="@+id/InspectWebView" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_below="@+id/title" /> +</RelativeLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_inspect_list.xml b/app/src/main/res/layout/activity_inspect_list.xml new file mode 100644 index 0000000..f16090c --- /dev/null +++ b/app/src/main/res/layout/activity_inspect_list.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="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <include + android:id="@+id/title" + layout="@layout/top_title" /> + + <com.scwang.smart.refresh.layout.SmartRefreshLayout + android:id="@+id/refresh_layout" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/recycler_view" + android:layout_width="match_parent" + + android:layout_height="match_parent" + android:padding="10dp" /> + + </com.scwang.smart.refresh.layout.SmartRefreshLayout> + +</LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_search_result.xml b/app/src/main/res/layout/dialog_search_result.xml index 3711c14..82e4a40 100644 --- a/app/src/main/res/layout/dialog_search_result.xml +++ b/app/src/main/res/layout/dialog_search_result.xml @@ -13,7 +13,6 @@ android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:divider="@android:color/darker_gray" android:dividerHeight="0.5dp" android:maxHeight="300dp" /> diff --git a/app/src/main/res/layout/fragment_my.xml b/app/src/main/res/layout/fragment_my.xml index 6478c63..de9e5b5 100644 --- a/app/src/main/res/layout/fragment_my.xml +++ b/app/src/main/res/layout/fragment_my.xml @@ -102,13 +102,37 @@ android:layout_marginRight="15dp" android:src="@drawable/ic_right" /> </RelativeLayout> + <RelativeLayout + android:id="@+id/inspectListRL" + android:layout_width="match_parent" + android:layout_height="@dimen/item_height" + android:layout_below="@+id/issueListRL"> + <TextView + android:layout_width="match_parent" + android:layout_height="@dimen/item_height" + android:background="@color/white" + android:gravity="center_vertical" + android:paddingLeft="30dp" + android:text="宸℃璁板綍" + android:layout_marginTop="1dp" + android:textColor="@color/black" + android:textSize="@dimen/my_item_text_size" /> + + <ImageView + android:layout_width="25dp" + android:layout_height="25dp" + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:layout_marginRight="15dp" + android:src="@drawable/ic_right" /> + </RelativeLayout> <RelativeLayout android:id="@+id/passwordRL" android:layout_width="match_parent" android:layout_height="@dimen/item_height" - android:layout_below="@+id/issueListRL" + android:layout_below="@+id/inspectListRL" android:layout_marginTop="1dp"> <TextView diff --git a/app/src/main/res/layout/item_inspect.xml b/app/src/main/res/layout/item_inspect.xml new file mode 100644 index 0000000..bdbaecf --- /dev/null +++ b/app/src/main/res/layout/item_inspect.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:android="http://schemas.android.com/apk/res/android"> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="5dp" + android:background="@drawable/ic_choose_gray_edge" + android:orientation="vertical" + android:padding="16dp"> + + <TextView + android:id="@+id/tv_inspect_id" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="#333333" + android:textSize="16sp" /> + + <TextView + android:id="@+id/tv_start_time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:textColor="#666666" + android:textSize="14sp" /> + + <TextView + android:id="@+id/tv_stop_time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:textColor="#666666" + android:textSize="14sp" /> + + <TextView + android:id="@+id/tv_inspectDistance" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:textColor="#666666" + android:textSize="14sp" /> + + </LinearLayout> +</layout> \ No newline at end of file -- Gitblit v1.8.0