From b6f46408cb3dc8b01051953e5c68de6c9195db60 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期四, 23 一月 2025 10:15:46 +0800
Subject: [PATCH] 1.修复分水房点击屏幕不变蓝bug。 2.处理工单添加处理时间弹窗。

---
 app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java |  242 ++++++++++++++++++++++++++++++++++++------------
 1 files changed, 180 insertions(+), 62 deletions(-)

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 cebbdd9..0d707c0 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -1,48 +1,69 @@
 package com.dayu.pipirrapp.activity;
 
+import static com.dayu.pipirrapp.net.Constants.BASE_URL;
+
 import android.content.Context;
 import android.content.Intent;
-import android.net.Uri;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.lifecycle.Observer;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.SimpleItemAnimator;
 
+import com.dayu.pipirrapp.MyApplication;
 import com.dayu.pipirrapp.adapter.AddPictureAdapter;
+import com.dayu.pipirrapp.bean.db.LatLonBean;
+import com.dayu.pipirrapp.bean.net.AddProcessingRequest;
+import com.dayu.pipirrapp.bean.net.InsectionResult;
+import com.dayu.pipirrapp.bean.net.UplodFileState;
+import com.dayu.pipirrapp.dao.DaoSingleton;
 import com.dayu.pipirrapp.databinding.ActivityOrderDealBinding;
+import com.dayu.pipirrapp.fragment.OrderFragment;
+import com.dayu.pipirrapp.net.ApiManager;
+import com.dayu.pipirrapp.net.BaseResponse;
+import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
+import com.dayu.pipirrapp.net.upload.UploadFileListener;
+import com.dayu.pipirrapp.tool.FileUploadUtils;
 import com.dayu.pipirrapp.tool.FullyGridLayoutManager;
 import com.dayu.pipirrapp.tool.GlideEngine;
+import com.dayu.pipirrapp.tool.ImageFileCompressEngine;
+import com.dayu.pipirrapp.utils.CommonKeyName;
+import com.dayu.pipirrapp.utils.MyLog;
+import com.dayu.pipirrapp.utils.ServiceUtils;
+import com.dayu.pipirrapp.utils.ToastUtil;
 import com.dayu.pipirrapp.view.TitleBar;
+import com.jeremyliao.liveeventbus.LiveEventBus;
+import com.loper7.date_time_picker.DateTimeConfig;
+import com.loper7.date_time_picker.dialog.CardDatePickerDialog;
 import com.luck.picture.lib.basic.PictureSelectionModel;
 import com.luck.picture.lib.basic.PictureSelector;
 import com.luck.picture.lib.config.PictureMimeType;
 import com.luck.picture.lib.config.SelectMimeType;
 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.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 com.tencent.bugly.crashreport.CrashReport;
 
