diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8a19020..5abe4b7 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -16,7 +16,7 @@ R.mipmap.zgry, R.mipmap.ajcx, R.mipmap.dtck); public static final List ITEMS = Arrays.asList( - "案卷上报", "快速上报", "三包上报", + "案卷上报", "快速上报", "五包上报", "案卷核实", "案卷核查", "案卷处理", "紧急要件", "超时督办", "统计分析", "在岗人员", "案卷查询", "地图查看"); @@ -38,12 +38,12 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - //先预置十种颜色 - public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), - Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), - Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), - Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), - Color.rgb(172, 217, 243)}; + //先预置8种颜色 + public static final int[] PIE_COLORS = {Color.rgb(28, 197, 220), + Color.rgb(255, 223, 107), Color.rgb(242, 17, 112), + Color.rgb(254, 254, 204), Color.rgb(251, 54, 64), + Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), + Color.rgb(120, 104, 230)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -54,6 +54,5 @@ public static final String NOTICE_MSG = "receivePush"; public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 - public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/"; //部件点图层 - public final static String[] fieldArrayGrid = new String[]{"OBJECTID", "BGID"};// geocode + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer"; //部件点图层 } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8a19020..5abe4b7 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -16,7 +16,7 @@ R.mipmap.zgry, R.mipmap.ajcx, R.mipmap.dtck); public static final List ITEMS = Arrays.asList( - "案卷上报", "快速上报", "三包上报", + "案卷上报", "快速上报", "五包上报", "案卷核实", "案卷核查", "案卷处理", "紧急要件", "超时督办", "统计分析", "在岗人员", "案卷查询", "地图查看"); @@ -38,12 +38,12 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - //先预置十种颜色 - public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), - Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), - Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), - Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), - Color.rgb(172, 217, 243)}; + //先预置8种颜色 + public static final int[] PIE_COLORS = {Color.rgb(28, 197, 220), + Color.rgb(255, 223, 107), Color.rgb(242, 17, 112), + Color.rgb(254, 254, 204), Color.rgb(251, 54, 64), + Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), + Color.rgb(120, 104, 230)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -54,6 +54,5 @@ public static final String NOTICE_MSG = "receivePush"; public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 - public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/"; //部件点图层 - public final static String[] fieldArrayGrid = new String[]{"OBJECTID", "BGID"};// geocode + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3f932ff..5f49244 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -242,41 +243,38 @@ android:text="案卷情况" android:textSize="@dimen/textFontSize" /> - + android:layout_toStartOf="@id/voiceView" + android:background="@drawable/bg_layout" + android:gravity="top" + android:hint="请输入少于50个字的案卷情况描述" + android:maxLength="50" + android:padding="3dp" /> - - - - + + android:background="@drawable/bg_layout" + android:padding="13dp" + android:src="@drawable/ic_voice" /> @@ -295,18 +293,14 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" - android:orientation="horizontal"> + android:orientation="vertical"> - + android:layout_marginBottom="10dp" + android:scrollbars="none" /> - - - + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8a19020..5abe4b7 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -16,7 +16,7 @@ R.mipmap.zgry, R.mipmap.ajcx, R.mipmap.dtck); public static final List ITEMS = Arrays.asList( - "案卷上报", "快速上报", "三包上报", + "案卷上报", "快速上报", "五包上报", "案卷核实", "案卷核查", "案卷处理", "紧急要件", "超时督办", "统计分析", "在岗人员", "案卷查询", "地图查看"); @@ -38,12 +38,12 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - //先预置十种颜色 - public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), - Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), - Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), - Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), - Color.rgb(172, 217, 243)}; + //先预置8种颜色 + public static final int[] PIE_COLORS = {Color.rgb(28, 197, 220), + Color.rgb(255, 223, 107), Color.rgb(242, 17, 112), + Color.rgb(254, 254, 204), Color.rgb(251, 54, 64), + Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), + Color.rgb(120, 104, 230)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -54,6 +54,5 @@ public static final String NOTICE_MSG = "receivePush"; public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 - public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/"; //部件点图层 - public final static String[] fieldArrayGrid = new String[]{"OBJECTID", "BGID"};// geocode + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3f932ff..5f49244 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -242,41 +243,38 @@ android:text="案卷情况" android:textSize="@dimen/textFontSize" /> - + android:layout_toStartOf="@id/voiceView" + android:background="@drawable/bg_layout" + android:gravity="top" + android:hint="请输入少于50个字的案卷情况描述" + android:maxLength="50" + android:padding="3dp" /> - - - - + + android:background="@drawable/bg_layout" + android:padding="13dp" + android:src="@drawable/ic_voice" /> @@ -295,18 +293,14 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" - android:orientation="horizontal"> + android:orientation="vertical"> - + android:layout_marginBottom="10dp" + android:scrollbars="none" /> - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a5b3395..43f6748 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -249,6 +250,7 @@ android:layout_marginStart="100dp" android:layout_marginEnd="10dp" android:background="@drawable/bg_layout" + android:hint="请输入少于50个字的案卷情况描述" android:maxLength="50" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -302,4 +304,4 @@ app:qmui_radius="5dp" /> - + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8a19020..5abe4b7 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -16,7 +16,7 @@ R.mipmap.zgry, R.mipmap.ajcx, R.mipmap.dtck); public static final List ITEMS = Arrays.asList( - "案卷上报", "快速上报", "三包上报", + "案卷上报", "快速上报", "五包上报", "案卷核实", "案卷核查", "案卷处理", "紧急要件", "超时督办", "统计分析", "在岗人员", "案卷查询", "地图查看"); @@ -38,12 +38,12 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - //先预置十种颜色 - public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), - Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), - Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), - Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), - Color.rgb(172, 217, 243)}; + //先预置8种颜色 + public static final int[] PIE_COLORS = {Color.rgb(28, 197, 220), + Color.rgb(255, 223, 107), Color.rgb(242, 17, 112), + Color.rgb(254, 254, 204), Color.rgb(251, 54, 64), + Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), + Color.rgb(120, 104, 230)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -54,6 +54,5 @@ public static final String NOTICE_MSG = "receivePush"; public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 - public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/"; //部件点图层 - public final static String[] fieldArrayGrid = new String[]{"OBJECTID", "BGID"};// geocode + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3f932ff..5f49244 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -242,41 +243,38 @@ android:text="案卷情况" android:textSize="@dimen/textFontSize" /> - + android:layout_toStartOf="@id/voiceView" + android:background="@drawable/bg_layout" + android:gravity="top" + android:hint="请输入少于50个字的案卷情况描述" + android:maxLength="50" + android:padding="3dp" /> - - - - + + android:background="@drawable/bg_layout" + android:padding="13dp" + android:src="@drawable/ic_voice" /> @@ -295,18 +293,14 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" - android:orientation="horizontal"> + android:orientation="vertical"> - + android:layout_marginBottom="10dp" + android:scrollbars="none" /> - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a5b3395..43f6748 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -249,6 +250,7 @@ android:layout_marginStart="100dp" android:layout_marginEnd="10dp" android:background="@drawable/bg_layout" + android:hint="请输入少于50个字的案卷情况描述" android:maxLength="50" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -302,4 +304,4 @@ app:qmui_radius="5dp" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_handle.xml b/app/src/main/res/layout/activity_handle.xml new file mode 100644 index 0000000..4fb2556 --- /dev/null +++ b/app/src/main/res/layout/activity_handle.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8a19020..5abe4b7 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -16,7 +16,7 @@ R.mipmap.zgry, R.mipmap.ajcx, R.mipmap.dtck); public static final List ITEMS = Arrays.asList( - "案卷上报", "快速上报", "三包上报", + "案卷上报", "快速上报", "五包上报", "案卷核实", "案卷核查", "案卷处理", "紧急要件", "超时督办", "统计分析", "在岗人员", "案卷查询", "地图查看"); @@ -38,12 +38,12 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - //先预置十种颜色 - public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), - Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), - Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), - Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), - Color.rgb(172, 217, 243)}; + //先预置8种颜色 + public static final int[] PIE_COLORS = {Color.rgb(28, 197, 220), + Color.rgb(255, 223, 107), Color.rgb(242, 17, 112), + Color.rgb(254, 254, 204), Color.rgb(251, 54, 64), + Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), + Color.rgb(120, 104, 230)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -54,6 +54,5 @@ public static final String NOTICE_MSG = "receivePush"; public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 - public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/"; //部件点图层 - public final static String[] fieldArrayGrid = new String[]{"OBJECTID", "BGID"};// geocode + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3f932ff..5f49244 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -242,41 +243,38 @@ android:text="案卷情况" android:textSize="@dimen/textFontSize" /> - + android:layout_toStartOf="@id/voiceView" + android:background="@drawable/bg_layout" + android:gravity="top" + android:hint="请输入少于50个字的案卷情况描述" + android:maxLength="50" + android:padding="3dp" /> - - - - + + android:background="@drawable/bg_layout" + android:padding="13dp" + android:src="@drawable/ic_voice" /> @@ -295,18 +293,14 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" - android:orientation="horizontal"> + android:orientation="vertical"> - + android:layout_marginBottom="10dp" + android:scrollbars="none" /> - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a5b3395..43f6748 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -249,6 +250,7 @@ android:layout_marginStart="100dp" android:layout_marginEnd="10dp" android:background="@drawable/bg_layout" + android:hint="请输入少于50个字的案卷情况描述" android:maxLength="50" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -302,4 +304,4 @@ app:qmui_radius="5dp" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_handle.xml b/app/src/main/res/layout/activity_handle.xml new file mode 100644 index 0000000..4fb2556 --- /dev/null +++ b/app/src/main/res/layout/activity_handle.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_map_watch.xml b/app/src/main/res/layout/activity_map_watch.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_map_watch.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8a19020..5abe4b7 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -16,7 +16,7 @@ R.mipmap.zgry, R.mipmap.ajcx, R.mipmap.dtck); public static final List ITEMS = Arrays.asList( - "案卷上报", "快速上报", "三包上报", + "案卷上报", "快速上报", "五包上报", "案卷核实", "案卷核查", "案卷处理", "紧急要件", "超时督办", "统计分析", "在岗人员", "案卷查询", "地图查看"); @@ -38,12 +38,12 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - //先预置十种颜色 - public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), - Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), - Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), - Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), - Color.rgb(172, 217, 243)}; + //先预置8种颜色 + public static final int[] PIE_COLORS = {Color.rgb(28, 197, 220), + Color.rgb(255, 223, 107), Color.rgb(242, 17, 112), + Color.rgb(254, 254, 204), Color.rgb(251, 54, 64), + Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), + Color.rgb(120, 104, 230)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -54,6 +54,5 @@ public static final String NOTICE_MSG = "receivePush"; public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 - public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/"; //部件点图层 - public final static String[] fieldArrayGrid = new String[]{"OBJECTID", "BGID"};// geocode + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3f932ff..5f49244 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -242,41 +243,38 @@ android:text="案卷情况" android:textSize="@dimen/textFontSize" /> - + android:layout_toStartOf="@id/voiceView" + android:background="@drawable/bg_layout" + android:gravity="top" + android:hint="请输入少于50个字的案卷情况描述" + android:maxLength="50" + android:padding="3dp" /> - - - - + + android:background="@drawable/bg_layout" + android:padding="13dp" + android:src="@drawable/ic_voice" /> @@ -295,18 +293,14 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" - android:orientation="horizontal"> + android:orientation="vertical"> - + android:layout_marginBottom="10dp" + android:scrollbars="none" /> - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a5b3395..43f6748 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -249,6 +250,7 @@ android:layout_marginStart="100dp" android:layout_marginEnd="10dp" android:background="@drawable/bg_layout" + android:hint="请输入少于50个字的案卷情况描述" android:maxLength="50" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -302,4 +304,4 @@ app:qmui_radius="5dp" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_handle.xml b/app/src/main/res/layout/activity_handle.xml new file mode 100644 index 0000000..4fb2556 --- /dev/null +++ b/app/src/main/res/layout/activity_handle.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_map_watch.xml b/app/src/main/res/layout/activity_map_watch.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_map_watch.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_online.xml b/app/src/main/res/layout/activity_online.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_online.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8a19020..5abe4b7 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -16,7 +16,7 @@ R.mipmap.zgry, R.mipmap.ajcx, R.mipmap.dtck); public static final List ITEMS = Arrays.asList( - "案卷上报", "快速上报", "三包上报", + "案卷上报", "快速上报", "五包上报", "案卷核实", "案卷核查", "案卷处理", "紧急要件", "超时督办", "统计分析", "在岗人员", "案卷查询", "地图查看"); @@ -38,12 +38,12 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - //先预置十种颜色 - public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), - Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), - Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), - Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), - Color.rgb(172, 217, 243)}; + //先预置8种颜色 + public static final int[] PIE_COLORS = {Color.rgb(28, 197, 220), + Color.rgb(255, 223, 107), Color.rgb(242, 17, 112), + Color.rgb(254, 254, 204), Color.rgb(251, 54, 64), + Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), + Color.rgb(120, 104, 230)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -54,6 +54,5 @@ public static final String NOTICE_MSG = "receivePush"; public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 - public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/"; //部件点图层 - public final static String[] fieldArrayGrid = new String[]{"OBJECTID", "BGID"};// geocode + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3f932ff..5f49244 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -242,41 +243,38 @@ android:text="案卷情况" android:textSize="@dimen/textFontSize" /> - + android:layout_toStartOf="@id/voiceView" + android:background="@drawable/bg_layout" + android:gravity="top" + android:hint="请输入少于50个字的案卷情况描述" + android:maxLength="50" + android:padding="3dp" /> - - - - + + android:background="@drawable/bg_layout" + android:padding="13dp" + android:src="@drawable/ic_voice" /> @@ -295,18 +293,14 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" - android:orientation="horizontal"> + android:orientation="vertical"> - + android:layout_marginBottom="10dp" + android:scrollbars="none" /> - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a5b3395..43f6748 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -249,6 +250,7 @@ android:layout_marginStart="100dp" android:layout_marginEnd="10dp" android:background="@drawable/bg_layout" + android:hint="请输入少于50个字的案卷情况描述" android:maxLength="50" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -302,4 +304,4 @@ app:qmui_radius="5dp" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_handle.xml b/app/src/main/res/layout/activity_handle.xml new file mode 100644 index 0000000..4fb2556 --- /dev/null +++ b/app/src/main/res/layout/activity_handle.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_map_watch.xml b/app/src/main/res/layout/activity_map_watch.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_map_watch.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_online.xml b/app/src/main/res/layout/activity_online.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_online.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_overtime.xml b/app/src/main/res/layout/activity_overtime.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_overtime.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8a19020..5abe4b7 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -16,7 +16,7 @@ R.mipmap.zgry, R.mipmap.ajcx, R.mipmap.dtck); public static final List ITEMS = Arrays.asList( - "案卷上报", "快速上报", "三包上报", + "案卷上报", "快速上报", "五包上报", "案卷核实", "案卷核查", "案卷处理", "紧急要件", "超时督办", "统计分析", "在岗人员", "案卷查询", "地图查看"); @@ -38,12 +38,12 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - //先预置十种颜色 - public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), - Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), - Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), - Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), - Color.rgb(172, 217, 243)}; + //先预置8种颜色 + public static final int[] PIE_COLORS = {Color.rgb(28, 197, 220), + Color.rgb(255, 223, 107), Color.rgb(242, 17, 112), + Color.rgb(254, 254, 204), Color.rgb(251, 54, 64), + Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), + Color.rgb(120, 104, 230)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -54,6 +54,5 @@ public static final String NOTICE_MSG = "receivePush"; public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 - public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/"; //部件点图层 - public final static String[] fieldArrayGrid = new String[]{"OBJECTID", "BGID"};// geocode + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3f932ff..5f49244 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -242,41 +243,38 @@ android:text="案卷情况" android:textSize="@dimen/textFontSize" /> - + android:layout_toStartOf="@id/voiceView" + android:background="@drawable/bg_layout" + android:gravity="top" + android:hint="请输入少于50个字的案卷情况描述" + android:maxLength="50" + android:padding="3dp" /> - - - - + + android:background="@drawable/bg_layout" + android:padding="13dp" + android:src="@drawable/ic_voice" /> @@ -295,18 +293,14 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" - android:orientation="horizontal"> + android:orientation="vertical"> - + android:layout_marginBottom="10dp" + android:scrollbars="none" /> - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a5b3395..43f6748 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -249,6 +250,7 @@ android:layout_marginStart="100dp" android:layout_marginEnd="10dp" android:background="@drawable/bg_layout" + android:hint="请输入少于50个字的案卷情况描述" android:maxLength="50" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -302,4 +304,4 @@ app:qmui_radius="5dp" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_handle.xml b/app/src/main/res/layout/activity_handle.xml new file mode 100644 index 0000000..4fb2556 --- /dev/null +++ b/app/src/main/res/layout/activity_handle.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_map_watch.xml b/app/src/main/res/layout/activity_map_watch.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_map_watch.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_online.xml b/app/src/main/res/layout/activity_online.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_online.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_overtime.xml b/app/src/main/res/layout/activity_overtime.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_overtime.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_package.xml b/app/src/main/res/layout/activity_package.xml new file mode 100644 index 0000000..65189fe --- /dev/null +++ b/app/src/main/res/layout/activity_package.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc9187f..1c47228 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,12 @@ + + + + + + featureQueryResult = featureTable.queryFeaturesAsync(parameters); -// featureQueryResult.addDoneListener(new Runnable() { -// @Override -// public void run() { -// try { -// FeatureQueryResult featureResult = featureQueryResult.get(); -// List fields = featureResult.getFields(); -// for (Field field : fields) { -// Log.d(TAG, "field: " + new Gson().toJson(field)); -// } -// } catch (ExecutionException | InterruptedException ex) { -// ex.printStackTrace(); -// } -// } -// }); + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + queryParameters.setReturnGeometry(true); - new QMUIDialog.MessageDialogBuilder(context) - .setTitle("提示") - .setMessage("该时间所在地点网格为[" + clickPoint.getX() + "," + clickPoint.getY() + "]确认提交?") - .setCanceledOnTouchOutside(false) - .addAction("取消", (dialog, index) -> dialog.dismiss()) - .addAction("确定", new QMUIDialogAction.ActionListener() { - @Override - public void onClick(QMUIDialog dialog, int index) { - dialog.dismiss(); - //TODO 点击地图获取到经纬度,传递给后台,获取到点附近的部件属性列表 - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - setResult(RESULT_OK, intent); - finish(); + //不管是时间还是部件,都的需要社区信息 + ListenableFuture communityFeatureResult = communityLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + communityFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = communityFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + //直接存sp + SaveKeyValues.putValue("CommunityName", feature.getAttributes().get("CommuName")); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + if (caseType.equals("事件")) { + //事件只需要获得gridId就行 + ListenableFuture unitFeatureResult = unitLayer.getFeatureTable().queryFeaturesAsync(queryParameters); + unitFeatureResult.addDoneListener(new Runnable() { + @Override + public void run() { + try { + FeatureQueryResult result = unitFeatureResult.get(); + Iterator iterator = result.iterator(); + Feature feature = iterator.next(); + + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104261; + message.obj = feature.getAttributes(); + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); } - }).create().show(); - return super.onSingleTapConfirmed(e); + } + }); + } else { + //取点 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } + Message message = weakReferenceHandler.obtainMessage(); + message.what = 202104262; + message.obj = pointList; + weakReferenceHandler.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + return true; } }); } -// public static FeatureSet executeQueryByGeometry(String queryUrl, Geometry geometry, String whereCause, -// Boolean returnGeometry, String[] outFields, SpatialRelationship spatialRelationship, -// SpatialReference outSpatialReference) throws Exception { -// FeatureSet result; -// Query query = new Query(); -// query.setGeometry(geometry); -// query.setReturnGeometry(returnGeometry); -// query.setWhere(whereCause); -// query.setOutSpatialReference(outSpatialReference); -// query.setSpatialRelationship(spatialRelationship); -// if (outFields != null && outFields.length > 0) { -// query.setOutFields(outFields); -// } -// QueryTask queryTask = new QueryTask(queryUrl); -// result = queryTask.execute(query); -// return result; -// } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + private WeakReferenceHandler(ArcGISMapActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + ArcGISMapActivity arcGISMapActivity = reference.get(); + Gson gson = arcGISMapActivity.gson; + String communityName = (String) SaveKeyValues.getValue("CommunityName", ""); + switch (msg.what) { + case 202104261: + Type unitType = new TypeToken() { + }.getType(); + UnitFeatureBean unitFeatureBean = gson.fromJson(gson.toJson(msg.obj), unitType); + String gridId = unitFeatureBean.getBGID(); +// Log.d(TAG, "UnitFeatureBean: " + gridId); + arcGISMapActivity.showDialog(gridId, communityName); + break; + case 202104262: + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(msg.obj), gridType); +// Log.d(TAG, "GridFeatureBean: " + gson.toJson(beans)); + arcGISMapActivity.showObjListDialog(beans, communityName); + break; + } + } + } + + private void showDialog(String gridId, String communityName) { + new QMUIDialog.MessageDialogBuilder(this) + .setTitle("提示") + .setMessage("该时间所在地点网格为[" + gridId + "]确认提交?") + .setCanceledOnTouchOutside(false) + .addAction("取消", (dialog, index) -> dialog.dismiss()) + .addAction("确定", new QMUIDialogAction.ActionListener() { + @Override + public void onClick(QMUIDialog dialog, int index) { + dialog.dismiss(); + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + }) + .create().show(); + } + + private void showObjListDialog(List beans, String communityName) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(this); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + for (GridFeatureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getOBJNAME() + "," + featureBean.getOBJECTID(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog(featureBean.getBGID(), communityName); + } + }); + } + menuDialogBuilder.create().show(); + } /** * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java new file mode 100644 index 0000000..078c445 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleActivity.java @@ -0,0 +1,68 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.widgets.NoScrollViewPager; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +public class CaseHandleActivity extends BaseActivity { + + private static final String TAG = "CaseHandleActivity"; + private static final String[] pageTitles = {"超时案卷", "紧急案卷", "待办案卷", "已办案卷"}; + @BindView(R.id.handleTopLayout) + QMUITopBarLayout handleTopLayout; + @BindView(R.id.handleTabLayout) + TabLayout handleTabLayout; + @BindView(R.id.handleViewPager) + NoScrollViewPager handleViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_handle; + } + + @Override + protected void setupTopBarLayout() { + handleTopLayout.setTitle("案卷处理").setTextColor(ContextCompat.getColor(this, R.color.white)); + handleTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + handleTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); +// fragmentList.add(new CaseCheckFragment()); +// fragmentList.add(new CaseCheckedFragment()); +// SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); +// handleViewPager.setAdapter(adapter); +// //绑定TabLayout +// handleTabLayout.setupWithViewPager(handleViewPager); +// LinearLayout linearLayout = (LinearLayout) handleTabLayout.getChildAt(0); +// linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); +// linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index e3b3a32..2e67e25 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -20,7 +20,6 @@ import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -45,7 +44,6 @@ RecyclerView caseRecyclerView; private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; private CaseListResultAdapter adapter; private String typeCode; private String typeDetailCode; @@ -88,12 +86,6 @@ startTime = getIntent().getStringExtra("startTime"); endTime = getIntent().getStringExtra("endTime"); eorc = getIntent().getStringExtra("eorc"); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); - //加载第一页 caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @@ -163,11 +155,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override public void obtainCaseListData(CaseListResultBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); @@ -194,11 +181,6 @@ } @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseListPresenter != null) { diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java index 241c810..de2fa49 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -4,21 +4,23 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; +import android.media.AudioManager; +import android.media.MediaPlayer; import android.media.MediaRecorder; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; -import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; import com.casic.dcms.bean.CaseSmallClassBean; @@ -39,17 +41,16 @@ import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StatusBarColorUtil; import com.casic.dcms.utils.ToastHelper; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import com.gyf.immersionbar.ImmersionBar; import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; @@ -57,10 +58,8 @@ import java.io.File; import java.io.IOException; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -73,32 +72,32 @@ @BindView(R.id.leftBackView) ImageView leftBackView; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) TextView caseLargeClassView; @BindView(R.id.caseSmallClassView) TextView caseSmallClassView; - - @BindView(R.id.communityNameView) - EditText communityNameView; @BindView(R.id.longitudeView) EditText longitudeView; @BindView(R.id.latitudeView) EditText latitudeView; + @BindView(R.id.communityNameView) + EditText communityNameView; @BindView(R.id.locationMapView) ImageView locationMapView; @BindView(R.id.caseLocationView) EditText caseLocationView; @BindView(R.id.caseDetailEditView) EditText caseDetailEditView; + @BindView(R.id.playAudioView) + TextView playAudioView; @BindView(R.id.voiceView) ImageView voiceView; @BindView(R.id.addImageView) ImageView addImageView; @BindView(R.id.selectedResultView) - GridView selectedResultView; + RecyclerView selectedResultView; @BindView(R.id.submitButton) QMUIRoundButton submitButton; @@ -111,13 +110,14 @@ private List smallClassBeans; private QMUITipDialog submitDialog; private Gson gson; - private List selectList = new ArrayList<>(); private UploadImagePresenterImpl uploadImagePresenter; private List mediaList = new ArrayList<>();//服务器返回的拍照或者视频数据集 private String eorc; private String typeCode; private String typeDetailCode; private UploadAudioPresenterImpl uploadAudioPresenter; + private ImageRecycleViewAdapter imageAdapter; + private MediaPlayer mediaPlayer; @Override public int initLayoutView() { @@ -151,6 +151,10 @@ .create(); uploadImagePresenter = new UploadImagePresenterImpl(this); uploadAudioPresenter = new UploadAudioPresenterImpl(this); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); } /** @@ -180,7 +184,7 @@ submitButton.setChangeAlphaWhenPress(true); } - @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.audioUploadView, R.id.addImageView, R.id.imageUploadView, R.id.submitButton}) + @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.locationMapView, R.id.addImageView, R.id.submitButton}) @Override public void onClick(View v) { switch (v.getId()) { @@ -198,8 +202,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -215,7 +218,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeCode = largeClassBeans.get(position).getTypeCode(); caseLargeClassView.setText(tag); @@ -223,7 +225,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -243,7 +245,6 @@ @Override public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { dialog.dismiss(); - typeDetailCode = smallClassBeans.get(position).getTypeDetailCode(); caseSmallClassView.setText(tag); @@ -254,24 +255,14 @@ } break; case R.id.locationMapView: - startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - break; - case R.id.audioUploadView: - if (!caseDetailEditView.getText().toString().contains("AUD_")) { - ToastHelper.showToast("操作失败,不是音频文件,无法上传!", ToastHelper.ERROR); + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); return; } - uploadAudioPresenter.onReadyRetrofitRequest(new File(outputFile.getAbsolutePath())); - break; - case R.id.imageUploadView: - if (selectList == null || selectList.size() == 0) { - ToastHelper.showToast("操作失败,没有选择任何图片,无法上传!", ToastHelper.ERROR); - return; - } - for (LocalMedia media : selectList) { - String mediaCompressPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); - } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.addImageView: new QMUIDialog.MenuDialogBuilder(this) @@ -291,14 +282,14 @@ takePicture(); } }) - .addItem("相机拍视频", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - //拍视频 - takeVideo(); - } - }) +// .addItem("相机拍视频", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.dismiss(); +// //拍视频 +// takeVideo(); +// } +// }) .setCanceledOnTouchOutside(false) .create().show(); break; @@ -314,11 +305,10 @@ PictureSelector.create(this) .openGallery(PictureMimeType.ofImage()) .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) + .maxSelectNum(2) .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.CHOOSE_REQUEST); } @@ -330,7 +320,6 @@ .isCompress(true) .compressQuality(80) .compressSavePath(FileUtils.getImageCompressPath()) - .selectionData(selectList) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -339,7 +328,7 @@ .openCamera(PictureMimeType.ofVideo()) .imageEngine(GlideLoadEngine.createGlideEngine()) .maxSelectNum(1) - .videoMaxSecond(5 * 60) + .videoMaxSecond(15) .forResult(PictureConfig.REQUEST_CAMERA); } @@ -349,22 +338,28 @@ if (resultCode == RESULT_OK) { switch (requestCode) { case PictureConfig.CHOOSE_REQUEST: - selectList = PictureSelector.obtainMultipleResult(data); - + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } break; case PictureConfig.REQUEST_CAMERA: LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); - + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); break; case Constant.REQUEST_MAP_CODE: if (data == null) { return; } - String pointJson = data.getStringExtra("pointJson"); - Type type = new TypeToken() { - }.getType(); - LatLng latLng = gson.fromJson(pointJson, type); - updateLocation(latLng); + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -372,37 +367,6 @@ } } - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void reOrderList(List list) { -// for (int i = 0; i < list.size(); i++) { -// LocalMedia localMedia = list.get(i); -// if (localMedia.getMimeType().equals("video/mp4")) { -// mediaList.add(0, localMedia);//视频必须放在第一个 -// } else { -// mediaList.add(localMedia); -// } -// } - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -510,16 +474,38 @@ submitDialog.show(); } + @SuppressLint("SetTextI18n") @Override public void obtainUploadResult(UploadAudioResultBean resultBean) { // Log.d(TAG, "obtainUploadResult: " + gson.toJson(resultBean)); if (resultBean.isSuccess()) { String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; - mediaList.add(url); - ToastHelper.showToast("案卷音频上传成功,可以提交案卷", ToastHelper.SUCCESS); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + caseDetailEditView.setVisibility(View.GONE); + playAudioView.setVisibility(View.VISIBLE); + try { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setDataSource(url); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mediaPlayer.prepare(); + } catch (IOException e) { + e.printStackTrace(); + } + playAudioView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mediaPlayer.isPlaying()) { + playAudioView.setText(mediaPlayer.getDuration() / 1000 + "''"); + mediaPlayer.start(); + } + } + }); } else { - ToastHelper.showToast("案卷音频上传失败,请重试", ToastHelper.ERROR); + caseDetailEditView.setVisibility(View.VISIBLE); + playAudioView.setVisibility(View.GONE); } } @@ -535,9 +521,29 @@ String data = resultBean.getData().replace("\\", "/"); String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; mediaList.add(url); - ToastHelper.showToast("案卷图片上传成功,可以提交案卷", ToastHelper.SUCCESS); - } else { - ToastHelper.showToast("案卷图片上传失败,请重试", ToastHelper.ERROR); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); } } @@ -556,8 +562,8 @@ if (TextUtils.isEmpty(description)) { ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING); } - if (mediaList.size() == 0) { - ToastHelper.showToast("没有案卷图片,请先上传图片!", ToastHelper.WARING); + if (mediaList.size() != 2) { + ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java index 755eab5..af88245 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -3,8 +3,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.location.Address; -import android.location.Geocoder; import android.text.TextUtils; import android.view.View; import android.widget.EditText; @@ -46,17 +44,14 @@ import com.luck.picture.lib.config.PictureMimeType; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.tools.PictureFileUtils; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import butterknife.BindView; import butterknife.OnClick; @@ -107,6 +102,7 @@ private String typeCode; private String typeDetailCode; private ImageRecycleViewAdapter imageAdapter; + private String gridId; @Override public int initLayoutView() { @@ -167,8 +163,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -192,7 +187,7 @@ //获取案卷小类 CaseLargeClassBean.DataBean dataBean = largeClassBeans.get(position); - String eorc = dataBean.getEorc(); + eorc = dataBean.getEorc(); String typeId = dataBean.getId(); caseSmallClassPresenter.onReadyRetrofitRequest(eorc, typeId); } @@ -244,8 +239,15 @@ .create().show(); break; case R.id.locationMapView: -// startActivityForResult(new Intent(this, MapBoxActivity.class), Constant.REQUEST_MAP_CODE); - startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + //根据情况加载不同图层 + String type = caseClassView.getText().toString(); + if (type.equals("请选择")) { + ToastHelper.showToast("请先选择案卷类型", ToastHelper.WARING); + return; + } + Intent intent = new Intent(this, ArcGISMapActivity.class); + intent.putExtra("type", type); + startActivityForResult(intent, Constant.REQUEST_MAP_CODE); break; case R.id.submitButton: submitCase();//案卷提交 @@ -297,14 +299,15 @@ if (data == null) { return; } -// String pointJson = data.getStringExtra("pointJson"); -// Type type = new TypeToken() { -// }.getType(); -// LatLng latLng = gson.fromJson(pointJson, type); -// updateLocation(latLng); double longitude = data.getDoubleExtra("longitude", 0); double latitude = data.getDoubleExtra("latitude", 0); - updateLocation(longitude, latitude); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + communityNameView.setText(community); + SaveKeyValues.removeKey("CommunityName"); break; default: break; @@ -312,44 +315,6 @@ } } - private void updateLocation(double longitude, double latitude) { - longitudeView.setText(String.valueOf(longitude)); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - - private void updateLocation(LatLng point) { - double longitude = point.getLongitude(); - longitudeView.setText(String.valueOf(longitude)); - double latitude = point.getLatitude(); - latitudeView.setText(String.valueOf(latitude)); - Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); - StringBuffer buffer = new StringBuffer(); - try { - Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); - buffer.append(address.getSubLocality()) - .append(address.getSubAdminArea()) - .append(address.getThoroughfare()) - .append(address.getSubThoroughfare()); - } catch (IOException e) { - buffer.append("解析详细地址失败"); - e.printStackTrace(); - } - communityNameView.setText(buffer); - } - private void showBigImage(String path) { Intent intent = new Intent(this, BigPictureActivity.class); intent.putExtra("path", path); @@ -452,9 +417,13 @@ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING); return; } + //361029001003141 caseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, "361024", "361024100", - "361024", "361024100", description, fieldIntro, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + communityNameView.getText().toString(), + gridId, description, fieldIntro, gson.toJson(mediaList), 0, 0); } diff --git a/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java new file mode 100644 index 0000000..6dfff75 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/FivePackageUploadActivity.java @@ -0,0 +1,269 @@ +package com.casic.dcms.ui; + +import android.content.DialogInterface; +import android.content.Intent; +import android.location.Address; +import android.location.Geocoder; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.ImageRecycleViewAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.bean.UploadImageResultBean; +import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl; +import com.casic.dcms.mvp.view.IUploadImageView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.GlideLoadEngine; +import com.casic.dcms.utils.ItemDecorationSpace; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.StatusBarColorUtil; +import com.casic.dcms.utils.ToastHelper; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.tools.PictureFileUtils; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +public class FivePackageUploadActivity extends BaseActivity implements View.OnClickListener + , IUploadImageView { + + private static final String TAG = "PackageUploadActivity"; + @BindView(R.id.leftBackView) + ImageView leftBackView; + @BindView(R.id.communityView) + EditText communityView; + @BindView(R.id.longitudeView) + EditText longitudeView; + @BindView(R.id.latitudeView) + EditText latitudeView; + @BindView(R.id.caseLocationView) + EditText caseLocationView; + @BindView(R.id.caseDetailEditView) + EditText caseDetailEditView; + @BindView(R.id.selectedResultView) + RecyclerView selectedResultView; + @BindView(R.id.addImageView) + ImageView addImageView; + @BindView(R.id.submitButton) + QMUIRoundButton submitButton; + + private UploadImagePresenterImpl uploadImagePresenter; + private ImageRecycleViewAdapter imageAdapter; + private QMUITipDialog submitDialog; + private List mediaList = new ArrayList<>();//服务器返回的拍照数据集 + + @Override + public int initLayoutView() { + return R.layout.activity_package; + } + + @Override + protected void setupTopBarLayout() { + StatusBarColorUtil.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + leftBackView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + uploadImagePresenter = new UploadImagePresenterImpl(this); + submitDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("提交中,请稍后") + .create(); + imageAdapter = new ImageRecycleViewAdapter(this); + selectedResultView.setLayoutManager(new GridLayoutManager(this, 2)); + selectedResultView.addItemDecoration(new ItemDecorationSpace()); + selectedResultView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + submitButton.setChangeAlphaWhenPress(true); + } + + @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton}) + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.shopLayout: + ToastHelper.showToast("正在完善中", ToastHelper.ERROR); +// startActivityForResult(new Intent(this, ArcGISMapActivity.class), Constant.REQUEST_MAP_CODE); + break; + case R.id.addImageView: + new QMUIDialog.MenuDialogBuilder(this) + .addItem("相册中选取", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //选图 + selectPicture(); + } + }) + .addItem("相机拍照", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + //拍照 + takePicture(); + } + }) + .setCanceledOnTouchOutside(false) + .create().show(); + break; + case R.id.submitButton: + + break; + } + } + + private void selectPicture() { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(2) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.CHOOSE_REQUEST); + } + + private void takePicture() { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(1) + .isCompress(true) + .compressQuality(80) + .compressSavePath(FileUtils.getImageCompressPath()) + .forResult(PictureConfig.REQUEST_CAMERA); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + switch (requestCode) { + case PictureConfig.CHOOSE_REQUEST: + List selectList = PictureSelector.obtainMultipleResult(data); + for (LocalMedia media : selectList) { + String mediaCompressPath = media.getCompressPath(); + uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath)); + } + break; + case PictureConfig.REQUEST_CAMERA: + LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0); + uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath())); + break; + case Constant.REQUEST_MAP_CODE: + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + updateLocation(longitude, latitude); + break; + default: + break; + } + } + } + + private void updateLocation(double longitude, double latitude) { + longitudeView.setText(String.valueOf(longitude)); + latitudeView.setText(String.valueOf(latitude)); + Geocoder geoCoder = new Geocoder(this, Locale.CHINESE); + StringBuffer buffer = new StringBuffer(); + try { + Address address = geoCoder.getFromLocation(latitude, longitude, 1).get(0); + buffer.append(address.getSubLocality()) + .append(address.getSubAdminArea()) + .append(address.getThoroughfare()) + .append(address.getSubThoroughfare()); + } catch (IOException e) { + buffer.append("解析详细地址失败"); + e.printStackTrace(); + } + communityView.setText(buffer); + } + + @Override + public void showProgress() { + submitDialog.show(); + } + + @Override + public void hideProgress() { + submitDialog.hide(); + } + + @Override + public void obtainUploadResult(UploadImageResultBean resultBean) { + if (resultBean.isSuccess()) { + PictureFileUtils.deleteAllCacheDirFile(this); + /** + * 系统路径static拼接图片返回路径 + * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg + */ + //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg + String data = resultBean.getData().replace("\\", "/"); + String url = SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409") + "/static/" + data; + mediaList.add(url); + if (mediaList.size() == 2) { + addImageView.setVisibility(View.GONE); + } + imageAdapter.setMediaList(mediaList); + //九宫格点击事件 + imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + //查看大图 + showBigImage(mediaList.get(position)); + } + }); + //删除按钮点击事件 + imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() { + @Override + public void onClick(int position) { + mediaList.remove(position); + imageAdapter.setMediaList(mediaList); + if (mediaList.size() != 2) { + addImageView.setVisibility(View.VISIBLE); + } + } + }); + } + } + + private void showBigImage(String path) { + Intent intent = new Intent(this, BigPictureActivity.class); + intent.putExtra("path", path); + startActivity(intent); + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java new file mode 100644 index 0000000..1d742e1 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/MapWatchViewActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class MapWatchViewActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_map_watch; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java new file mode 100644 index 0000000..f44050c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/OvertimeCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class OvertimeCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_overtime; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java new file mode 100644 index 0000000..3f9ba1e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/PersonOnlineActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class PersonOnlineActivity extends BaseActivity { + + @Override + public int initLayoutView() { + return R.layout.activity_online; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java new file mode 100644 index 0000000..ee75d0a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/UrgentCaseActivity.java @@ -0,0 +1,26 @@ +package com.casic.dcms.ui; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; + +public class UrgentCaseActivity extends BaseActivity { + @Override + public int initLayoutView() { + return R.layout.activity_urgent; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + public void initData() { + + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java index d97af59..4bf85ce 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckPresenterImpl caseCheckPresenter; private int pageIndex = 0; private CaseCheckResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckPresenter = new CaseCheckPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckListResult(CaseCheckBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java index 1ad6d83..a1e7564 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseCheckedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseCheckedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseCheckedPresenterImpl caseCheckedPresenter; private int pageIndex = 0; private CaseCheckedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseCheckedPresenter = new CaseCheckedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseCheckedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainCheckedListResult(CaseCheckedBean resultBean) { // Log.d(TAG, "obtainHandledResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java index 58c37e9..804e3b0 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifiedFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifiedView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifiedPresenterImpl caseVerifiedPresenter; private int pageIndex = 0; private CaseVerifiedResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifiedPresenter = new CaseVerifiedPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifiedPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifiedListResult(CaseVerifiedBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java index 28011e0..6bbfd7d 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/CaseVerifyFragment.java @@ -18,7 +18,6 @@ import com.casic.dcms.mvp.view.ICaseVerifyView; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIEmptyView; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; @@ -42,7 +41,6 @@ private CaseVerifyPresenterImpl caseVerifyPresenter; private int pageIndex = 0; private CaseVerifyResultAdapter adapter; - private QMUITipDialog loadingDialog; /** * 临时存储网络请求到的数据 */ @@ -62,10 +60,6 @@ @Override protected void initData() { caseVerifyPresenter = new CaseVerifyPresenterImpl(this); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("案卷查询中,请稍后") - .create(); caseVerifyPresenter.onReadyRetrofitRequest(pageIndex); } @@ -91,16 +85,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override public void obtainVerifyListResult(CaseVerifyBean resultBean) { if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 93d617f..7816221 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -17,13 +17,18 @@ import com.casic.dcms.mvp.presenter.UserDataPresenterImpl; import com.casic.dcms.mvp.view.IUserDataView; import com.casic.dcms.ui.CaseCheckActivity; +import com.casic.dcms.ui.CaseHandleActivity; import com.casic.dcms.ui.CaseSearchActivity; import com.casic.dcms.ui.CaseUploadActivity; import com.casic.dcms.ui.CaseUploadQuicklyActivity; import com.casic.dcms.ui.CaseVerifyActivity; import com.casic.dcms.ui.DataAnalysisActivity; +import com.casic.dcms.ui.FivePackageUploadActivity; +import com.casic.dcms.ui.MapWatchViewActivity; +import com.casic.dcms.ui.OvertimeCaseActivity; +import com.casic.dcms.ui.PersonOnlineActivity; +import com.casic.dcms.ui.UrgentCaseActivity; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; import butterknife.BindView; @@ -33,7 +38,6 @@ */ public class HomePageFragment extends BaseFragment implements IUserDataView { - private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -75,50 +79,44 @@ switch (position) { case 0: intent.setClass(context, CaseUploadActivity.class); - startActivity(intent); break; case 1: intent.setClass(context, CaseUploadQuicklyActivity.class); - startActivity(intent); break; case 2: - ToastHelper.showToast("三包上报", ToastHelper.INFO); + intent.setClass(context, FivePackageUploadActivity.class); break; case 3: intent.setClass(context, CaseVerifyActivity.class); - startActivity(intent); break; case 4: intent.setClass(context, CaseCheckActivity.class); - startActivity(intent); break; case 5: - ToastHelper.showToast("案卷处理", ToastHelper.INFO); + intent.setClass(context, CaseHandleActivity.class); break; case 6: - ToastHelper.showToast("紧急要件", ToastHelper.INFO); + intent.setClass(context, UrgentCaseActivity.class); break; case 7: - ToastHelper.showToast("超时督办", ToastHelper.INFO); + intent.setClass(context, OvertimeCaseActivity.class); break; case 8: intent.setClass(context, DataAnalysisActivity.class); - startActivity(intent); break; case 9: - ToastHelper.showToast("在岗人员", ToastHelper.INFO); + intent.setClass(context, PersonOnlineActivity.class); break; case 10: intent.setClass(context, CaseSearchActivity.class); - startActivity(intent); break; case 11: - ToastHelper.showToast("地图查看", ToastHelper.INFO); + intent.setClass(context, MapWatchViewActivity.class); break; default: break; } -// startActivity(intent); + startActivity(intent); } }); } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 8a19020..5abe4b7 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -16,7 +16,7 @@ R.mipmap.zgry, R.mipmap.ajcx, R.mipmap.dtck); public static final List ITEMS = Arrays.asList( - "案卷上报", "快速上报", "三包上报", + "案卷上报", "快速上报", "五包上报", "案卷核实", "案卷核查", "案卷处理", "紧急要件", "超时督办", "统计分析", "在岗人员", "案卷查询", "地图查看"); @@ -38,12 +38,12 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - //先预置十种颜色 - public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), - Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), - Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), - Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), - Color.rgb(172, 217, 243)}; + //先预置8种颜色 + public static final int[] PIE_COLORS = {Color.rgb(28, 197, 220), + Color.rgb(255, 223, 107), Color.rgb(242, 17, 112), + Color.rgb(254, 254, 204), Color.rgb(251, 54, 64), + Color.rgb(216, 248, 183), Color.rgb(129, 178, 20), + Color.rgb(120, 104, 230)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; public static final int PERMISSIONS_CODE = 999; @@ -54,6 +54,5 @@ public static final String NOTICE_MSG = "receivePush"; public static final String BASE_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/2w/MapServer"; //底图图层 - public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer/"; //部件点图层 - public final static String[] fieldArrayGrid = new String[]{"OBJECTID", "BGID"};// geocode + public static final String COMPONENT_SERVICE_URL = "http://223.84.218.107:6080/arcgis/rest/services/dx/dxbj/FeatureServer"; //部件点图层 } diff --git a/app/src/main/res/layout/activity_case_upload.xml b/app/src/main/res/layout/activity_case_upload.xml index 3f932ff..5f49244 100644 --- a/app/src/main/res/layout/activity_case_upload.xml +++ b/app/src/main/res/layout/activity_case_upload.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -242,41 +243,38 @@ android:text="案卷情况" android:textSize="@dimen/textFontSize" /> - + android:layout_toStartOf="@id/voiceView" + android:background="@drawable/bg_layout" + android:gravity="top" + android:hint="请输入少于50个字的案卷情况描述" + android:maxLength="50" + android:padding="3dp" /> - - - - + + android:background="@drawable/bg_layout" + android:padding="13dp" + android:src="@drawable/ic_voice" /> @@ -295,18 +293,14 @@ android:layout_height="wrap_content" android:layout_marginStart="100dp" android:layout_marginEnd="10dp" - android:layout_toStartOf="@id/imageUploadView" - android:orientation="horizontal"> + android:orientation="vertical"> - + android:layout_marginBottom="10dp" + android:scrollbars="none" /> - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_upload_quickly.xml b/app/src/main/res/layout/activity_case_upload_quickly.xml index a5b3395..43f6748 100644 --- a/app/src/main/res/layout/activity_case_upload_quickly.xml +++ b/app/src/main/res/layout/activity_case_upload_quickly.xml @@ -147,7 +147,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" + android:layout_toStartOf="@id/locationMapView" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -178,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:layout_marginEnd="35dp" + android:layout_marginEnd="@dimen/margin_10dp" android:background="@drawable/bg_layout" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -249,6 +250,7 @@ android:layout_marginStart="100dp" android:layout_marginEnd="10dp" android:background="@drawable/bg_layout" + android:hint="请输入少于50个字的案卷情况描述" android:maxLength="50" android:paddingHorizontal="3dp" android:paddingVertical="5dp" /> @@ -302,4 +304,4 @@ app:qmui_radius="5dp" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_handle.xml b/app/src/main/res/layout/activity_handle.xml new file mode 100644 index 0000000..4fb2556 --- /dev/null +++ b/app/src/main/res/layout/activity_handle.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_map_watch.xml b/app/src/main/res/layout/activity_map_watch.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_map_watch.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_online.xml b/app/src/main/res/layout/activity_online.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_online.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_overtime.xml b/app/src/main/res/layout/activity_overtime.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_overtime.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_package.xml b/app/src/main/res/layout/activity_package.xml new file mode 100644 index 0000000..65189fe --- /dev/null +++ b/app/src/main/res/layout/activity_package.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_urgent.xml b/app/src/main/res/layout/activity_urgent.xml new file mode 100644 index 0000000..c9edfbd --- /dev/null +++ b/app/src/main/res/layout/activity_urgent.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file