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