From 449f796f05a1bab10d5a69d41bbadbd71a98cc6c Mon Sep 17 00:00:00 2001 From: cuizhibin Date: Tue, 5 Aug 2025 21:37:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/myapplication/LoginActivity.java | 1 - .../example/myapplication/MainActivity.java | 79 ++++++++++--------- .../Service/PhotoMonitoringService.java | 14 +++- .../Service/RecordingService.java | 3 +- .../myapplication/Tool/RetrofitClient.java | 4 +- 5 files changed, 56 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/com/example/myapplication/LoginActivity.java b/app/src/main/java/com/example/myapplication/LoginActivity.java index 1b7f511..8482f34 100644 --- a/app/src/main/java/com/example/myapplication/LoginActivity.java +++ b/app/src/main/java/com/example/myapplication/LoginActivity.java @@ -59,7 +59,6 @@ public class LoginActivity extends AppCompatActivity { private final String AUTH_TOKEN_KEY = "auth_token"; private static final String Name = "name"; private static final String Userid = "userid"; - private static final String BASE_URL = "http://pms.dtyx.net:9158/"; private String authToken = ""; private static final String PREFS_NAME = "LoginPrefs"; private static final String PREF_USERNAME = "username"; diff --git a/app/src/main/java/com/example/myapplication/MainActivity.java b/app/src/main/java/com/example/myapplication/MainActivity.java index d1415a3..a0750bf 100644 --- a/app/src/main/java/com/example/myapplication/MainActivity.java +++ b/app/src/main/java/com/example/myapplication/MainActivity.java @@ -1,5 +1,6 @@ package com.example.myapplication; +import android.Manifest; import android.annotation.SuppressLint; import android.app.DatePickerDialog; import android.app.NotificationChannel; @@ -34,16 +35,12 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; - -import androidx.annotation.Nullable; -import androidx.core.util.Pair; - import android.os.Looper; import android.provider.MediaStore; import android.provider.Settings; +import android.text.TextUtils; import android.util.Base64; import android.util.Log; - import android.util.SparseBooleanArray; import android.view.Gravity; import android.view.LayoutInflater; @@ -70,24 +67,22 @@ import android.widget.Spinner; import android.widget.TextView; import android.widget.TimePicker; import android.widget.Toast; -import android.Manifest; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; - +import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; - import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; +import androidx.core.util.Pair; import androidx.lifecycle.ViewModelStore; import androidx.lifecycle.ViewModelStoreOwner; import androidx.room.Room; - import com.chaquo.python.PyException; import com.chaquo.python.PyObject; import com.chaquo.python.Python; @@ -96,10 +91,8 @@ import com.example.myapplication.DataBase.DatabaseHelper; import com.example.myapplication.Service.FloatingWindowService; import com.example.myapplication.Service.PhotoMonitoringService; import com.example.myapplication.Service.RecordingService; -import com.example.myapplication.Tool.AuthInterceptor; import com.example.myapplication.Tool.BackgroundToast; import com.example.myapplication.Tool.DynamicDataFetcher; -import com.example.myapplication.Tool.PartListFetcher; import com.example.myapplication.Tool.PermissionUtils; import com.example.myapplication.Tool.ReportGenerator; import com.example.myapplication.Tool.ReportGeneratorHelper; @@ -123,16 +116,11 @@ import com.google.android.material.textfield.TextInputEditText; import org.json.JSONObject; -import okhttp3.*; -import retrofit2.Retrofit; - - import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; - import java.io.InputStream; import java.io.InputStreamReader; import java.net.SocketTimeoutException; @@ -140,7 +128,6 @@ import java.net.UnknownHostException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; - import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -154,11 +141,21 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; - import java.util.concurrent.TimeUnit; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.HttpUrl; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import retrofit2.Retrofit; // 在MainActivity类中添加以下变量 @@ -315,8 +312,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn private static final String PREF_REMEMBER = "remember"; private final String AUTH_TOKEN_KEY = "auth_token"; private String authToken = ""; -// private final String BASE_URL = "http://10.2.1.20:8888"; - private final String BASE_URL = "http://pms.dtyx.net:9158"; + private boolean init = false; @SuppressLint("UnspecifiedRegisterReceiverFlag") @Override @@ -331,7 +327,6 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn dbHelper = new DatabaseHelper(MainActivity.this); setupProjectListeners(); - loadProjectPreferences(); // 初始化项目下拉框 initProjectDropdown(); initTurbineDropdown(); @@ -503,14 +498,16 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn partAdapter.getFilter().filter(""); } - private void loadProjectPreferences() { + private void loadProjectPreferences(List projects) { + if (init) { + return; + } + init = true; boolean remember = sharedPreferences.getBoolean(PREF_REMEMBER, false); if (remember) { // 项目 String savedProject = sharedPreferences.getString(PREF_PROJECT, ""); - actvProject.setText(savedProject); - if (!savedProject.isEmpty()) { try { int lastBracketIndex = savedProject.lastIndexOf("("); @@ -519,7 +516,8 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) { projectName = savedProject.substring(0, lastBracketIndex).trim(); projectId = savedProject.substring(lastBracketIndex + 1, closingBracketIndex).trim(); - + dataManager.setProjectId(projectId); + actvProject.setText(projectName); } } catch (Exception e) { e.printStackTrace(); @@ -528,8 +526,6 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn // 机组 String savedTurbine = sharedPreferences.getString(PREF_TURBINE, ""); - actvTurbine.setText(savedTurbine); - if (!savedTurbine.isEmpty()) { try { int lastBracketIndex = savedTurbine.lastIndexOf("("); @@ -538,7 +534,9 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) { turbineName = savedTurbine.substring(0, lastBracketIndex).trim(); turbineId = savedTurbine.substring(lastBracketIndex + 1, closingBracketIndex).trim(); - + dataManager.setTurbineId(turbineId); + dataManager.setTurbineName(turbineName); + actvTurbine.setText(turbineName); } } catch (Exception e) { e.printStackTrace(); @@ -547,8 +545,6 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn // 部件 String savedPart = sharedPreferences.getString(PREF_PART, ""); - actvPart.setText(savedPart); - if (!savedPart.isEmpty()) { try { int lastBracketIndex = savedPart.lastIndexOf("("); @@ -557,7 +553,9 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) { partName = savedPart.substring(0, lastBracketIndex).trim(); partId = savedPart.substring(lastBracketIndex + 1, closingBracketIndex).trim(); - + dataManager.setPartId(partId); + dataManager.setPartName(partName); + actvPart.setText(partName); } } catch (Exception e) { e.printStackTrace(); @@ -684,7 +682,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn projectName = selectedProject.getProjectName(); projectId = selectedProject.getProjectId(); actvProject.setText(projectName); - sharedPreferences.edit().putString(PREF_PROJECT, projectName).apply(); + sharedPreferences.edit().putString(PREF_PROJECT, projectName + "(" + projectId + ")").apply(); dataManager.setProjectId(projectId); loadTurbines(); } else { @@ -761,7 +759,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn turbineName = selectedTurbine.getTurbineName(); turbineId = selectedTurbine.getTurbineId(); actvTurbine.setText(turbineName); - sharedPreferences.edit().putString(PREF_TURBINE, turbineName).apply(); + sharedPreferences.edit().putString(PREF_TURBINE, turbineName + "(" + turbineId + ")").apply(); dataManager.setTurbineId(turbineId); dataManager.setTurbineName(turbineName); loadParts(); @@ -840,7 +838,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn partName = selectedPart.getPartName(); partId = selectedPart.getPartId(); actvPart.setText(partName); - sharedPreferences.edit().putString(PREF_PART, partName).apply(); + sharedPreferences.edit().putString(PREF_PART, partName + "(" + partId + ")").apply(); dataManager.setPartId(partId); dataManager.setPartName(partName); } else { @@ -858,6 +856,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn public void onResponse(retrofit2.Call>> call, retrofit2.Response>> response) { if (response.isSuccessful() && response.body() != null) { handleSuccessProjectResponse(response.body().getData()); + loadProjectPreferences(response.body().getData()); } else { handleApiError(response); loadCachedProjects(); @@ -929,6 +928,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn } }); } + private void handleSuccessTurbineResponse(List turbines) { runOnUiThread(() -> { try { @@ -941,6 +941,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn } }); } + private void handleSuccessPartResponse(List parts) { runOnUiThread(() -> { try { @@ -2963,7 +2964,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn .build(); Request request = new Request.Builder() - .url(BASE_URL + "/video-file-info/batch-upload") + .url(RetrofitClient.BASE_URL + "/video-file-info/batch-upload") .addHeader("Authorization", authToken)// 修改为您的视频上传URL .post(requestBody) .build(); @@ -3570,9 +3571,9 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn // 未设置部件id时调用批量上传项目文件的接口 HttpUrl httpUrl = null; if (partId.isEmpty()) { - httpUrl = HttpUrl.parse(BASE_URL + "/image/" + project + "/" + imageSource + "/upload-batch"); + httpUrl = HttpUrl.parse(RetrofitClient.BASE_URL + "/image/" + project + "/" + imageSource + "/upload-batch"); } else { - httpUrl = HttpUrl.parse(BASE_URL + "/image/" + imageSource + "/upload-batch/" + partId); + httpUrl = HttpUrl.parse(RetrofitClient.BASE_URL + "/image/" + imageSource + "/upload-batch/" + partId); } // 构建请求URL HttpUrl.Builder urlBuilder = httpUrl @@ -3621,7 +3622,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn db.imageDao().insert(new ImageEntity(filePath, time, latitude, longitude, altitude, user, audioPath, project, partId, partName, turbineId, turbineName, - true,Temperator, Humidity, Weather, imageSource)); + true, Temperator, Humidity, Weather, imageSource)); }); } else { BackgroundToast.show(MainActivity.this, @@ -4521,7 +4522,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn // 4. 构建请求 Request.Builder requestBuilder = new Request.Builder() - .url(BASE_URL + "/audio/upload/" + imageId) + .url(RetrofitClient.BASE_URL + "/audio/upload/" + imageId) .post(requestBody); if (token != null && !token.isEmpty()) { diff --git a/app/src/main/java/com/example/myapplication/Service/PhotoMonitoringService.java b/app/src/main/java/com/example/myapplication/Service/PhotoMonitoringService.java index 32661b3..725d36d 100644 --- a/app/src/main/java/com/example/myapplication/Service/PhotoMonitoringService.java +++ b/app/src/main/java/com/example/myapplication/Service/PhotoMonitoringService.java @@ -30,6 +30,7 @@ import com.example.myapplication.DataBase.AppDatabase; import com.example.myapplication.R; import com.example.myapplication.Tool.BackgroundToast; import com.example.myapplication.Tool.NotificationReceiver; +import com.example.myapplication.Tool.RetrofitClient; import com.example.myapplication.model.ImageEntity; import com.example.myapplication.model.SharedDataManager; @@ -271,7 +272,7 @@ public class PhotoMonitoringService extends Service implements SharedDataManager synchronized (uploadLock) { for (ImageEntity image : history) { uploadPhoto(image.path, image.time, lastKnownLocation, image.user, - image.audioPath, image.project, image.partId, image.turbineId, + image.audioPath, image.project, image.turbineId, image.partId, image.imageSource); } } @@ -378,7 +379,7 @@ public class PhotoMonitoringService extends Service implements SharedDataManager db2.imageDao().deleteAll(); uploadPhoto(path, time, lastKnownLocation, user, - audioPath, projectId, partId, turbineId, partId); + audioPath, projectId, turbineId, partId, ChooseImageSource); }); } @@ -415,8 +416,15 @@ public class PhotoMonitoringService extends Service implements SharedDataManager double longitude = location != null ? location.getLongitude() : 0; double altitude = location != null ? location.getAltitude() : 0; +// 未设置部件id时调用批量上传项目文件的接口 + HttpUrl httpUrl = null; + if (partId.isEmpty()) { + httpUrl = HttpUrl.parse(RetrofitClient.BASE_URL + "image/" + project + "/" + imageSource + "/upload"); + } else { + httpUrl = HttpUrl.parse(RetrofitClient.BASE_URL + "image/" + imageSource + "/upload/" + partId); + } // 构建请求URL - HttpUrl.Builder urlBuilder = HttpUrl.parse("http://pms.dtyx.net:9158/image/" + imageSource + "/upload/" + partId) + HttpUrl.Builder urlBuilder = httpUrl .newBuilder() .addQueryParameter("collectorId",UserId) .addQueryParameter("collectorName", user) diff --git a/app/src/main/java/com/example/myapplication/Service/RecordingService.java b/app/src/main/java/com/example/myapplication/Service/RecordingService.java index 8a3a334..92e4b3e 100644 --- a/app/src/main/java/com/example/myapplication/Service/RecordingService.java +++ b/app/src/main/java/com/example/myapplication/Service/RecordingService.java @@ -30,6 +30,7 @@ import com.example.myapplication.DataBase.AppDatabase; import com.example.myapplication.R; import com.example.myapplication.Tool.BackgroundToast; +import com.example.myapplication.Tool.RetrofitClient; import com.example.myapplication.model.AudioEntity; import com.example.myapplication.model.SharedDataManager; @@ -282,7 +283,7 @@ public class RecordingService extends Service implements SharedDataManager.DataC // 4. 构建请求 Request.Builder requestBuilder = new Request.Builder() - .url("http://pms.dtyx.net:9158/audio/upload/" + imageId) + .url(RetrofitClient.BASE_URL + "audio/upload/" + imageId) .post(requestBody); if (token != null && !token.isEmpty()) { diff --git a/app/src/main/java/com/example/myapplication/Tool/RetrofitClient.java b/app/src/main/java/com/example/myapplication/Tool/RetrofitClient.java index de56fc4..81240fa 100644 --- a/app/src/main/java/com/example/myapplication/Tool/RetrofitClient.java +++ b/app/src/main/java/com/example/myapplication/Tool/RetrofitClient.java @@ -7,7 +7,9 @@ import retrofit2.converter.gson.GsonConverterFactory; import java.util.concurrent.TimeUnit; public class RetrofitClient { - private static final String BASE_URL = "http://pms.dtyx.net:9158/"; +// public static final String BASE_URL = "http://10.2.1.20:8888/"; + public static final String BASE_URL = "http://pms.dtyx.net:9158/"; + private static Retrofit retrofit; public static Retrofit getClient(String authToken) {