修复问题
huangwei 9 months ago
parent a4db733512
commit 56064ea46a
  1. 20
      app/src/main/java/com/bingce/controlnetwork/fragment/PointListFragment.java
  2. 265
      app/src/main/java/com/bingce/controlnetwork/util/ImportPointsUtilPla.java
  3. 2
      control_common

@ -10,14 +10,12 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread;
import com.bingce.controlapphelper.datasource.database.ProjectType; import com.bingce.controlapphelper.datasource.database.ProjectType;
import com.bingce.controlapphelper.datasource.database.SurveyorDatabaseFactory; import com.bingce.controlapphelper.datasource.database.SurveyorDatabaseFactory;
import com.bingce.controlapphelper.datasource.database.point.PointRecord; import com.bingce.controlapphelper.datasource.database.point.PointRecord;
import com.bingce.controlapphelper.model.BundleConstants; import com.bingce.controlapphelper.model.BundleConstants;
import com.bingce.controlapphelper.util.Tools; import com.bingce.controlapphelper.util.Tools;
import com.bingce.controlapphelper.util.importpoint.ImportPointsUtil;
import com.bingce.controlapphelper.widget.swiperecyclerview.widget.DefaultItemDecoration; import com.bingce.controlapphelper.widget.swiperecyclerview.widget.DefaultItemDecoration;
import com.bingce.controlnetwork.R; import com.bingce.controlnetwork.R;
import com.bingce.controlnetwork.activity.fragmentcontainer.FragmentContainerActivity; import com.bingce.controlnetwork.activity.fragmentcontainer.FragmentContainerActivity;
@ -27,16 +25,12 @@ import com.bingce.controlnetwork.newui.base.BaseFragmentBinding;
import com.bingce.controlnetwork.newui.createeditpoint.CreateEditPointActvity; import com.bingce.controlnetwork.newui.createeditpoint.CreateEditPointActvity;
import com.bingce.controlnetwork.newui.widget.swipemenu.SwipeMenuEditDelete; import com.bingce.controlnetwork.newui.widget.swipemenu.SwipeMenuEditDelete;
import com.bingce.controlnetwork.util.DialogUtil; import com.bingce.controlnetwork.util.DialogUtil;
import com.bingce.coordlib.model.Blh; import com.bingce.controlnetwork.util.ImportPointsUtilPla;
import com.bingce.coordlib.model.Coordinate;
import com.bingce.coordlib.model.CoordinateSystem;
import com.bingce.utils.ThreadPoolUtil; import com.bingce.utils.ThreadPoolUtil;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import blankj.utilcode.util.ToastUtils;
/** /**
* 点列表 * 点列表
@ -48,7 +42,7 @@ public class PointListFragment extends BaseFragmentBinding<NewFragmentPointListB
// private PointRecordAdapter adapter; // private PointRecordAdapter adapter;
private PointListAdapter adapter; private PointListAdapter adapter;
@NonNull @NonNull
private final ImportPointsUtil importPointsUtil; private final ImportPointsUtilPla importPointsUtil;
/** /**
* 去未知点列表 * 去未知点列表
@ -97,7 +91,7 @@ public class PointListFragment extends BaseFragmentBinding<NewFragmentPointListB
} }
public PointListFragment() { public PointListFragment() {
importPointsUtil = new ImportPointsUtil(this); importPointsUtil = new ImportPointsUtilPla(this);
} }
/** /**
@ -176,8 +170,14 @@ public class PointListFragment extends BaseFragmentBinding<NewFragmentPointListB
* 清空点 * 清空点
*/ */
private void clearPoints(String pointType, String projectId) { private void clearPoints(String pointType, String projectId) {
String hint = "";
if (PointRecord.TYPE_KNOWN_POINT.equals(pointType)) {
hint = getString(R.string.tips_ready_2_clear_all_known_point);
} else if (PointRecord.TYPE_UNKNOWN_POINT.equals(pointType)) {
hint = getString(R.string.tips_ready_2_clear_all_unknown_point);
}
DialogUtil.showConfirmCountDownDialog(getChildFragmentManager(), getViewLifecycleOwner(), DialogUtil.showConfirmCountDownDialog(getChildFragmentManager(), getViewLifecycleOwner(),
getString(R.string.tips_ready_2_clear_all_known_point), hint,
Tools.getString(R.string.confirm), () -> SurveyorDatabaseFactory Tools.getString(R.string.confirm), () -> SurveyorDatabaseFactory
.instance .instance
.getPointDataSource() .getPointDataSource()

@ -0,0 +1,265 @@
package com.bingce.controlnetwork.util;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import androidx.fragment.app.Fragment;
import com.afollestad.materialdialogs.MaterialDialog;
import com.bingce.BaseApp;
import com.bingce.controlapphelper.R;
import com.bingce.controlapphelper.datasource.database.SurveyorDatabaseFactory;
import com.bingce.controlapphelper.datasource.database.point.PointRecord;
import com.bingce.controlapphelper.util.CheckStorageUtil;
import com.bingce.controlapphelper.util.importpoint.PointLibraryUtil;
import com.bingce.surveyor.agentweb.AgentWebActivity;
import com.bingce.utils.ThreadPoolUtil;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import blankj.utilcode.util.ToastUtils;
import blankj.utilcode.util.Utils;
import ru.bartwell.exfilepicker.ExFilePicker;
import ru.bartwell.exfilepicker.data.ExFilePickerResult;
public class ImportPointsUtilPla {
private static final int THEME = android.R.style.Theme_Material_Dialog_Alert;
// private static final int THEME = android.R.style.ThemeOverlay_Material_Dialog_Alert;
@NonNull
private final Fragment fragment;
@NonNull
private final ActivityResultLauncher<Intent> activityResultLauncher;
private String projectId;
private String pointType;
private Context mContext;
private ImportFileType importFileType;
public ImportPointsUtilPla(@NonNull Fragment fragment) {
this.fragment = fragment;
activityResultLauncher = fragment.registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result != null && Activity.RESULT_OK == result.getResultCode()) {
Intent data = result.getData();
if (data != null) {
ExFilePickerResult object = ExFilePickerResult.getFromIntent(data);
if (object != null && object.getCount() > 0) {
try {
String path = object.getPath() + object.getNames().get(0);
List<PointRecord> list = new ArrayList<>();
String error = null;
switch (importFileType) {
case EXCLE:
error = PointLibraryUtil.importStakingJobPointExcel(new File(path),
(name, code, x, y, z, remarks) -> addPointToList(list, projectId, pointType, name, code, x, y, z, remarks, list.size()));
break;
case TEXT:
error = PointLibraryUtil.importStakingJobPointTxt(new File(path),
(name, code, x, y, z, remarks) -> addPointToList(list, projectId, pointType, name, code, x, y, z, remarks, list.size()));
break;
case CASS:
error = PointLibraryUtil.importStakingJobPointCassDat(new File(path), isCassXY(),
(name, code, x, y, z, remarks) -> addPointToList(list, projectId, pointType, name, code, x, y, z, remarks, list.size()));
break;
}
if (!TextUtils.isEmpty(error)) {
ToastUtils.showShort(error);
}
if (!list.isEmpty()) {
saveRecord(list);
}
} catch (Exception exception) {
exception.printStackTrace();
}
} else {
ToastUtils.showShort(R.string.file_is_empty);
}
}
}
});
}
/**
* 存储数据
* 查询是否有同名点 有同名提示是否覆盖点坐标信息没有同名直接保存
*
* @param list 读取的导入点列表
*/
private void saveRecord(List<PointRecord> list) {
Object waitObj = new Object();
ThreadPoolUtil.execute(() -> {
//获取已有的数据点
List<PointRecord> pointListAgo = SurveyorDatabaseFactory.instance.getPointDataSource().getListByProjectId(projectId, pointType);
Map<String, PointRecord> pointRecordAgoMap = new HashMap<>();
for (PointRecord pointRecordAgo : pointListAgo) {
pointRecordAgoMap.put(pointRecordAgo.getName(), pointRecordAgo);
}
//遍历要导入的数据点
for (PointRecord pointRecordImport : list) {
if (pointRecordAgoMap.containsKey(pointRecordImport.getName())) {
//存在同名 提示是否覆盖
showOverrideDialog(waitObj, pointRecordAgoMap.get(pointRecordImport.getName()), pointRecordImport);
synchronized (waitObj) {
try {
waitObj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} else {
savePointRecord(pointRecordImport);
}
}
});
}
@WorkerThread
private void savePointRecord(PointRecord pointRecord) {
SurveyorDatabaseFactory.instance.getPointDataSource().saveSync(pointRecord);
}
private void showOverrideDialog(Object waitObj, PointRecord pointRecordAgo, PointRecord pointImport) {
ThreadPoolUtil.executeInMain(() -> {
new MaterialDialog.Builder(mContext)
.title("提示")
.content("点名:" + pointRecordAgo.getName() + "重复,是否覆盖?")
.positiveText("覆盖")
.negativeText("不覆盖")
.neutralText("取消")
.onPositive((dialog, which) -> {
ThreadPoolUtil.execute(() -> {
synchronized (waitObj) {
pointRecordAgo.x = pointImport.x;
pointRecordAgo.y = pointImport.y;
pointRecordAgo.z = pointImport.z;
pointRecordAgo.remarks = pointImport.remarks;
pointRecordAgo.code = pointImport.code;
pointRecordAgo.category = pointImport.category;
savePointRecord(pointRecordAgo);
waitObj.notify();
}
});
})
.onNegative((dialog, which) -> {
synchronized (waitObj) {
waitObj.notify();
}
})
.show();
});
}
private void addPointToList(List<PointRecord> list, String projectId, String pointType, String name, String code, double x, double y, double z, String remarks, int orderIndex) {
PointRecord point = PointRecord.point(
projectId, pointType, name, code,
x, y, z,
remarks, list.size());
list.add(point);
}
/**
* 入口
*
* @param projectId
* @param pointType
*/
public void showImportDialog(String projectId, String pointType) {
this.projectId = projectId;
this.pointType = pointType;
mContext = fragment.requireContext();
importFileType = null;
new MaterialDialog.Builder(mContext)
.title(R.string.please_choose_import_format)
.items(new String[]{mContext.getString(R.string.excel_xls)
, mContext.getString(R.string.text_txt)
, mContext.getString(R.string.cass_dat_txt)})
.itemsCallback((dialog, itemView, which, text) -> {
switch (which) {
case 0:
importFileType = ImportFileType.EXCLE;
break;
case 1:
importFileType = ImportFileType.TEXT;
break;
case 2:
importFileType = ImportFileType.CASS;
break;
}
if (importFileType != null) {
showImportAppendOrOverideDialog();
}
}).show();
}
private void showImportAppendOrOverideDialog() {
String message = "";
switch (importFileType) {
case EXCLE:
message = mContext.getString(R.string.import_point_excel_guide);
break;
case TEXT:
message = mContext.getString(R.string.import_point_text_guide);
break;
case CASS:
if (isCassXY()) {
message = mContext.getString(R.string.import_point_cass_xy_dat);
} else {
message = mContext.getString(R.string.import_point_cass_yx_dat);
}
break;
}
new MaterialDialog.Builder(mContext)
.title(R.string.import_points)
.content(message)
.positiveText(R.string.import_points)
.neutralText(R.string.view_sample)
.onPositive((dialog, which) -> checkStoragePermission())
.onNeutral((dialog, which) -> {
AgentWebActivity.navigation2(mContext, "android_url_import_point_sample");
})
.show();
}
private void checkStoragePermission() {
CheckStorageUtil.check(mContext, this::selectFolder);
}
private void selectFolder() {
BaseApp app = (BaseApp) Utils.getApp();
ExFilePicker exFilePicker = new ExFilePicker();
exFilePicker.setLandscape(app.isLandscape());
exFilePicker.setShowOnlyExtensions(importFileType.filters);
activityResultLauncher.launch(exFilePicker.createIntent(fragment.requireContext()));
}
private enum ImportFileType {
EXCLE(new String[]{"xls", "xlsx"}),
TEXT(new String[]{"txt"}),
CASS(new String[]{"dat", "txt"});
private String[] filters;
ImportFileType(String[] filters) {
this.filters = filters;
}
}
private boolean isCassXY() {
return false;
}
}

@ -1 +1 @@
Subproject commit 8afd2f2b66bd232cf6f19e571e5c12efd5ad1b3d Subproject commit edf00a6ca7b5afe3a544292bf320eea526d2b511
Loading…
Cancel
Save