From 3ac1a2854f23f61c61e537ea6a7add0c9a70438e Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 02 十二月 2024 15:28:15 +0800
Subject: [PATCH] 1.上传巡检定位点相关功能 2.上传文件相关
---
app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java | 36 +
app/src/main/java/com/dayu/pipirrapp/dao/DaoSingleton.java | 4
app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java | 1
app/src/main/assets/js/map.js | 6
app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java | 186 +++++++++
app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java | 1
app/src/main/res/layout/activity_order_deal.xml | 3
app/src/main/java/com/dayu/pipirrapp/MyApplication.java | 2
app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java | 5
app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java | 72 +++
app/src/main/java/com/dayu/pipirrapp/utils/DateUtils.java | 32 +
app/src/main/java/com/dayu/pipirrapp/bean/net/BaseRequest.java | 38 ++
app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java | 34 +
app/src/main/java/com/dayu/pipirrapp/dao/AppDatabase.java | 9
app/build.gradle | 1
app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java | 2
app/src/main/java/com/dayu/pipirrapp/view/TitleBar.java | 6
app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java | 59 +++
app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java | 2
app/src/main/java/com/dayu/pipirrapp/bean/net/UplodFileState.java | 56 ++
app/src/main/java/com/dayu/pipirrapp/view/TagDialog.java | 1
app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java | 29
app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java | 112 +++++
app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressListener.java | 5
app/src/main/java/com/dayu/pipirrapp/net/upload/UploadFileListener.java | 14
app/src/main/java/com/dayu/pipirrapp/tool/FullyGridLayoutManager.java | 2
app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java | 1
app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressRequestBody.java | 53 ++
app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java | 6
app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java | 46 ++
app/src/main/java/com/dayu/pipirrapp/bean/net/InspectionRequest.java | 104 +++++
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java | 176 +++++++-
app/src/main/java/com/dayu/pipirrapp/net/ApiService.java | 4
33 files changed, 1,022 insertions(+), 86 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index d407df2..023987e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -173,6 +173,7 @@
implementation "androidx.room:room-ktx:2.3.0"
runtimeOnly("androidx.room:room-common:2.3.0")
annotationProcessor "androidx.room:room-compiler:2.3.0"
+ implementation "androidx.room:room-rxjava3:2.3.0"
//鍥剧墖
implementation 'com.github.bumptech.glide:glide:4.11.0'
diff --git a/app/src/main/assets/js/map.js b/app/src/main/assets/js/map.js
index a574c9c..4dc5294 100644
--- a/app/src/main/assets/js/map.js
+++ b/app/src/main/assets/js/map.js
@@ -275,15 +275,15 @@
function updateLocation(log,lat){
var lastLat=lat;
- const intervalId = setInterval(() => {
- lastLat=lastLat+0.0001;
+ // const intervalId = setInterval(() => {
+ // lastLat=lastLat+0.0001;
var newPoint = new T.LngLat(log,lastLat);
path.push(newPoint);
lineLayer.setLngLats(path);
map.addOverLay(lineLayer);
// 绉诲姩鍦板浘瑙嗚鍒版渶鍚庝竴涓綅缃�
map.panTo(newPoint);
- }, 500);
+ // }, 500);
}
diff --git a/app/src/main/java/com/dayu/pipirrapp/MyApplication.java b/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
index d51ea9d..d0d67aa 100644
--- a/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
+++ b/app/src/main/java/com/dayu/pipirrapp/MyApplication.java
@@ -16,10 +16,12 @@
*/
public class MyApplication extends Application {
public static MyApplication myApplication;
+ //鏁版嵁搴撶殑tag鍊�
public String myTag = "-1";
public String token;
public String userId;
+
@Override
public void onCreate() {
super.onCreate();
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
index 4201472..8e62470 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
@@ -27,7 +27,6 @@
import com.dayu.pipirrapp.net.BaseResponse;
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
import com.dayu.pipirrapp.observer.LoginObserver;
-import com.dayu.pipirrapp.utils.CommonData;
import com.dayu.pipirrapp.utils.CommonKeyName;
import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
import com.dayu.pipirrapp.utils.ToastUtil;
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
index 4d3180b..2976fb0 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
@@ -9,8 +9,11 @@
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
+import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.adapter.TabAdapter;
+import com.dayu.pipirrapp.bean.db.TagBean;
+import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.databinding.ActivityMainBinding;
import com.dayu.pipirrapp.fragment.OrderFragment;
import com.dayu.pipirrapp.fragment.MapFragment;
@@ -42,6 +45,9 @@
setupFragments();
initView();
initTab();
+
+ TagBean tagBean = DaoSingleton.getInstance(this).tagDao().findFirst();
+ MyApplication.myApplication.myTag = tagBean.getTag();
mqttManager = new MqttManager(this);
mqttManager.connect();
}
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 fb91e02..cebbdd9 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -1,14 +1,15 @@
package com.dayu.pipirrapp.activity;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
-import android.provider.MediaStore;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.SimpleItemAnimator;
@@ -17,20 +18,31 @@
import com.dayu.pipirrapp.databinding.ActivityOrderDealBinding;
import com.dayu.pipirrapp.tool.FullyGridLayoutManager;
import com.dayu.pipirrapp.tool.GlideEngine;
+import com.dayu.pipirrapp.view.TitleBar;
import com.luck.picture.lib.basic.PictureSelectionModel;
import com.luck.picture.lib.basic.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
import com.luck.picture.lib.config.SelectMimeType;
-import com.luck.picture.lib.config.SelectModeConfig;
import com.luck.picture.lib.decoration.GridSpacingItemDecoration;
+import com.luck.picture.lib.engine.CompressFileEngine;
+import com.luck.picture.lib.engine.ImageEngine;
import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.interfaces.OnGridItemSelectAnimListener;
-import com.luck.picture.lib.interfaces.OnQueryFilterListener;
-import com.luck.picture.lib.interfaces.OnSelectAnimListener;
+import com.luck.picture.lib.entity.MediaExtraInfo;
+import com.luck.picture.lib.interfaces.OnExternalPreviewEventListener;
+import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener;
+import com.luck.picture.lib.utils.DateUtils;
import com.luck.picture.lib.utils.DensityUtil;
+import com.luck.picture.lib.utils.MediaUtils;
+import com.luck.picture.lib.utils.PictureFileUtils;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
+
+import top.zibin.luban.CompressionPredicate;
+import top.zibin.luban.Luban;
+import top.zibin.luban.OnNewCompressListener;
+import top.zibin.luban.OnRenameListener;
/**
* OrderDealDetailActivity -
@@ -41,24 +53,28 @@
* @since 2024-11-27
*/
public class OrderDealActivity extends BaseActivity {
-
+ private String TAG = "OrderDealActivity";
ActivityOrderDealBinding binding;
RecyclerView mRecyclerView;
AddPictureAdapter mAdapter;
int maxSelectNum = 10;//鏈�澶х収鐗�
int maxSelectVideoNum = 0;//鏈�澶ц棰�
private final List<LocalMedia> mData = new ArrayList<>();
+ private ActivityResultLauncher<Intent> launcherResult;
+ private ImageEngine imageEngine;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityOrderDealBinding.inflate(LayoutInflater.from(this));
setContentView(binding.getRoot());
+ launcherResult = createActivityResultLauncher();
initView();
}
void initView() {
+ new TitleBar(this).setTitleText("澶勭悊宸ュ崟").setLeftIco().setLeftIcoListening(v -> OrderDealActivity.this.finish());
mRecyclerView = binding.recycler;
FullyGridLayoutManager manager = new FullyGridLayoutManager(this,
4, GridLayoutManager.VERTICAL, false);
@@ -72,29 +88,171 @@
mAdapter = new AddPictureAdapter(this, mData);
mAdapter.setSelectMax(maxSelectNum + maxSelectVideoNum);
mRecyclerView.setAdapter(mAdapter);
+ imageEngine = GlideEngine.createGlideEngine();
mAdapter.setOnItemClickListener(new AddPictureAdapter.OnItemClickListener() {
@Override
public void onItemClick(View v, int position) {
-
+ // 棰勮鍥剧墖銆佽棰戙�侀煶棰�
+ PictureSelector.create(OrderDealActivity.this)
+ .openPreview()
+ .setImageEngine(imageEngine)
+ .setExternalPreviewEventListener(new MyExternalPreviewEventListener())
+ .startActivityPreview(position, true, mAdapter.getData());
}
@Override
public void openPicture() {
+ //娣诲姞鍥剧墖
mOpenPicture();
}
});
}
+ /**
+ * 娣诲姞鍥剧墖
+ */
private void mOpenPicture() {
// 杩涘叆鐩稿唽
PictureSelectionModel selectionModel = PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
.setMaxSelectNum(maxSelectNum)
.setMaxVideoSelectNum(maxSelectVideoNum)
- .setImageEngine(GlideEngine.createGlideEngine())
+ .setImageEngine(imageEngine)
+ //璁剧疆鍥剧墖鍘嬬缉
+ .setCompressEngine(new ImageFileCompressEngine())
.setSelectedData(mAdapter.getData());
- selectionModel.forResult(PictureConfig.CHOOSE_REQUEST);
+ selectionModel.forResult(launcherResult);
+ }
+
+ /**
+ * 鍒涘缓涓�涓狝ctivityResultLauncher
+ *
+ * @return
+ */
+ private ActivityResultLauncher<Intent> createActivityResultLauncher() {
+ return registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
+ result -> {
+ int resultCode = result.getResultCode();
+ if (resultCode == RESULT_OK) {
+ ArrayList<LocalMedia> selectList = PictureSelector.obtainSelectorList(result.getData());
+ analyticalSelectResults(selectList);
+ } else if (resultCode == RESULT_CANCELED) {
+ Log.i(TAG, "onActivityResult PictureSelector Cancel");
+ }
+ });
+ }
+
+ /**
+ * 澶栭儴棰勮鐩戝惉浜嬩欢
+ */
+ private class MyExternalPreviewEventListener implements OnExternalPreviewEventListener {
+
+ @Override
+ public void onPreviewDelete(int position) {
+ mAdapter.remove(position);
+ mAdapter.notifyItemRemoved(position);
+ }
+
+ @Override
+ public boolean onLongPressDownload(Context context, LocalMedia media) {
+ return false;
+ }
+ }
+
+ /**
+ * 澶勭悊閫夋嫨缁撴灉
+ *
+ * @param result
+ */
+ private void analyticalSelectResults(ArrayList<LocalMedia> result) {
+ for (LocalMedia media : result) {
+ if (media.getWidth() == 0 || media.getHeight() == 0) {
+ if (PictureMimeType.isHasImage(media.getMimeType())) {
+ MediaExtraInfo imageExtraInfo = MediaUtils.getImageSize(this, media.getPath());
+ media.setWidth(imageExtraInfo.getWidth());
+ media.setHeight(imageExtraInfo.getHeight());
+ } else if (PictureMimeType.isHasVideo(media.getMimeType())) {
+ MediaExtraInfo videoExtraInfo = MediaUtils.getVideoSize(this, media.getPath());
+ media.setWidth(videoExtraInfo.getWidth());
+ media.setHeight(videoExtraInfo.getHeight());
+ }
+ }
+ Log.i(TAG, "鏂囦欢鍚�: " + media.getFileName());
+ Log.i(TAG, "鏄惁鍘嬬缉:" + media.isCompressed());
+ Log.i(TAG, "鍘嬬缉:" + media.getCompressPath());
+ Log.i(TAG, "鍒濆璺緞:" + media.getPath());
+ Log.i(TAG, "缁濆璺緞:" + media.getRealPath());
+ Log.i(TAG, "鏄惁瑁佸壀:" + media.isCut());
+ Log.i(TAG, "瑁佸壀璺緞:" + media.getCutPath());
+ Log.i(TAG, "鏄惁寮�鍚師鍥�:" + media.isOriginal());
+ Log.i(TAG, "鍘熷浘璺緞:" + media.getOriginalPath());
+ Log.i(TAG, "娌欑洅璺緞:" + media.getSandboxPath());
+ Log.i(TAG, "姘村嵃璺緞:" + media.getWatermarkPath());
+ Log.i(TAG, "瑙嗛缂╃暐鍥�:" + media.getVideoThumbnailPath());
+ Log.i(TAG, "鍘熷瀹介珮: " + media.getWidth() + "x" + media.getHeight());
+ Log.i(TAG, "瑁佸壀瀹介珮: " + media.getCropImageWidth() + "x" + media.getCropImageHeight());
+ Log.i(TAG, "鏂囦欢澶у皬: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize()));
+ Log.i(TAG, "鏂囦欢鏃堕暱: " + media.getDuration());
+ }
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ boolean isMaxSize = result.size() == mAdapter.getSelectMax();
+ int oldSize = mAdapter.getData().size();
+ mAdapter.notifyItemRangeRemoved(0, isMaxSize ? oldSize + 1 : oldSize);
+ mAdapter.getData().clear();
+
+ mAdapter.getData().addAll(result);
+ mAdapter.notifyItemRangeInserted(0, result.size());
+ }
+ });
+ }
+
+
+ /**
+ * 鑷畾涔夊浘鐗囧帇缂�
+ */
+ private static class ImageFileCompressEngine implements CompressFileEngine {
+
+ @Override
+ public void onStartCompress(Context context, ArrayList<Uri> source, OnKeyValueResultCallbackListener call) {
+ Luban.with(context).load(source).ignoreBy(100).setRenameListener(new OnRenameListener() {
+ @Override
+ public String rename(String filePath) {
+ int indexOf = filePath.lastIndexOf(".");
+ String postfix = indexOf != -1 ? filePath.substring(indexOf) : ".jpg";
+ return DateUtils.getCreateFileName("CMP_") + postfix;
+ }
+ }).filter(new CompressionPredicate() {
+ @Override
+ public boolean apply(String path) {
+ if (PictureMimeType.isUrlHasImage(path) && !PictureMimeType.isHasHttp(path)) {
+ return true;
+ }
+ return !PictureMimeType.isUrlHasGif(path);
+ }
+ }).setCompressListener(new OnNewCompressListener() {
+ @Override
+ public void onStart() {
+
+ }
+
+ @Override
+ public void onSuccess(String source, File compressFile) {
+ if (call != null) {
+ call.onCallback(source, compressFile.getAbsolutePath());
+ }
+ }
+
+ @Override
+ public void onError(String source, Throwable e) {
+ if (call != null) {
+ call.onCallback(source, null);
+ }
+ }
+ }).launch();
+ }
}
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java
index dc59338..9d7f7e9 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java
@@ -37,7 +37,7 @@
binding = ActivityOrderDetailBinding.inflate(LayoutInflater.from(this));
setContentView(binding.getRoot());
- new TitleBar(this).setTitleText("宸ュ崟璇︽儏");
+ new TitleBar(this).setTitleText("宸ュ崟璇︽儏").setLeftIco().setLeftIcoListening(v -> OrderDetailActivity.this.finish());
initView();
}
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java
index c9602bd..1fe2024 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/SplashScreenActivity.java
@@ -30,18 +30,23 @@
binding = ActivitySplashScreenBinding.inflate(LayoutInflater.from(this));
setContentView(binding.getRoot());
new Handler().postDelayed(() -> {
-// LoginBean loginBean = DaoSingleton.getInstance(SplashScreenActivity.this).loginDao().findFirst();
-// String token = SharedPreferencesHelper.getInstance(SplashScreenActivity.this).get(CommonKeyName.Token, "");
-// if (loginBean != null && !TextUtils.isEmpty(token)) {
-// startMainActivity();
-// MyApplication.myApplication.token = token;
-// MyApplication.myApplication.userId = loginBean.getUserID();
-// } else {
-// startLoginActivity();
-// }
- Intent intent = new Intent(this, OrderDealActivity.class);
- startActivity(intent);
- SplashScreenActivity.this.finish();
+ try {
+ LoginBean loginBean = DaoSingleton.getInstance(SplashScreenActivity.this).loginDao().findFirst();
+ String token = SharedPreferencesHelper.getInstance(SplashScreenActivity.this).get(CommonKeyName.Token, "");
+ if (loginBean != null && !TextUtils.isEmpty(token)) {
+ startMainActivity();
+ MyApplication.myApplication.token = token;
+ MyApplication.myApplication.userId = loginBean.getUserID();
+ } else {
+ startLoginActivity();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ startLoginActivity();
+ }
+// Intent intent = new Intent(this, OrderDealActivity.class);
+// startActivity(intent);
+// SplashScreenActivity.this.finish();
}, 1000);
}
diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java b/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java
new file mode 100644
index 0000000..e43d988
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionBean.java
@@ -0,0 +1,46 @@
+package com.dayu.pipirrapp.bean.db;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * InspectionBean -宸℃璁板綍寮�濮嬫椂闂村拰缁撴潫鏃堕棿鐩稿叧淇℃伅
+ *
+ * @author zuoxiao
+ * @version 1.0
+ * @since 2024-11-29
+ */
+@Entity
+public class InspectionBean {
+ @PrimaryKey(autoGenerate = true)
+ public long id;
+ String inspectId;//宸℃ID
+ String startTime;//寮�濮嬪贰妫�鏃堕棿
+ String stopTime;//鍋滄宸℃鏃堕棿
+
+
+ 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;
+ }
+
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java b/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java
new file mode 100644
index 0000000..31e37e2
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/bean/db/InspectionLocationBean.java
@@ -0,0 +1,72 @@
+package com.dayu.pipirrapp.bean.db;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * InspectionBean - 宸℃璁板綍鐨勫潗鏍囩浉鍏充俊鎭�
+ *
+ * @author zuoxiao
+ * @version 1.0
+ * @since 2024-11-29
+ */
+@Entity
+public class InspectionLocationBean {
+ @PrimaryKey(autoGenerate = true)
+ public long id;
+ String inspectorId;//宸℃鍛業D
+ String inspectId;//宸℃ID
+ String lng;//缁忓害
+ String lat;//绾害
+ String locateTime;//鎵撶偣鏃堕棿
+ boolean isPost;//鏄惁宸茬粡涓婁紶
+
+ public String getInspectorId() {
+ return inspectorId;
+ }
+
+ public void setInspectorId(String inspectorId) {
+ this.inspectorId = inspectorId;
+ }
+
+ public String getInspectId() {
+ return inspectId;
+ }
+
+ public void setInspectId(String inspectId) {
+ this.inspectId = inspectId;
+ }
+
+
+ public String getLng() {
+ return lng;
+ }
+
+ public void setLng(String lng) {
+ this.lng = lng;
+ }
+
+ public String getLat() {
+ return lat;
+ }
+
+ public void setLat(String lat) {
+ this.lat = lat;
+ }
+
+ public String getLocateTime() {
+ return locateTime;
+ }
+
+ public void setLocateTime(String locateTime) {
+ this.locateTime = locateTime;
+ }
+
+ public boolean isPost() {
+ return isPost;
+ }
+
+ public void setPost(boolean post) {
+ isPost = post;
+ }
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/BaseRequest.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/BaseRequest.java
new file mode 100644
index 0000000..e5dc869
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/BaseRequest.java
@@ -0,0 +1,38 @@
+package com.dayu.pipirrapp.bean.net;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * BaseRequest -
+ *
+ * @author zuoxiao
+ * @version 1.0
+ * @since 2024-12-02
+ */
+public class BaseRequest {
+ /**
+ * 瀵硅薄杞琈ap
+ *
+ * @param object
+ * @return
+ * @throws IllegalAccessException
+ */
+ public Map toMap(Object object) {
+ Map<String, Object> map = null;
+ try {
+ map = new HashMap<String, Object>();
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field : fields) {
+ field.setAccessible(true);
+ if (field.get(object) != null) {
+ map.put(field.getName(), field.get(object));
+ }
+ }
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ return map;
+ }
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectionRequest.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectionRequest.java
new file mode 100644
index 0000000..d034eec
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/InspectionRequest.java
@@ -0,0 +1,104 @@
+package com.dayu.pipirrapp.bean.net;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * InspectionRequest -
+ *
+ * @author zuoxiao
+ * @version 1.0
+ * @since 2024-12-02
+ */
+public class InspectionRequest extends BaseRequest{
+ private String inspectorId;
+ private String inspectId;
+ private String startTime;
+ private String stopTime;
+ private List<Track> tracks;
+
+
+ public String getInspectorId() {
+ return inspectorId;
+ }
+
+ public void setInspectorId(String inspectorId) {
+ this.inspectorId = inspectorId;
+ }
+
+ 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 List<Track> getTracks() {
+ return tracks;
+ }
+
+ public void setTracks(List<Track> tracks) {
+ this.tracks = tracks;
+ }
+
+ public void addTracks(Track track) {
+ if (tracks == null) {
+ tracks = new ArrayList<>();
+ }
+ tracks.add(track);
+ }
+
+
+
+ // Track 鏁版嵁绫�
+ public static class Track {
+ private String lng;
+ private String lat;
+ private String locateTime;
+
+
+ public String getLng() {
+ return lng;
+ }
+
+ public void setLng(String lng) {
+ this.lng = lng;
+ }
+
+ public String getLat() {
+ return lat;
+ }
+
+ public void setLat(String lat) {
+ this.lat = lat;
+ }
+
+ public String getLocateTime() {
+ return locateTime;
+ }
+
+ public void setLocateTime(String locateTime) {
+ this.locateTime = locateTime;
+ }
+
+ }
+}
+
+
diff --git a/app/src/main/java/com/dayu/pipirrapp/bean/net/UplodFileState.java b/app/src/main/java/com/dayu/pipirrapp/bean/net/UplodFileState.java
new file mode 100644
index 0000000..17ec2bf
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/bean/net/UplodFileState.java
@@ -0,0 +1,56 @@
+package com.dayu.pipirrapp.bean.net;
+
+import java.io.File;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-04-15 8:15
+ * Description:
+ */
+public class UplodFileState {
+ int state = 0;//0姝e湪涓婁紶 1涓婁紶瀹屾垚 2涓婁紶澶辫触
+ File file;//涓婁紶鐨勬枃浠�
+ String url;//涓婁紶鏂囦欢鍚庤繑鍥炵殑url
+ int number;//澶辫触鍚庨噸璇曠殑娆℃暟
+
+ public int getNumber() {
+ return number;
+ }
+
+ public void setNumber(int number) {
+ this.number = number;
+ }
+
+ public UplodFileState() {
+
+ }
+
+ public UplodFileState(File file) {
+ this.file = file;
+ }
+
+ public int getState() {
+ return state;
+ }
+
+ public void setState(int state) {
+ this.state = state;
+ }
+
+ public File getFile() {
+ return file;
+ }
+
+ public void setFile(File file) {
+ this.file = file;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/dao/AppDatabase.java b/app/src/main/java/com/dayu/pipirrapp/dao/AppDatabase.java
index 0fabe10..5316560 100644
--- a/app/src/main/java/com/dayu/pipirrapp/dao/AppDatabase.java
+++ b/app/src/main/java/com/dayu/pipirrapp/dao/AppDatabase.java
@@ -4,10 +4,11 @@
import androidx.room.RoomDatabase;
import com.dayu.pipirrapp.bean.db.CenterPointBean;
+import com.dayu.pipirrapp.bean.db.InspectionBean;
+import com.dayu.pipirrapp.bean.db.InspectionLocationBean;
import com.dayu.pipirrapp.bean.db.LoginBean;
import com.dayu.pipirrapp.bean.db.MarkerBean;
import com.dayu.pipirrapp.bean.db.TagBean;
-
/**
@@ -16,7 +17,7 @@
* Date: 2023-11-05 16:23
* Description:
*/
-@Database(entities = {TagBean.class, LoginBean.class, CenterPointBean.class, MarkerBean.class}, version = 1, exportSchema = false)
+@Database(entities = {InspectionBean.class,InspectionLocationBean.class, TagBean.class, LoginBean.class, CenterPointBean.class, MarkerBean.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
@@ -28,4 +29,8 @@
public abstract MarkerDao markerDao();
+ public abstract InspectionDao inspectionDao();
+
+ public abstract InspectionLocationDao inspectionLocationDao();
+
}
diff --git a/app/src/main/java/com/dayu/pipirrapp/dao/DaoSingleton.java b/app/src/main/java/com/dayu/pipirrapp/dao/DaoSingleton.java
index 225ea44..fe5d101 100644
--- a/app/src/main/java/com/dayu/pipirrapp/dao/DaoSingleton.java
+++ b/app/src/main/java/com/dayu/pipirrapp/dao/DaoSingleton.java
@@ -14,8 +14,8 @@
* Description: 鍒涘缓鏁版嵁搴撳疄渚�
*/
public class DaoSingleton {
- public static AppDatabase baseDao;
- public static AppDatabase AsynchBaseDao;
+ private static AppDatabase baseDao;
+ private static AppDatabase AsynchBaseDao;
public static String name = "dayu_data";
//MyFileUtil.SqlitePath +
diff --git a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java
new file mode 100644
index 0000000..eb0ddb2
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionDao.java
@@ -0,0 +1,34 @@
+package com.dayu.pipirrapp.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.pipirrapp.bean.db.InspectionBean;
+
+import io.reactivex.rxjava3.core.Completable;
+import io.reactivex.rxjava3.core.Single;
+
+
+@Dao
+public interface InspectionDao {
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ Completable insert(InspectionBean inspectionBean);
+
+ @Update
+ void update(InspectionBean inspectionBean);
+
+ @Delete
+ void delete(InspectionBean inspectionBean);
+
+ @Query("DELETE FROM InspectionBean")
+ void deleteAll();
+
+ //鏌ヨ褰撳墠娌℃湁鍏抽棴宸℃鐨勫贰妫�ID
+ @Query("SELECT * FROM InspectionBean WHERE stopTime IS NULL OR stopTime = '' ORDER BY startTime DESC LIMIT 1")
+ Single<InspectionBean> getMostRecentInspectionWithNoStopTime();
+
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java
new file mode 100644
index 0000000..68b69ec
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/dao/InspectionLocationDao.java
@@ -0,0 +1,36 @@
+package com.dayu.pipirrapp.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.pipirrapp.bean.db.InspectionLocationBean;
+
+import java.util.List;
+
+import io.reactivex.rxjava3.core.Completable;
+
+@Dao
+public interface InspectionLocationDao {
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ Completable insert(InspectionLocationBean inspectionLocationBean);
+
+ @Update
+ Completable update(InspectionLocationBean inspectionLocationBean);
+
+ @Delete
+ void delete(InspectionLocationBean inspectionLocationBean);
+
+ @Query("DELETE FROM InspectionLocationBean")
+ void deleteAll();
+
+ @Query("select * from InspectionLocationBean limit 1")
+ InspectionLocationBean findFirst();
+
+ //鏌ヨ鎵�鏈夋病鏈変笂浼犵殑鍧愭爣
+ @Query("select * from InspectionLocationBean where isPost=false")
+ List<InspectionLocationBean> findByNoPost();
+}
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 e8e1f24..1ce4b82 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -1,10 +1,15 @@
package com.dayu.pipirrapp.fragment;
+import static com.dayu.pipirrapp.net.Constants.BASE_URL;
+import static com.dayu.pipirrapp.tool.InspectionUtils.addInspectionLocationData;
+import static com.dayu.pipirrapp.tool.InspectionUtils.updateInspectionLocationData;
+
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
+import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -20,10 +25,15 @@
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
+import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.bean.db.CenterPointBean;
+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.InspectionRequest;
+import com.dayu.pipirrapp.bean.net.LoginResult;
import com.dayu.pipirrapp.bean.net.MarkerResult;
import com.dayu.pipirrapp.dao.DaoSingleton;
import com.dayu.pipirrapp.databinding.FragmentMapBinding;
@@ -34,8 +44,10 @@
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
import com.dayu.pipirrapp.observer.MapFragmenObserver;
import com.dayu.pipirrapp.service.MyLocationService;
+import com.dayu.pipirrapp.tool.InspectionUtils;
import com.dayu.pipirrapp.utils.CommonData;
import com.dayu.pipirrapp.utils.CommonKeyName;
+import com.dayu.pipirrapp.utils.DateUtils;
import com.dayu.pipirrapp.utils.MapJpgUtils;
import com.dayu.pipirrapp.utils.MyLog;
import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
@@ -43,12 +55,15 @@
import com.dayu.pipirrapp.utils.WebViewUtils;
import com.dayu.pipirrapp.view.ConfirmDialog;
import com.jeremyliao.liveeventbus.LiveEventBus;
+import com.tencent.bugly.crashreport.CrashReport;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Random;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
@@ -70,8 +85,13 @@
WebView mWebView;
CenterPointBean centerPointBean;
String strMarkerJson;
+ //鏄惁鏄剧ず
boolean isStartInspec = false;
MapFragmenObserver mapFragmenObserver;
+ //褰撳墠宸℃璁板綍鐨勭浉鍏充俊鎭�
+ InspectionBean mInspectionBean;
+ LatLonBean lastLatLonBean;
+ InspectionRequest inspectionRequest;
@Override
public void onAttach(@NonNull Context context) {
@@ -86,48 +106,12 @@
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate");
isStartInspec = SharedPreferencesHelper.getInstance(this.getContext()).get(CommonKeyName.isStartInspec, false);
-
}
@Override
public void onStart() {
super.onStart();
Log.i(TAG, "onStart");
- }
-
- /**
- * 淇敼宸℃鐘舵��
- */
- private void chageInspecState() {
- Intent location = new Intent(this.getActivity(), MyLocationService.class);
- location.putExtra("isSingle", false);
- if (isStartInspec) {
- //鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐�
- LiveEventBus.get(CommonKeyName.locationData).observeForever(new Observer<Object>() {
- @Override
- public void onChanged(Object o) {
-
- LatLonBean latLonBean = (LatLonBean) o;
- Log.i("chageInspecState", "lat:" + latLonBean.getLatitude() + ",log:" + latLonBean.getLongitude());
- mWebView.evaluateJavascript("javascript:updateLocation(\"" + latLonBean.getLatitude() + "\",\"" + latLonBean.getLongitude() + "\")", value -> {
- });
- }
- });
- binding.stateText.setVisibility(View.VISIBLE);
- binding.inspectButton.setText("缁�");
- //寮�鍚畾浣�
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- this.getActivity().startForegroundService(location);
- } else {
- this.getActivity().startService(location);
- }
- } else {
- binding.stateText.setVisibility(View.GONE);
- binding.inspectButton.setText("宸�");
- //鍏抽棴瀹氫綅
- this.getActivity().stopService(location);
-
- }
}
@@ -396,5 +380,125 @@
binding.bottomLL.setVisibility(View.GONE);
}
+ /**
+ * 涓婃姤宸℃璁板綍
+ */
+ private void pushLocationData(InspectionLocationBean inspectionLocationBean) {
+ inspectionRequest.setInspectId(inspectionLocationBean.getInspectId());
+ inspectionRequest.setInspectorId(inspectionLocationBean.getInspectorId());
+ if (mInspectionBean != null) {
+ inspectionRequest.setStartTime(mInspectionBean.getStartTime());
+ inspectionRequest.setStopTime(mInspectionBean.getStopTime());
+ }
+ InspectionRequest.Track track = new InspectionRequest.Track();
+ 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", LoginResult.class, inspectionRequest.toMap(inspectionRequest), new SubscriberListener<BaseResponse<LoginResult>>() {
+ @Override
+ public void onNext(BaseResponse<LoginResult> t) {
+ try {
+ if (t.isSuccess()) {
+ inspectionLocationBean.setPost(true);
+ updateInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean);
+ } else {
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ CrashReport.postCatchedException(e);
+ }
+
+ }
+ });
+ }
+
+ /**
+ * 寮�濮嬪贰妫�
+ */
+ private void startInspection() {
+ DaoSingleton.getAsynchInstance(this.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread()).subscribe(inspectionBean -> {
+ // 鏇存柊 UI
+ mInspectionBean = inspectionBean;
+ });
+ }
+
+
+ /**
+ * 瀹氫綅鐩戝惉
+ */
+ private Observer<Object> locationObserver = new Observer<Object>() {
+ @Override
+ public void onChanged(Object o) {
+ if (mInspectionBean != null) {
+ LatLonBean latLonBean = (LatLonBean) o;
+ if (InspectionUtils.isThanMinMeters(lastLatLonBean, latLonBean)) {
+ //澶т簬鏈�灏忚窛绂�
+ lastLatLonBean = latLonBean;
+ Log.i("chageInspecState", "lat:" + latLonBean.getLatitude() + ",log:" + latLonBean.getLongitude());
+ InspectionLocationBean inspectionLocationBean = createInspectionLocation(latLonBean);
+ addInspectionLocationData(MapFragment.this.getContext(), inspectionLocationBean);
+ //鏇存柊鍒板湴鍥�
+ mWebView.evaluateJavascript("javascript:updateLocation(\"" + latLonBean.getLongitude() + "\",\"" + latLonBean.getLatitude() + "\")", value -> {
+ });
+ //涓婁紶鍧愭爣
+ pushLocationData(inspectionLocationBean);
+ } else {
+ Log.d(TAG, "isThanMinMeters>>>false");
+ }
+
+
+ }
+ }
+ };
+
+
+ /**
+ * 鍒涘缓InspectionLocationBean
+ */
+ private InspectionLocationBean createInspectionLocation(LatLonBean latLonBean) {
+ InspectionLocationBean inspectionLocationBean = new InspectionLocationBean();
+ inspectionLocationBean.setInspectId(mInspectionBean.getInspectId());
+ inspectionLocationBean.setLocateTime(DateUtils.getNowDateStr());
+ inspectionLocationBean.setPost(false);
+ inspectionLocationBean.setInspectorId(MyApplication.myApplication.userId);
+ inspectionLocationBean.setLng(String.valueOf(latLonBean.getLongitude()));
+ inspectionLocationBean.setLat(String.valueOf(latLonBean.getLatitude()));
+ return inspectionLocationBean;
+ }
+
+
+ /**
+ * 淇敼宸℃鐘舵��
+ */
+ private void chageInspecState() {
+ Intent location = new Intent(this.getActivity(), MyLocationService.class);
+ location.putExtra("isSingle", false);
+ if (isStartInspec) {
+ //娣诲姞鏂扮殑宸℃璁板綍
+ startInspection();
+ //鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐�
+ LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver);
+ binding.stateText.setVisibility(View.VISIBLE);
+ binding.inspectButton.setText("缁�");
+ //寮�鍚畾浣�
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ this.getActivity().startForegroundService(location);
+ } else {
+ this.getActivity().startService(location);
+ }
+ mInspectionBean = InspectionUtils.startInspection(this.getContext());
+ inspectionRequest = new InspectionRequest();
+ } else {
+ binding.stateText.setVisibility(View.GONE);
+ binding.inspectButton.setText("宸�");
+ LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver);
+ //鍏抽棴瀹氫綅
+ this.getActivity().stopService(location);
+ }
+ }
}
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 3eabb79..c2526b3 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/MyFragment.java
@@ -19,7 +19,6 @@
import com.dayu.pipirrapp.utils.CleanDataUtils;
import com.dayu.pipirrapp.utils.ToastUtil;
import com.dayu.pipirrapp.view.ConfirmDialog;
-import com.dayu.pipirrapp.view.TitleBar;
/**
* author: zuo
diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
index 4ca4016..c0efb85 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
@@ -16,7 +16,6 @@
import com.dayu.pipirrapp.activity.OrderDetailActivity;
import com.dayu.pipirrapp.adapter.OrderAdapter;
import com.dayu.pipirrapp.bean.net.OrderListResult;
-import com.dayu.pipirrapp.bean.net.WeatherResponse;
import com.dayu.pipirrapp.databinding.FragmentOrderBinding;
import com.dayu.pipirrapp.net.ApiManager;
import com.dayu.pipirrapp.net.BaseResponse;
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
index 0735ae5..8e03e6f 100644
--- a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
+++ b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
@@ -9,11 +9,13 @@
import com.dayu.pipirrapp.MyApplication;
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.net.subscribers.BaseProgressSubscriber;
import com.dayu.pipirrapp.net.subscribers.CodeListener;
import com.dayu.pipirrapp.net.subscribers.ProgressSubscriber;
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
+import com.dayu.pipirrapp.net.upload.UploadFileListener;
import com.dayu.pipirrapp.utils.MapJpgUtils;
import com.dayu.pipirrapp.utils.MyJsonParser;
@@ -26,9 +28,13 @@
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.functions.Function;
import io.reactivex.rxjava3.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
+import retrofit2.Response;
/**
@@ -285,4 +291,57 @@
return false; // 鏃犵綉缁滆繛鎺�
}
+ /**
+ * 涓婁紶鏂囦欢
+ *
+ * @param context
+ * @param file
+ * @param listener
+ */
+ public void uploadFile(final Context context, final UplodFileState file, final UploadFileListener listener) {
+
+ // 鍒涘缓 RequestBody锛岀敤浜庡皝瑁呮瀯寤篟equestBody
+ RequestBody requestFile =
+ RequestBody.create(MediaType.parse("multipart/form-data"), file.getFile());
+ // MultipartBody.Part 鍜屽悗绔害瀹氬ソKey锛岃繖閲岀殑partName鏄敤image
+ MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getFile().getName(), requestFile);
+ // 娣诲姞鎻忚堪
+ String descriptionString = "hello, 杩欐槸鏂囦欢鎻忚堪";
+ RequestBody description = RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString);
+ apiService.uploadFile(description, body).enqueue(new Callback<BaseResponse>() {
+ @Override
+ public void onResponse(Call<BaseResponse> call, Response<BaseResponse> response) {
+ if (response.body() != null) {
+ if (response.body().isSuccess()) {
+ file.setState(1);
+ file.setUrl(response.body().getMsg());
+ listener.onBack(file);
+ } else {
+ if (file.getNumber() <= uplodFilerepeatSize) {
+ file.setNumber(file.getNumber() + 1);
+ file.setState(2);
+ uploadFile(context, file, listener);
+ } else {
+ listener.onBack(file);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onFailure(Call<BaseResponse> call, Throwable t) {
+ if (file.getNumber() <= uplodFilerepeatSize) {
+ file.setNumber(file.getNumber() + 1);
+ file.setState(2);
+ uploadFile(context, file, listener);
+ } else {
+ listener.onBack(file);
+ }
+ }
+ });
+ }
+
+
+
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/ApiService.java b/app/src/main/java/com/dayu/pipirrapp/net/ApiService.java
index 3e73681..ab0ee53 100644
--- a/app/src/main/java/com/dayu/pipirrapp/net/ApiService.java
+++ b/app/src/main/java/com/dayu/pipirrapp/net/ApiService.java
@@ -58,11 +58,11 @@
Call<BaseResponse> uploadFiles(@PartMap Map<String, RequestBody> map);
@Multipart
- @POST(Constants.BASE_URL + "file/upload")
+ @POST(Constants.BASE_URL + "app/webFile/upPhoto")
Call<BaseResponse> uploadFile(@Part("description") RequestBody description, @Part MultipartBody.Part file);
//鑾峰彇楠岃瘉鐮�
- @GET(Constants.BASE_URL+":8088/app/captcha/get")
+ @GET(Constants.BASE_URL+"/app/captcha/get")
Observable<CodeResult> getCode(@QueryMap Map<String, Object> params);
@GET()
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java b/app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java
index bc2fba6..b32dfb5 100644
--- a/app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java
+++ b/app/src/main/java/com/dayu/pipirrapp/net/MyIntercepterApplication.java
@@ -1,11 +1,8 @@
package com.dayu.pipirrapp.net;
import com.dayu.pipirrapp.MyApplication;
-import com.dayu.pipirrapp.utils.CommonData;
-import com.dayu.pipirrapp.utils.SharedPreferencesHelper;
import com.dayu.pipirrapp.utils.ToastUtil;
import com.tencent.bugly.crashreport.CrashReport;
-
import java.io.IOException;
import java.net.ConnectException;
@@ -68,7 +65,7 @@
}
}
builder.addHeader("os", "app");
- builder.addHeader("Authorization", SharedPreferencesHelper.getInstance(MyApplication.myApplication).get("token", ""));
+ builder.addHeader("token", MyApplication.myApplication.token);
}
builder.addHeader("tag", MyApplication.myApplication.myTag);
return builder.build();
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressListener.java b/app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressListener.java
new file mode 100644
index 0000000..bce7d0a
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressListener.java
@@ -0,0 +1,5 @@
+package com.dayu.pipirrapp.net.upload;
+
+public interface ProgressListener {
+ void onProgress(long bytesWritten, long totalBytes);
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressRequestBody.java b/app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressRequestBody.java
new file mode 100644
index 0000000..964c1c4
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/upload/ProgressRequestBody.java
@@ -0,0 +1,53 @@
+package com.dayu.pipirrapp.net.upload;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import okhttp3.MediaType;
+import okhttp3.RequestBody;
+import okio.BufferedSink;
+import okio.BufferedSource;
+import okio.Okio;
+
+/**
+ * ProgressRequestBody -
+ *
+ * @author zuoxiao
+ * @version 1.0
+ * @since 2024-11-28
+ */
+public class ProgressRequestBody extends RequestBody {
+ private File file;
+ private ProgressListener listener;
+ private MediaType mediaType;
+
+ public ProgressRequestBody(File file, ProgressListener listener, String mimeType) {
+ this.file = file;
+ this.listener = listener;
+ this.mediaType = MediaType.parse(mimeType);
+ }
+
+ @Override
+ public MediaType contentType() {
+ return mediaType;
+ }
+
+ @Override
+ public void writeTo(BufferedSink sink) throws IOException {
+ try (FileInputStream fileInputStream = new FileInputStream(file);
+ BufferedSource source = (BufferedSource) Okio.source(fileInputStream)) {
+ long totalBytes = file.length();
+ long bytesWritten = 0;
+ long read;
+ byte[] buffer = new byte[2048];
+ while ((read = source.read(buffer)) != -1) {
+ sink.write(buffer, 0, (int) read);
+ bytesWritten += read;
+ if (listener != null) {
+ listener.onProgress(bytesWritten, totalBytes);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dayu/pipirrapp/net/upload/UploadFileListener.java b/app/src/main/java/com/dayu/pipirrapp/net/upload/UploadFileListener.java
new file mode 100644
index 0000000..fc98806
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/net/upload/UploadFileListener.java
@@ -0,0 +1,14 @@
+package com.dayu.pipirrapp.net.upload;
+
+
+import com.dayu.pipirrapp.bean.net.UplodFileState;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-04-15 8:27
+ * Description:
+ */
+public interface UploadFileListener {
+ void onBack(UplodFileState state);
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java b/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java
index df32098..00c7aea 100644
--- a/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java
+++ b/app/src/main/java/com/dayu/pipirrapp/service/MyLocationService.java
@@ -225,7 +225,7 @@
if (isSingle) {
stopSelf(); // 鑾峰彇鍒扮粡绾害浠ュ悗锛屽仠姝㈣service
}
- ToastUtil.showToast(MyLocationService.this, "鍘熺敓瀹氫綅onLocationChanged: Latitude锛�" + latitude + " Longitude锛�" + longitude);
+// ToastUtil.showToast(MyLocationService.this, "鍘熺敓瀹氫綅onLocationChanged: Latitude锛�" + latitude + " Longitude锛�" + longitude);
}
// 鐘舵�佹敼鍙樻椂
diff --git a/app/src/main/java/com/dayu/pipirrapp/tool/FullyGridLayoutManager.java b/app/src/main/java/com/dayu/pipirrapp/tool/FullyGridLayoutManager.java
index 7ad0a08..d3b51c9 100644
--- a/app/src/main/java/com/dayu/pipirrapp/tool/FullyGridLayoutManager.java
+++ b/app/src/main/java/com/dayu/pipirrapp/tool/FullyGridLayoutManager.java
@@ -10,7 +10,7 @@
/**
* FullyGridLayoutManager -
- *
+ * 鑷畾涔塆rid鐢ㄤ互鏄剧ず
* @author zuoxiao
* @version 1.0
* @since 2024-11-28
diff --git a/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java b/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java
new file mode 100644
index 0000000..eb3a256
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java
@@ -0,0 +1,112 @@
+package com.dayu.pipirrapp.tool;
+
+import android.content.Context;
+import android.location.Location;
+import android.util.Log;
+
+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.dao.DaoSingleton;
+import com.dayu.pipirrapp.utils.DateUtils;
+
+import java.util.UUID;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+
+/**
+ * InspectionUtils -宸℃璁板綍鐩稿叧鍔熻兘鍚堥泦
+ *
+ * @author zuoxiao
+ * @version 1.0
+ * @since 2024-11-29
+ */
+public class InspectionUtils {
+ private static final String TAG = "InspectionUtils";
+ //鎵撶偣鐨勬渶灏忎袱鐐规渶灏忚窛绂�
+ private static final int MinMeters = 10;
+
+ /**
+ * 鑾峰彇褰撳墠宸℃璁板綍ID
+ *
+ * @param context
+ * @return
+ */
+ public static String getInspectionId(Context context) {
+
+
+ return "";
+ }
+
+
+ /**
+ * 寮�濮嬪贰妫�骞舵彃鍏ュ贰妫�璁板綍
+ *
+ * @param context 涓婁笅鏂�
+ * @return Completable 琛ㄧず鎻掑叆瀹屾垚鎴栧け璐ョ殑娴�
+ */
+ public static InspectionBean startInspection(Context context) {
+ // 鍒涘缓宸℃璁板綍
+ InspectionBean inspectionBean = new InspectionBean();
+ inspectionBean.setInspectId(UUID.randomUUID().toString());
+ inspectionBean.setStartTime(DateUtils.getNowDateStr());
+ // 寮傛鎻掑叆鍒版暟鎹簱
+ DaoSingleton.getAsynchInstance(context)
+ .inspectionDao()
+ .insert(inspectionBean) // 鎻掑叆鎿嶄綔
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(() -> {
+ Log.i(TAG, "Inspection started and inserted successfully.");
+ }, throwable -> {
+ Log.e(TAG, "Error inserting inspection data: ", throwable);
+ });
+ // 鑾峰彇Dao骞舵墽琛屾彃鍏ユ搷浣�
+ return inspectionBean; // 鎻掑叆瀹屾垚鍚庡垏鎹㈠埌涓荤嚎绋�
+ }
+
+
+ /**
+ * 娣诲姞宸℃璁板綍鍧愭爣
+ *
+ * @param context
+ * @param locationBean
+ */
+ public static void addInspectionLocationData(Context context, InspectionLocationBean locationBean) {
+ DaoSingleton.getAsynchInstance(context).inspectionLocationDao().insert(locationBean).subscribeOn(Schedulers.io());
+ }
+
+ /**
+ * 淇敼宸℃璁板綍鍧愭爣
+ *
+ * @param context
+ * @param locationBean
+ */
+ public static void updateInspectionLocationData(Context context, InspectionLocationBean locationBean) {
+ DaoSingleton.getAsynchInstance(context).inspectionLocationDao().update(locationBean).subscribeOn(Schedulers.io());
+ }
+
+ /**
+ * 鍒ゆ柇涓や釜鍦扮偣鐨勮窛绂绘槸鍚﹀ぇ浜庤瀹氱殑鏈�灏忚窛绂�
+ *
+ * @param lastLocation 绗竴涓湴鐐�
+ * @param newLocation 绗簩涓湴鐐�
+ * @return 濡傛灉璺濈澶т簬10绫筹紝杩斿洖true锛屽惁鍒欒繑鍥瀎alse
+ */
+ public static boolean isThanMinMeters(LatLonBean lastLocation, LatLonBean newLocation) {
+ //褰搇astLocation涓簄ull榛樿璁や负杩斿洖true
+ if (lastLocation != null) {
+ // 浣跨敤 Location.distanceBetween 璁$畻涓や釜鐐逛箣闂寸殑璺濈锛屽崟浣嶄负绫�
+ float[] results = new float[1];
+ Location.distanceBetween(lastLocation.getLatitude(), lastLocation.getLongitude(), newLocation.getLatitude(), newLocation.getLongitude(), results);
+ float distanceInMeters = results[0];
+
+ // 鍒ゆ柇璺濈鏄惁澶т簬10绫�
+ return distanceInMeters > MinMeters;
+ } else {
+ return true;
+ }
+
+ }
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/utils/DateUtils.java b/app/src/main/java/com/dayu/pipirrapp/utils/DateUtils.java
new file mode 100644
index 0000000..d95c903
--- /dev/null
+++ b/app/src/main/java/com/dayu/pipirrapp/utils/DateUtils.java
@@ -0,0 +1,32 @@
+package com.dayu.pipirrapp.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * DateUtils - 澶勭悊鏃堕棿缁熶竴鐨勭被
+ *
+ * @author zuoxiao
+ * @version 1.0
+ * @since 2024-11-29
+ */
+public class DateUtils {
+
+
+ /**
+ * 杩斿洖缁熶竴鏍煎紡鐨勫綋鍓嶆椂闂�
+ *
+ * @return yyyy-MM-dd HH:mm:ss
+ */
+ public static String getNowDateStr() {
+ // 褰撳墠鏃堕棿
+ Date date = new Date();
+ // 鍒涘缓 SimpleDateFormat 瀵硅薄锛岃缃棩鏈熸牸寮�
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
+ // 鏍煎紡鍖栧綋鍓嶆椂闂翠负瀛楃涓�
+ return sdf.format(date);
+ }
+
+
+}
diff --git a/app/src/main/java/com/dayu/pipirrapp/view/TagDialog.java b/app/src/main/java/com/dayu/pipirrapp/view/TagDialog.java
index 3114677..db668d5 100644
--- a/app/src/main/java/com/dayu/pipirrapp/view/TagDialog.java
+++ b/app/src/main/java/com/dayu/pipirrapp/view/TagDialog.java
@@ -78,6 +78,7 @@
@Override
public void onClick(View v) {
MyApplication.myApplication.myTag = tagBean.getTag();
+
tagDao.insert(tagBean);
mLibraryBack.listener(type);
TagDialog.this.dismiss();
diff --git a/app/src/main/java/com/dayu/pipirrapp/view/TitleBar.java b/app/src/main/java/com/dayu/pipirrapp/view/TitleBar.java
index 3422266..27d0426 100644
--- a/app/src/main/java/com/dayu/pipirrapp/view/TitleBar.java
+++ b/app/src/main/java/com/dayu/pipirrapp/view/TitleBar.java
@@ -4,14 +4,9 @@
package com.dayu.pipirrapp.view;
import android.app.Activity;
-import android.content.Context;
-import android.content.res.TypedArray;
import android.graphics.Color;
import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
import android.view.View;
-import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
@@ -194,6 +189,7 @@
* @return
*/
public TitleBar setRightIcoListening(View.OnClickListener listener) {
+
if (iv_rightIco.getVisibility() == View.VISIBLE) {
iv_rightIco.setOnClickListener(listener);
}
diff --git a/app/src/main/res/layout/activity_order_deal.xml b/app/src/main/res/layout/activity_order_deal.xml
index 46c5be9..1465137 100644
--- a/app/src/main/res/layout/activity_order_deal.xml
+++ b/app/src/main/res/layout/activity_order_deal.xml
@@ -16,6 +16,7 @@
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="@color/bg_color"
android:orientation="vertical">
<include
@@ -58,6 +59,8 @@
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:padding="5dp"
+ android:background="@color/white"
android:layout_marginTop="10dp"
android:overScrollMode="never" />
--
Gitblit v1.8.0