修复问题

This commit is contained in:
崔芝斌 2025-08-05 21:37:21 +08:00
parent c2f2e44c42
commit 449f796f05
5 changed files with 56 additions and 45 deletions

View File

@ -59,7 +59,6 @@ public class LoginActivity extends AppCompatActivity {
private final String AUTH_TOKEN_KEY = "auth_token"; private final String AUTH_TOKEN_KEY = "auth_token";
private static final String Name = "name"; private static final String Name = "name";
private static final String Userid = "userid"; private static final String Userid = "userid";
private static final String BASE_URL = "http://pms.dtyx.net:9158/";
private String authToken = ""; private String authToken = "";
private static final String PREFS_NAME = "LoginPrefs"; private static final String PREFS_NAME = "LoginPrefs";
private static final String PREF_USERNAME = "username"; private static final String PREF_USERNAME = "username";

View File

@ -1,5 +1,6 @@
package com.example.myapplication; package com.example.myapplication;
import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.DatePickerDialog; import android.app.DatePickerDialog;
import android.app.NotificationChannel; import android.app.NotificationChannel;
@ -34,16 +35,12 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import androidx.annotation.Nullable;
import androidx.core.util.Pair;
import android.os.Looper; import android.os.Looper;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.provider.Settings; import android.provider.Settings;
import android.text.TextUtils;
import android.util.Base64; import android.util.Base64;
import android.util.Log; import android.util.Log;
import android.util.SparseBooleanArray; import android.util.SparseBooleanArray;
import android.view.Gravity; import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -70,24 +67,22 @@ import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import android.widget.TimePicker; import android.widget.TimePicker;
import android.widget.Toast; import android.widget.Toast;
import android.Manifest;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider; import androidx.core.content.FileProvider;
import androidx.core.util.Pair;
import androidx.lifecycle.ViewModelStore; import androidx.lifecycle.ViewModelStore;
import androidx.lifecycle.ViewModelStoreOwner; import androidx.lifecycle.ViewModelStoreOwner;
import androidx.room.Room; import androidx.room.Room;
import com.chaquo.python.PyException; import com.chaquo.python.PyException;
import com.chaquo.python.PyObject; import com.chaquo.python.PyObject;
import com.chaquo.python.Python; 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.FloatingWindowService;
import com.example.myapplication.Service.PhotoMonitoringService; import com.example.myapplication.Service.PhotoMonitoringService;
import com.example.myapplication.Service.RecordingService; import com.example.myapplication.Service.RecordingService;
import com.example.myapplication.Tool.AuthInterceptor;
import com.example.myapplication.Tool.BackgroundToast; import com.example.myapplication.Tool.BackgroundToast;
import com.example.myapplication.Tool.DynamicDataFetcher; import com.example.myapplication.Tool.DynamicDataFetcher;
import com.example.myapplication.Tool.PartListFetcher;
import com.example.myapplication.Tool.PermissionUtils; import com.example.myapplication.Tool.PermissionUtils;
import com.example.myapplication.Tool.ReportGenerator; import com.example.myapplication.Tool.ReportGenerator;
import com.example.myapplication.Tool.ReportGeneratorHelper; import com.example.myapplication.Tool.ReportGeneratorHelper;
@ -123,16 +116,11 @@ import com.google.android.material.textfield.TextInputEditText;
import org.json.JSONObject; import org.json.JSONObject;
import okhttp3.*;
import retrofit2.Retrofit;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
@ -140,7 +128,6 @@ import java.net.UnknownHostException;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
@ -154,11 +141,21 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec; 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类中添加以下变量 // 在MainActivity类中添加以下变量
@ -315,8 +312,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
private static final String PREF_REMEMBER = "remember"; private static final String PREF_REMEMBER = "remember";
private final String AUTH_TOKEN_KEY = "auth_token"; private final String AUTH_TOKEN_KEY = "auth_token";
private String authToken = ""; private String authToken = "";
// private final String BASE_URL = "http://10.2.1.20:8888"; private boolean init = false;
private final String BASE_URL = "http://pms.dtyx.net:9158";
@SuppressLint("UnspecifiedRegisterReceiverFlag") @SuppressLint("UnspecifiedRegisterReceiverFlag")
@Override @Override
@ -331,7 +327,6 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
dbHelper = new DatabaseHelper(MainActivity.this); dbHelper = new DatabaseHelper(MainActivity.this);
setupProjectListeners(); setupProjectListeners();
loadProjectPreferences();
// 初始化项目下拉框 // 初始化项目下拉框
initProjectDropdown(); initProjectDropdown();
initTurbineDropdown(); initTurbineDropdown();
@ -503,14 +498,16 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
partAdapter.getFilter().filter(""); partAdapter.getFilter().filter("");
} }
private void loadProjectPreferences() { private void loadProjectPreferences(List<Project> projects) {
if (init) {
return;
}
init = true;
boolean remember = sharedPreferences.getBoolean(PREF_REMEMBER, false); boolean remember = sharedPreferences.getBoolean(PREF_REMEMBER, false);
if (remember) { if (remember) {
// 项目 // 项目
String savedProject = sharedPreferences.getString(PREF_PROJECT, ""); String savedProject = sharedPreferences.getString(PREF_PROJECT, "");
actvProject.setText(savedProject);
if (!savedProject.isEmpty()) { if (!savedProject.isEmpty()) {
try { try {
int lastBracketIndex = savedProject.lastIndexOf("("); int lastBracketIndex = savedProject.lastIndexOf("(");
@ -519,7 +516,8 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) { if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) {
projectName = savedProject.substring(0, lastBracketIndex).trim(); projectName = savedProject.substring(0, lastBracketIndex).trim();
projectId = savedProject.substring(lastBracketIndex + 1, closingBracketIndex).trim(); projectId = savedProject.substring(lastBracketIndex + 1, closingBracketIndex).trim();
dataManager.setProjectId(projectId);
actvProject.setText(projectName);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -528,8 +526,6 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
// 机组 // 机组
String savedTurbine = sharedPreferences.getString(PREF_TURBINE, ""); String savedTurbine = sharedPreferences.getString(PREF_TURBINE, "");
actvTurbine.setText(savedTurbine);
if (!savedTurbine.isEmpty()) { if (!savedTurbine.isEmpty()) {
try { try {
int lastBracketIndex = savedTurbine.lastIndexOf("("); int lastBracketIndex = savedTurbine.lastIndexOf("(");
@ -538,7 +534,9 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) { if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) {
turbineName = savedTurbine.substring(0, lastBracketIndex).trim(); turbineName = savedTurbine.substring(0, lastBracketIndex).trim();
turbineId = savedTurbine.substring(lastBracketIndex + 1, closingBracketIndex).trim(); turbineId = savedTurbine.substring(lastBracketIndex + 1, closingBracketIndex).trim();
dataManager.setTurbineId(turbineId);
dataManager.setTurbineName(turbineName);
actvTurbine.setText(turbineName);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -547,8 +545,6 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
// 部件 // 部件
String savedPart = sharedPreferences.getString(PREF_PART, ""); String savedPart = sharedPreferences.getString(PREF_PART, "");
actvPart.setText(savedPart);
if (!savedPart.isEmpty()) { if (!savedPart.isEmpty()) {
try { try {
int lastBracketIndex = savedPart.lastIndexOf("("); int lastBracketIndex = savedPart.lastIndexOf("(");
@ -557,7 +553,9 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) { if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) {
partName = savedPart.substring(0, lastBracketIndex).trim(); partName = savedPart.substring(0, lastBracketIndex).trim();
partId = savedPart.substring(lastBracketIndex + 1, closingBracketIndex).trim(); partId = savedPart.substring(lastBracketIndex + 1, closingBracketIndex).trim();
dataManager.setPartId(partId);
dataManager.setPartName(partName);
actvPart.setText(partName);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -684,7 +682,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
projectName = selectedProject.getProjectName(); projectName = selectedProject.getProjectName();
projectId = selectedProject.getProjectId(); projectId = selectedProject.getProjectId();
actvProject.setText(projectName); actvProject.setText(projectName);
sharedPreferences.edit().putString(PREF_PROJECT, projectName).apply(); sharedPreferences.edit().putString(PREF_PROJECT, projectName + "(" + projectId + ")").apply();
dataManager.setProjectId(projectId); dataManager.setProjectId(projectId);
loadTurbines(); loadTurbines();
} else { } else {
@ -761,7 +759,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
turbineName = selectedTurbine.getTurbineName(); turbineName = selectedTurbine.getTurbineName();
turbineId = selectedTurbine.getTurbineId(); turbineId = selectedTurbine.getTurbineId();
actvTurbine.setText(turbineName); actvTurbine.setText(turbineName);
sharedPreferences.edit().putString(PREF_TURBINE, turbineName).apply(); sharedPreferences.edit().putString(PREF_TURBINE, turbineName + "(" + turbineId + ")").apply();
dataManager.setTurbineId(turbineId); dataManager.setTurbineId(turbineId);
dataManager.setTurbineName(turbineName); dataManager.setTurbineName(turbineName);
loadParts(); loadParts();
@ -840,7 +838,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
partName = selectedPart.getPartName(); partName = selectedPart.getPartName();
partId = selectedPart.getPartId(); partId = selectedPart.getPartId();
actvPart.setText(partName); actvPart.setText(partName);
sharedPreferences.edit().putString(PREF_PART, partName).apply(); sharedPreferences.edit().putString(PREF_PART, partName + "(" + partId + ")").apply();
dataManager.setPartId(partId); dataManager.setPartId(partId);
dataManager.setPartName(partName); dataManager.setPartName(partName);
} else { } else {
@ -858,6 +856,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
public void onResponse(retrofit2.Call<ApiResponse<List<Project>>> call, retrofit2.Response<ApiResponse<List<Project>>> response) { public void onResponse(retrofit2.Call<ApiResponse<List<Project>>> call, retrofit2.Response<ApiResponse<List<Project>>> response) {
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
handleSuccessProjectResponse(response.body().getData()); handleSuccessProjectResponse(response.body().getData());
loadProjectPreferences(response.body().getData());
} else { } else {
handleApiError(response); handleApiError(response);
loadCachedProjects(); loadCachedProjects();
@ -929,6 +928,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
} }
}); });
} }
private void handleSuccessTurbineResponse(List<Turbine> turbines) { private void handleSuccessTurbineResponse(List<Turbine> turbines) {
runOnUiThread(() -> { runOnUiThread(() -> {
try { try {
@ -941,6 +941,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
} }
}); });
} }
private void handleSuccessPartResponse(List<PartResponse> parts) { private void handleSuccessPartResponse(List<PartResponse> parts) {
runOnUiThread(() -> { runOnUiThread(() -> {
try { try {
@ -2963,7 +2964,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
.build(); .build();
Request request = new Request.Builder() 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 .addHeader("Authorization", authToken)// 修改为您的视频上传URL
.post(requestBody) .post(requestBody)
.build(); .build();
@ -3570,9 +3571,9 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
// 未设置部件id时调用批量上传项目文件的接口 // 未设置部件id时调用批量上传项目文件的接口
HttpUrl httpUrl = null; HttpUrl httpUrl = null;
if (partId.isEmpty()) { 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 { } else {
httpUrl = HttpUrl.parse(BASE_URL + "/image/" + imageSource + "/upload-batch/" + partId); httpUrl = HttpUrl.parse(RetrofitClient.BASE_URL + "/image/" + imageSource + "/upload-batch/" + partId);
} }
// 构建请求URL // 构建请求URL
HttpUrl.Builder urlBuilder = httpUrl HttpUrl.Builder urlBuilder = httpUrl
@ -3621,7 +3622,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
db.imageDao().insert(new ImageEntity(filePath, time, db.imageDao().insert(new ImageEntity(filePath, time,
latitude, longitude, altitude, user, audioPath, latitude, longitude, altitude, user, audioPath,
project, partId, partName, turbineId, turbineName, project, partId, partName, turbineId, turbineName,
true,Temperator, Humidity, Weather, imageSource)); true, Temperator, Humidity, Weather, imageSource));
}); });
} else { } else {
BackgroundToast.show(MainActivity.this, BackgroundToast.show(MainActivity.this,
@ -4521,7 +4522,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
// 4. 构建请求 // 4. 构建请求
Request.Builder requestBuilder = new Request.Builder() Request.Builder requestBuilder = new Request.Builder()
.url(BASE_URL + "/audio/upload/" + imageId) .url(RetrofitClient.BASE_URL + "/audio/upload/" + imageId)
.post(requestBody); .post(requestBody);
if (token != null && !token.isEmpty()) { if (token != null && !token.isEmpty()) {

View File

@ -30,6 +30,7 @@ import com.example.myapplication.DataBase.AppDatabase;
import com.example.myapplication.R; import com.example.myapplication.R;
import com.example.myapplication.Tool.BackgroundToast; import com.example.myapplication.Tool.BackgroundToast;
import com.example.myapplication.Tool.NotificationReceiver; import com.example.myapplication.Tool.NotificationReceiver;
import com.example.myapplication.Tool.RetrofitClient;
import com.example.myapplication.model.ImageEntity; import com.example.myapplication.model.ImageEntity;
import com.example.myapplication.model.SharedDataManager; import com.example.myapplication.model.SharedDataManager;
@ -271,7 +272,7 @@ public class PhotoMonitoringService extends Service implements SharedDataManager
synchronized (uploadLock) { synchronized (uploadLock) {
for (ImageEntity image : history) { for (ImageEntity image : history) {
uploadPhoto(image.path, image.time, lastKnownLocation, image.user, 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); image.imageSource);
} }
} }
@ -378,7 +379,7 @@ public class PhotoMonitoringService extends Service implements SharedDataManager
db2.imageDao().deleteAll(); db2.imageDao().deleteAll();
uploadPhoto(path, time, lastKnownLocation, user, 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 longitude = location != null ? location.getLongitude() : 0;
double altitude = location != null ? location.getAltitude() : 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 // 构建请求URL
HttpUrl.Builder urlBuilder = HttpUrl.parse("http://pms.dtyx.net:9158/image/" + imageSource + "/upload/" + partId) HttpUrl.Builder urlBuilder = httpUrl
.newBuilder() .newBuilder()
.addQueryParameter("collectorId",UserId) .addQueryParameter("collectorId",UserId)
.addQueryParameter("collectorName", user) .addQueryParameter("collectorName", user)

View File

@ -30,6 +30,7 @@ import com.example.myapplication.DataBase.AppDatabase;
import com.example.myapplication.R; import com.example.myapplication.R;
import com.example.myapplication.Tool.BackgroundToast; import com.example.myapplication.Tool.BackgroundToast;
import com.example.myapplication.Tool.RetrofitClient;
import com.example.myapplication.model.AudioEntity; import com.example.myapplication.model.AudioEntity;
import com.example.myapplication.model.SharedDataManager; import com.example.myapplication.model.SharedDataManager;
@ -282,7 +283,7 @@ public class RecordingService extends Service implements SharedDataManager.DataC
// 4. 构建请求 // 4. 构建请求
Request.Builder requestBuilder = new Request.Builder() Request.Builder requestBuilder = new Request.Builder()
.url("http://pms.dtyx.net:9158/audio/upload/" + imageId) .url(RetrofitClient.BASE_URL + "audio/upload/" + imageId)
.post(requestBody); .post(requestBody);
if (token != null && !token.isEmpty()) { if (token != null && !token.isEmpty()) {

View File

@ -7,7 +7,9 @@ import retrofit2.converter.gson.GsonConverterFactory;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class RetrofitClient { 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; private static Retrofit retrofit;
public static Retrofit getClient(String authToken) { public static Retrofit getClient(String authToken) {