-import java.io.File;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
-import top.zibin.luban.CompressionPredicate;
-import top.zibin.luban.Luban;
-import top.zibin.luban.OnNewCompressListener;
-import top.zibin.luban.OnRenameListener;
+import retrofit2.Call;
 
 /**
  * OrderDealDetailActivity -
@@ -53,7 +74,7 @@
  * @since 2024-11-27
  */
 public class OrderDealActivity extends BaseActivity {
-    private String TAG = "OrderDealActivity";
+    private final String TAG = "OrderDealActivity";
     ActivityOrderDealBinding binding;
     RecyclerView mRecyclerView;
     AddPictureAdapter mAdapter;
@@ -62,19 +83,57 @@
     private final List<LocalMedia> mData = new ArrayList<>();
     private ActivityResultLauncher<Intent> launcherResult;
     private ImageEngine imageEngine;
+    //    List<UplodFileState> uplodFileStates = new ArrayList<>();
+    Map<String, UplodFileState> uplodFileStates = new HashMap<>();
+    String workOrderId;
+    LatLonBean latLonBean;
+
+    /**
+     * 瀹氫綅鐩戝惉
+     */
+    private Observer<Object> locationObserver = new Observer<Object>() {
+        @Override
+        public void onChanged(Object o) {
+            MyLog.d("OrderDealActivity>>>locationObserver>>");
+            latLonBean = (LatLonBean) o;
+        }
+    };
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         binding = ActivityOrderDealBinding.inflate(LayoutInflater.from(this));
         setContentView(binding.getRoot());
+        workOrderId = this.getIntent().getStringExtra("workOrderId");
         launcherResult = createActivityResultLauncher();
         initView();
+        startLocation();
     }
 
 
     void initView() {
         new TitleBar(this).setTitleText("澶勭悊宸ュ崟").setLeftIco().setLeftIcoListening(v -> OrderDealActivity.this.finish());
+        binding.timeLL.setOnClickListener(v -> {
+            long time = System.currentTimeMillis();
+            List<Integer> list = new ArrayList<>();
+            list.add(DateTimeConfig.YEAR);
+            list.add(DateTimeConfig.MONTH);
+            list.add(DateTimeConfig.DAY);
+            list.add(DateTimeConfig.HOUR);
+            list.add(DateTimeConfig.MIN);
+            new CardDatePickerDialog.Builder(this)
+                    .setTitle("閫夋嫨澶勭悊鏃堕棿")
+                    .setOnChoose("纭畾", aLong -> {
+                        //aLong  = millisecond
+
+                        return null;
+                    })
+                    .showBackNow(true)
+                    .setDefaultTime(time)
+                    .setMaxTime(time)
+                    .setDisplayType(list)
+                    .build().show();
+        });
         mRecyclerView = binding.recycler;
         FullyGridLayoutManager manager = new FullyGridLayoutManager(this,
                 4, GridLayoutManager.VERTICAL, false);
@@ -85,7 +144,7 @@
         }
         mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4,
                 DensityUtil.dip2px(this, 8), false));
-        mAdapter = new AddPictureAdapter(this, mData);
+        mAdapter = new AddPictureAdapter(this, mData, uplodFileStates);
         mAdapter.setSelectMax(maxSelectNum + maxSelectVideoNum);
         mRecyclerView.setAdapter(mAdapter);
         imageEngine = GlideEngine.createGlideEngine();
@@ -104,6 +163,38 @@
             public void openPicture() {
                 //娣诲姞鍥剧墖
                 mOpenPicture();
+            }
+
+            @Override
+            public void onDeleteClick(int position) {
+                deleteItem(position);
+            }
+
+            @Override
+            public void onReUpload(UplodFileState uplodFileState) {
+                FileUploadUtils.uploadFile(OrderDealActivity.this, uplodFileState, uplodFileStates, mAdapter);
+            }
+        });
+        binding.dealButton.setOnClickListener(v -> {
+            boolean isAllPost = true;
+            for (UplodFileState imgData : uplodFileStates.values()) {
+                if (imgData.getState() == 0) {
+                    isAllPost = false;
+                }
+            }
+
+            if (!TextUtils.isEmpty(binding.contentET.getText().toString())) {
+                if (isAllPost) {
+                    if (uplodFileStates.size() > 0) {
+                        postData();
+                    } else {
+                        ToastUtil.showToast(OrderDealActivity.this, "璇蜂笂浼犲浘鐗�");
+                    }
+                } else {
+                    ToastUtil.showToast(OrderDealActivity.this, "鍥剧墖姝e湪涓婁紶璇风◢鍚庢彁浜�");
+                }
+            } else {
+                ToastUtil.showToast(OrderDealActivity.this, "璇疯緭鍏ュ弽棣堝唴瀹�");
             }
         });
     }
@@ -150,6 +241,7 @@
 
         @Override
         public void onPreviewDelete(int position) {
+            deleteItem(position);
             mAdapter.remove(position);
             mAdapter.notifyItemRemoved(position);
         }
