app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java
@@ -345,7 +345,7 @@ if (uplodFileState != null) { path = uplodFileState.getFilePath(); try { Call<BaseResponse> mCall = uplodFileStates.get(path).getThisCall(); Call mCall = uplodFileStates.get(path).getThisCall(); if (mCall != null) { mCall.cancel(); MyLog.d("progressRequestBody>>>" + "cancel》》》path:" + path); app/src/main/java/com/dayu/pipirrapp/activity/IssueDetailActivity.java
@@ -108,6 +108,7 @@ ImageInfo info = new ImageInfo(); info.setOriginUrl(imageResult.getWebPath()); info.setType(Type.IMAGE); info.setThumbnailUrl(imageResult.getWebPathZip()); imageInfoList.add(info); } } @@ -120,6 +121,8 @@ images.add(imageBean); ImageInfo info = new ImageInfo(); info.setOriginUrl(imageResult.getWebPath()); info.setThumbnailUrl(imageResult.getWebPath()); info.setThumbnailUrl(imageResult.getWebPathZip()); info.setType(Type.VIDEO); imageInfoList.add(info); } app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -339,7 +339,7 @@ if (uplodFileState != null) { path = uplodFileState.getFilePath(); try { Call<BaseResponse> mCall = uplodFileStates.get(path).getThisCall(); Call mCall = uplodFileStates.get(path).getThisCall(); if (mCall != null) { mCall.cancel(); MyLog.d("progressRequestBody>>>" + "cancel》》》path:" + path); app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java
@@ -30,6 +30,7 @@ import com.dayu.pipirrapp.net.BaseResponse; import com.dayu.pipirrapp.net.Constants; import com.dayu.pipirrapp.net.subscribers.SubscriberListener; import com.dayu.pipirrapp.tool.BigimageUtils; import com.dayu.pipirrapp.tool.FullyGridLayoutManager; import com.dayu.pipirrapp.utils.CommonKeyName; import com.dayu.pipirrapp.utils.ToastUtil; @@ -124,7 +125,7 @@ // 添加间距装饰,确保图片有合适的间隔 mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4, DensityUtil.dip2px(this, 8), false)); mAdapter = new ImageAdapter(this, images, (v, position) -> { ImagePreview.getInstance().with(OrderDetailActivity.this).setIndex(position).setMediaInfoList(imageInfoList).start(); BigimageUtils.showImages(this, position, imageInfoList); }); mRecyclerView.setAdapter(mAdapter); @@ -225,26 +226,29 @@ if (!t.getContent().getImages().isEmpty()){ for (ImageResult imageResult:t.getContent().getImages()){ ImageBean imageBean=new ImageBean(); ImageBean imageBean = new ImageBean(); imageBean.setId(imageResult.getId()); imageBean.setWebPath(imageResult.getWebPath()); imageBean.setType(UplodFileState.IMG_TYPE); images.add(imageBean); ImageInfo info=new ImageInfo(); ImageInfo info = new ImageInfo(); info.setOriginUrl(imageResult.getWebPath()); info.setType(Type.IMAGE); info.setThumbnailUrl(imageResult.getWebPathZip()); imageInfoList.add(info); } } if (!t.getContent().getVideos().isEmpty()){ for (ImageResult imageResult:t.getContent().getVideos()){ ImageBean imageBean=new ImageBean(); ImageBean imageBean = new ImageBean(); imageBean.setId(imageResult.getId()); imageBean.setWebPath(imageResult.getWebPath()); imageBean.setType(UplodFileState.VIDEO_TYPE); images.add(imageBean); ImageInfo info=new ImageInfo(); ImageInfo info = new ImageInfo(); info.setOriginUrl(imageResult.getWebPath()); info.setThumbnailUrl(imageResult.getWebPath()); info.setThumbnailUrl(imageResult.getWebPathZip()); info.setType(Type.VIDEO); imageInfoList.add(info); } app/src/main/java/com/dayu/pipirrapp/bean/db/DivideBean.java
@@ -47,17 +47,17 @@ /** * 编号 */ private int id; private String id; /** * 纬度 */ private double lat; private String lat; /** * 经度 */ private double lng; private String lng; /** * 操作时间 @@ -147,27 +147,27 @@ this.header = header; } public int getId() { public String getId() { return id; } public void setId(int id) { public void setId(String id) { this.id = id; } public double getLat() { public String getLat() { return lat; } public void setLat(double lat) { public void setLat(String lat) { this.lat = lat; } public double getLng() { public String getLng() { return lng; } public void setLng(double lng) { public void setLng(String lng) { this.lng = lng; } app/src/main/java/com/dayu/pipirrapp/bean/net/AddIssueRequest.java
@@ -57,11 +57,12 @@ images.clear(); for (UplodFileState data : states.values()) { ImageRequest image = new ImageRequest(); image.setWebPath(data.getWebPath()); image.setFilePath(data.getUoloadFilePath()); image.setId(data.getPostId()); if (data.getUploadType()==UplodFileState.IMG_TYPE){ image.setHash(data.getHash()); if (data.getUploadType() == UplodFileState.IMG_TYPE) { images.add(image); }else { } else { videos.add(image); } app/src/main/java/com/dayu/pipirrapp/bean/net/AddProcessingRequest.java
@@ -78,11 +78,12 @@ images.clear(); for (UplodFileState data : states.values()) { ImageRequest image = new ImageRequest(); image.setWebPath(data.getWebPath()); image.setFilePath(data.getUoloadFilePath()); image.setId(data.getPostId()); if (data.getUploadType()==UplodFileState.IMG_TYPE){ image.setHash(data.getHash()); if (data.getUploadType() == UplodFileState.IMG_TYPE) { images.add(image); }else { } else { videos.add(image); } app/src/main/java/com/dayu/pipirrapp/bean/net/ImageRequest.java
@@ -9,7 +9,24 @@ */ public class ImageRequest { String id; String webPath; String filePath; int hash; public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } public int getHash() { return hash; } public void setHash(int hash) { this.hash = hash; } public String getId() { return id; @@ -19,11 +36,5 @@ this.id = id; } public String getWebPath() { return webPath; } public void setWebPath(String webPath) { this.webPath = webPath; } } app/src/main/java/com/dayu/pipirrapp/bean/net/ImageResult.java
@@ -10,6 +10,15 @@ public class ImageResult { String id; String webPath; String webPathZip; public String getWebPathZip() { return webPathZip; } public void setWebPathZip(String webPathZip) { this.webPathZip = webPathZip; } public String getId() { return id; app/src/main/java/com/dayu/pipirrapp/bean/net/UploadFileResult.java
New file @@ -0,0 +1,113 @@ package com.dayu.pipirrapp.bean.net; /** * uploadFileResult -> 上传文件结果 * * @author zuoxiao * @version 1.0 * @since 2025-01-14 */ public class UploadFileResult { // 文件下载web路径 private String downloadPath; // 文件扩展名 private String extName; // 文件在服务端存储相对路径 private String filePath; // 文件的哈希值 private int hash; // 文件id(数据库记录ID ) private String id; // 文件原始名称 private String orgName; // 文件web路径(在浏览器中直接显示) private String webPath; // 照片或视频的缩略图web路径(在浏览器中直接显示) private String webPathZip; // 构造函数 public UploadFileResult(String downloadPath, String extName, String filePath, int hash, String id, String orgName, String webPath, String webPathZip) { this.downloadPath = downloadPath; this.extName = extName; this.filePath = filePath; this.hash = hash; this.id = id; this.orgName = orgName; this.webPath = webPath; this.webPathZip = webPathZip; } // Getter和Setter方法 public String getDownloadPath() { return downloadPath; } public void setDownloadPath(String downloadPath) { this.downloadPath = downloadPath; } public String getExtName() { return extName; } public void setExtName(String extName) { this.extName = extName; } public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } public int getHash() { return hash; } public void setHash(int hash) { this.hash = hash; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getOrgName() { return orgName; } public void setOrgName(String orgName) { this.orgName = orgName; } public String getWebPath() { return webPath; } public void setWebPath(String webPath) { this.webPath = webPath; } public String getWebPathZip() { return webPathZip; } public void setWebPathZip(String webPathZip) { this.webPathZip = webPathZip; } } app/src/main/java/com/dayu/pipirrapp/bean/net/UplodFileState.java
@@ -32,9 +32,16 @@ //上传后的id String postId; //上传后的地址 String webPath; // String webPath; //上传后返回的文件在服务端存储相对路径 String uoloadFilePath; //上传后的哈希值 int hash; //上传后的缩略图 String webPathZip; //当前请求 Call<BaseResponse> thisCall; Call<BaseResponse<UploadFileResult>> thisCall; //图片上传进度 int progress; //adapter中的position @@ -43,6 +50,30 @@ int uploadType; //扩展名 String extName; public String getUoloadFilePath() { return uoloadFilePath; } public void setUoloadFilePath(String uoloadFilePath) { this.uoloadFilePath = uoloadFilePath; } public int getHash() { return hash; } public void setHash(int hash) { this.hash = hash; } public String getWebPathZip() { return webPathZip; } public void setWebPathZip(String webPathZip) { this.webPathZip = webPathZip; } public String getExtName() { return extName; @@ -77,11 +108,11 @@ } public Call<BaseResponse> getThisCall() { public Call<BaseResponse<UploadFileResult>> getThisCall() { return thisCall; } public void setThisCall(Call<BaseResponse> thisCall) { public void setThisCall(Call<BaseResponse<UploadFileResult>> thisCall) { this.thisCall = thisCall; } @@ -121,11 +152,5 @@ this.postId = postId; } public String getWebPath() { return webPath; } public void setWebPath(String webPath) { this.webPath = webPath; } } app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -26,11 +26,13 @@ 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.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; @@ -100,8 +102,11 @@ List<InspectionLocationBean> aginShowlocationBeans; //web加载时网页还没加载完时的数据 List<MarkerBean> webNoFinishMarkerData = new ArrayList<>(); List<DivideBean> webNoFinishDivideData = new ArrayList<>(); //所有的Marker数据键为marker的Id Map<String, MarkerBean> markerBeanSet = new HashMap<>(); //所有分水房 Map<String, DivideBean> divideBeanMap = new HashMap<>(); //中心点坐标 public double centerLng; public double centerLat; @@ -573,6 +578,28 @@ } } /** * 添加取水口标注 */ public void setDivide(DivideBean divide) { if (divide != null) { if (webViewIsFinished) { if (!TextUtils.isEmpty(divide.getLng()) && !TextUtils.isEmpty(divide.getLat())) { mWebView.evaluateJavascript("javascript:addMarker(\"" + 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("setMapMarker>" + divide.getDivideName() + "经纬度为空"); } } else { webNoFinishDivideData.add(divide); } } } /** * 开始巡检的相关逻辑 @@ -761,25 +788,34 @@ * 获取分水房 */ private void getDivideList() { ApiManager.getInstance().requestPost(MapFragment.this.getContext(), BASE_URL + "/project/divide/getDivides", DivideResult.class, null, new SubscriberListener<BaseResponse<DivideResult>>() { ApiManager.getInstance().requestPost(MapFragment.this.getContext(), BASE_URL + "/project/divide/getDivides", DivideListResult.class, null, new SubscriberListener<BaseResponse<DivideListResult>>() { @Override public void onNext(BaseResponse<DivideResult> t) { public void onNext(BaseResponse<DivideListResult> t) { try { if (t.isSuccess()) { // if (t.getContent().) // // // // 使用 RxJava 异步插入数据 // DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll() // .subscribeOn(Schedulers.io()) // 在 IO 线程上执行 // .observeOn(AndroidSchedulers.mainThread()) // 在主线程上观察 // .subscribe(() -> { // // 插入成功 // Log.i("mWebView", "数据插入成功"); // }, throwable -> { // // 插入失败 // Log.e("mWebView", "数据插入失败: " + throwable.getMessage()); // }); if (t.getContent().getObj() != null && t.getContent().getObj().isEmpty()) { List<DivideBean> divideBeans = new ArrayList<>(); for (DivideResult divideResult : t.getContent().getObj()) { DivideBean divideBean = getDivideBean(divideResult); 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()); } @@ -792,6 +828,30 @@ }); } /** * @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()); divideBean.setDivideName(divideResult.getDivideName()); divideBean.setHeader(divideResult.getHeader()); divideBean.setId(String.valueOf(divideResult.getId())); divideBean.setLat(String.valueOf(divideResult.getLat())); divideBean.setLng(String.valueOf(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; } @Override public void onDestroy() { app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
@@ -17,6 +17,7 @@ import com.dayu.pipirrapp.bean.net.CodeResult; import com.dayu.pipirrapp.bean.net.UplodFileState; import com.dayu.pipirrapp.bean.net.WeatherResponse; import com.dayu.pipirrapp.bean.net.UploadFileResult; import com.dayu.pipirrapp.net.subscribers.BaseProgressSubscriber; import com.dayu.pipirrapp.net.subscribers.CodeListener; import com.dayu.pipirrapp.net.subscribers.ProgressSubscriber; @@ -28,7 +29,6 @@ import com.dayu.pipirrapp.utils.MyJsonParser; import com.dayu.pipirrapp.utils.MyLog; import com.dayu.pipirrapp.utils.NetUtils; import com.google.gson.internal.LinkedTreeMap; import java.io.File; import java.util.HashMap; @@ -332,7 +332,7 @@ }); MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), progressRequestBody); RequestBody description = RequestBody.create(MediaType.parse("text/plain"), "file description"); Call<BaseResponse> uploadFile = null; Call<BaseResponse<UploadFileResult>> uploadFile = null; switch (uplodData.getUploadType()) { case UplodFileState.IMG_TYPE: uploadFile = apiService.uploadImgFile(body, description); @@ -346,14 +346,17 @@ } uplodData.setThisCall(uploadFile); uploadFile.enqueue(new Callback<BaseResponse>() { uploadFile.enqueue(new Callback<BaseResponse<UploadFileResult>>() { @Override public void onResponse(Call<BaseResponse> call, Response<BaseResponse> response) { public void onResponse(Call<BaseResponse<UploadFileResult>> call, Response<BaseResponse<UploadFileResult>> response) { if (response.body() != null) { if (response.body().isSuccess()) { UploadFileResult uploadFileResult=response.body().getContent(); uplodData.setState(STATE_DONE); uplodData.setPostId(((LinkedTreeMap) response.body().getContent()).get("id").toString()); uplodData.setWebPath(((LinkedTreeMap) response.body().getContent()).get("webPath").toString()); uplodData.setPostId(uploadFileResult.getId()); uplodData.setUoloadFilePath(uploadFileResult.getFilePath()); uplodData.setHash(uploadFileResult.getHash()); uplodData.setWebPathZip(uploadFileResult.getWebPathZip()); listener.onBack(uplodData); } else { MyLog.d("progressRequestBody>>>" + response.body().getMsg()); @@ -371,7 +374,7 @@ } @Override public void onFailure(Call<BaseResponse> call, Throwable t) { public void onFailure(Call<BaseResponse<UploadFileResult>> call, Throwable t) { MyLog.d("progressRequestBody>>>" + "onFailure:" + t.getMessage()); if (!t.getMessage().equals("Canceled")) { uplodData.setState(STATE_ERROR); app/src/main/java/com/dayu/pipirrapp/net/ApiService.java
@@ -3,6 +3,7 @@ import com.dayu.pipirrapp.bean.net.CodeResult; import com.dayu.pipirrapp.bean.net.WeatherResponse; import com.dayu.pipirrapp.bean.net.UploadFileResult; import java.util.Map; @@ -59,11 +60,11 @@ @Multipart @POST(Constants.BASE_UPLOAD_FILE_URL + "/app/webFile/upPhoto") Call<BaseResponse> uploadImgFile(@Part MultipartBody.Part file, @Part("description") RequestBody description); Call<BaseResponse<UploadFileResult>> uploadImgFile(@Part MultipartBody.Part file, @Part("description") RequestBody description); @Multipart @POST(Constants.BASE_UPLOAD_FILE_URL + "/app/webFile/upVideo") Call<BaseResponse> uploadVideoFile(@Part MultipartBody.Part file, @Part("description") RequestBody description); Call<BaseResponse<UploadFileResult>> uploadVideoFile(@Part MultipartBody.Part file, @Part("description") RequestBody description); //获取验证码 @GET(Constants.BASE_URL + "/app/captcha/get") app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java
@@ -50,7 +50,7 @@ public static void cancelAllCall(Map<String, UplodFileState> uplodFileStates) { try { for (UplodFileState uplodFileState : uplodFileStates.values()) { Call<BaseResponse> mCall = uplodFileState.getThisCall(); Call mCall = uplodFileState.getThisCall(); if (mCall != null) { mCall.cancel(); } app/src/main/res/layout/activity_add_issue.xml
@@ -59,7 +59,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交图片:" android:text="提交图片或视频:" android:textColor="@color/black" android:textSize="@dimen/order_detail_button_size" /> </LinearLayout> app/src/main/res/layout/activity_issue_detail.xml
@@ -180,7 +180,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上报图片:" android:text="上报图片或视频:" android:textColor="@color/item_name_text_color" android:textSize="@dimen/order_detail_text_size" /> app/src/main/res/layout/activity_order_deal.xml
@@ -82,7 +82,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交图片:" android:text="提交图片或视频:" android:textColor="@color/black" android:textSize="@dimen/order_detail_button_size" /> </LinearLayout> app/src/main/res/layout/activity_order_detail.xml
@@ -395,7 +395,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="反馈图片:" android:text="反馈图片或视频:" android:textColor="@color/item_name_text_color" android:textSize="@dimen/order_detail_text_size" />