@@ -194,66 +286,92 @@
             Log.i(TAG, "瑁佸壀瀹介珮: " + media.getCropImageWidth() + "x" + media.getCropImageHeight());
             Log.i(TAG, "鏂囦欢澶у皬: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize()));
             Log.i(TAG, "鏂囦欢鏃堕暱: " + media.getDuration());
+            Log.i(TAG, "鎵╁睍鍚�: " + media.getMimeType());
+            FileUploadUtils.creatAndUploadFile(this, media, uplodFileStates, mAdapter);
         }
-        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();
+        // 鑾峰彇 result 涓病鏈夎�� uplodFileStates 涓湁鐨勫湴鍧�
+        FileUploadUtils.cancelRemovedUploads(result, uplodFileStates);
+        // 鏇存柊UI
+        FileUploadUtils.updateUI(result, mAdapter);
+    }
 
-                mAdapter.getData().addAll(result);
-                mAdapter.notifyItemRangeInserted(0, result.size());
+
+
+    /**
+     * 涓婃姤澶勭悊缁撴灉
+     */
+    private void postData() {
+        AddProcessingRequest result = new AddProcessingRequest();
+        result.setImages(uplodFileStates);
+        result.setContent(binding.contentET.getText().toString());
+        result.setInspectorId(MyApplication.myApplication.userId);
+        result.setWorkOrderId(workOrderId);
+        result.setCompleteTime(com.dayu.pipirrapp.utils.DateUtils.getNowDateToMMStr());
+        if (latLonBean != null) {
+            result.setLat(String.valueOf(latLonBean.getLatitude()));
+            result.setLng(String.valueOf(latLonBean.getLongitude()));
+        }
+        ApiManager.getInstance().requestPostHideLoading(this, BASE_URL + "/app/workOrder/addProcessingResult", InsectionResult.class, result.toMap(result), new SubscriberListener<BaseResponse<List<InsectionResult>>>() {
+            @Override
+            public void onNext(BaseResponse<List<InsectionResult>> t) {
+                try {
+                    if (t.isSuccess()) {
+                        ToastUtil.showToastLong(OrderDealActivity.this, "涓婃姤鎴愬姛");
+                        setResult(OrderFragment.RESULT_REFRESH);
+                        OrderDealActivity.this.finish();
+                    } else {
+
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    CrashReport.postCatchedException(e);
+                }
+
             }
         });
     }
 
-
     /**
-     * 鑷畾涔夊浘鐗囧帇缂�
+     * 寮�濮嬪畾浣嶇浉鍏抽�昏緫
      */
-    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();
-        }
+    private void startLocation() {
+        ServiceUtils.startLocationService(this, true);
+        //鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐�
+        LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver);
     }
 
 
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver);
+        FileUploadUtils.cancelAllCall(uplodFileStates);
+    }
+
+    /**
+     * 棰勮鍜屽浘鐗囧垪琛ㄥ垹闄ゅ浘鐗囨椂澶勭悊鍒犻櫎浜嬩欢
+     */
+    private void deleteItem(int position) {
+        LocalMedia localMedia = mAdapter.getData().get(position);
+        String path;
+        UplodFileState uplodFileState;
+        if (TextUtils.isEmpty(localMedia.getCompressPath())) {
+            uplodFileState = uplodFileStates.get(localMedia.getRealPath());
+        } else {
+            uplodFileState = uplodFileStates.get(localMedia.getCompressPath());
+        }
+        if (uplodFileState != null) {
+            path = uplodFileState.getFilePath();
+            try {
+                Call mCall = uplodFileStates.get(path).getThisCall();
+                if (mCall != null) {
+                    mCall.cancel();
+                    MyLog.d("progressRequestBody>>>" + "cancel銆嬨�嬨�媝ath:" + path);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            uplodFileStates.remove(path);
+        }
+    }
 }

--
Gitblit v1.8.0