diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4e06c6..88b00c3 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,29 +20,47 @@ android:layout_marginHorizontal="30dp" android:orientation="vertical"> - + - + + + + + + + + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4e06c6..88b00c3 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,29 +20,47 @@ android:layout_marginHorizontal="30dp" android:orientation="vertical"> - + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4e06c6..88b00c3 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,29 +20,47 @@ android:layout_marginHorizontal="30dp" android:orientation="vertical"> - + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4e06c6..88b00c3 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,29 +20,47 @@ android:layout_marginHorizontal="30dp" android:orientation="vertical"> - + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date.xml b/app/src/main/res/layout/adapter_select_date.xml new file mode 100644 index 0000000..9e22615 --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4e06c6..88b00c3 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,29 +20,47 @@ android:layout_marginHorizontal="30dp" android:orientation="vertical"> - + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date.xml b/app/src/main/res/layout/adapter_select_date.xml new file mode 100644 index 0000000..9e22615 --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date_child.xml b/app/src/main/res/layout/adapter_select_date_child.xml new file mode 100644 index 0000000..cb767de --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date_child.xml @@ -0,0 +1,39 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4e06c6..88b00c3 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,29 +20,47 @@ android:layout_marginHorizontal="30dp" android:orientation="vertical"> - + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date.xml b/app/src/main/res/layout/adapter_select_date.xml new file mode 100644 index 0000000..9e22615 --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date_child.xml b/app/src/main/res/layout/adapter_select_date_child.xml new file mode 100644 index 0000000..cb767de --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date_child.xml @@ -0,0 +1,39 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_package_base.xml b/app/src/main/res/layout/include_package_base.xml new file mode 100644 index 0000000..45f8c15 --- /dev/null +++ b/app/src/main/res/layout/include_package_base.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4e06c6..88b00c3 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,29 +20,47 @@ android:layout_marginHorizontal="30dp" android:orientation="vertical"> - + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date.xml b/app/src/main/res/layout/adapter_select_date.xml new file mode 100644 index 0000000..9e22615 --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date_child.xml b/app/src/main/res/layout/adapter_select_date_child.xml new file mode 100644 index 0000000..cb767de --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date_child.xml @@ -0,0 +1,39 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_package_base.xml b/app/src/main/res/layout/include_package_base.xml new file mode 100644 index 0000000..45f8c15 --- /dev/null +++ b/app/src/main/res/layout/include_package_base.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_record_recycleview.xml b/app/src/main/res/layout/item_record_recycleview.xml index dd29b50..f97bcf5 100644 --- a/app/src/main/res/layout/item_record_recycleview.xml +++ b/app/src/main/res/layout/item_record_recycleview.xml @@ -5,27 +5,41 @@ android:padding="@dimen/padding_10dp"> - - + + + + + android:text="2021/06/01 09:13" + android:textColor="@color/listSubColor" /> \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4e06c6..88b00c3 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,29 +20,47 @@ android:layout_marginHorizontal="30dp" android:orientation="vertical"> - + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date.xml b/app/src/main/res/layout/adapter_select_date.xml new file mode 100644 index 0000000..9e22615 --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date_child.xml b/app/src/main/res/layout/adapter_select_date_child.xml new file mode 100644 index 0000000..cb767de --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date_child.xml @@ -0,0 +1,39 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_package_base.xml b/app/src/main/res/layout/include_package_base.xml new file mode 100644 index 0000000..45f8c15 --- /dev/null +++ b/app/src/main/res/layout/include_package_base.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_record_recycleview.xml b/app/src/main/res/layout/item_record_recycleview.xml index dd29b50..f97bcf5 100644 --- a/app/src/main/res/layout/item_record_recycleview.xml +++ b/app/src/main/res/layout/item_record_recycleview.xml @@ -5,27 +5,41 @@ android:padding="@dimen/padding_10dp"> - - + + + + + android:text="2021/06/01 09:13" + android:textColor="@color/listSubColor" /> \ No newline at end of file diff --git a/app/src/main/res/layout/popu_date.xml b/app/src/main/res/layout/popu_date.xml new file mode 100644 index 0000000..5c4c266 --- /dev/null +++ b/app/src/main/res/layout/popu_date.xml @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/build.gradle b/app/build.gradle index 0e13bec..3286df2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,4 +99,5 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 674567f..08b8134 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,6 +83,8 @@ + + diff --git a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java index 4957e67..92f30f1 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -1,5 +1,6 @@ package com.casic.dcms.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -16,10 +17,12 @@ public class RecordListAdapter extends RecyclerView.Adapter { + private Context context; private List dataRows; private LayoutInflater layoutInflater; public RecordListAdapter(Context context, List dataRows) { + this.context = context; this.dataRows = dataRows; layoutInflater = LayoutInflater.from(context); } @@ -63,19 +66,23 @@ private TextView workTimeView; private TextView toiletNameView; + private TextView workerPositionView; private TextView workerNameView; ItemViewHolder(@NonNull View itemView) { super(itemView); workTimeView = itemView.findViewById(R.id.workTimeView); toiletNameView = itemView.findViewById(R.id.toiletNameView); + workerPositionView = itemView.findViewById(R.id.workerPositionView); workerNameView = itemView.findViewById(R.id.workerNameView); } + @SuppressLint("SetTextI18n") void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { - workTimeView.setText(rowsBean.getCreateTime()); - toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知" : rowsBean.getToiletName()); + toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); + workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + workTimeView.setText(rowsBean.getCreateTime()); } } } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java index f50849c..dea45cc 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CleanRecordModelImpl.java @@ -24,8 +24,8 @@ } @Override - public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate); + public Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + Observable observable = RetrofitServiceManager.getCleanRecordResult(userId, keywords, beginDate, endDate, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java index 3ffe8c4..5c294b2 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICleanRecordModel.java @@ -3,5 +3,5 @@ import rx.Subscription; public interface ICleanRecordModel { - Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + Subscription sendRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java index 5b37216..7a83e8d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CleanRecordPresenterImpl.java @@ -16,8 +16,9 @@ } @Override - public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate) { - addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate)); + public void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset) { + view.showProgress(); + addSubscription(model.sendRetrofitRequest(userId, keywords, beginDate, endDate, offset)); } @Override @@ -27,11 +28,12 @@ @Override public void onSuccess(CleanRecordBean result) { + view.hideProgress(); view.obtainCleanRecordResult(result); } @Override public void onFailure(Throwable throwable) { - + view.hideProgress(); } } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java index 2b9acdd..700d5d8 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICleanRecordPresenter.java @@ -1,7 +1,7 @@ package com.casic.dcms.mvp.presenter; public interface ICleanRecordPresenter { - void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate); + void onReadyRetrofitRequest(String userId, String keywords, String beginDate, String endDate, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java index 9df83d9..a374617 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICleanToiletRecordView.java @@ -4,4 +4,8 @@ public interface ICleanToiletRecordView { void obtainCleanRecordResult(CleanRecordBean resultBean); + + void showProgress(); + + void hideProgress(); } diff --git a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java index 36e27a9..c589260 100644 --- a/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/ArcGISMapActivity.java @@ -20,8 +20,11 @@ import com.casic.dcms.bean.PointFutureBean; import com.casic.dcms.bean.ShopFeatureBean; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.HttpRequestHelper; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.data.Feature; @@ -48,8 +51,11 @@ import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -57,6 +63,7 @@ import butterknife.BindView; import butterknife.OnClick; +import okhttp3.ResponseBody; public class ArcGISMapActivity extends BaseActivity implements View.OnClickListener { @@ -71,11 +78,9 @@ private Point clickPoint; private Gson gson; private String caseType; - private ListenableList overlayGraphics; private ListenableList graphicsOverlays; private GraphicsOverlay mGraphicsOverlay; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -165,11 +170,6 @@ mGraphicsOverlay = new GraphicsOverlay(); overlayGraphics = mGraphicsOverlay.getGraphics(); graphicsOverlays = mapView.getGraphicsOverlays(); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -204,40 +204,43 @@ //先取社区信息,再取部件信息 List> pointList = new ArrayList<>(); ListenableFuture pointFuture = mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(() -> { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); + 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); } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } } }); } @@ -275,10 +278,30 @@ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - String.valueOf(featureBean.getObjid())); +// 根据objid获取shopId + OtherUtils.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(Constant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + OtherUtils.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); } }); } @@ -427,7 +450,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -441,7 +464,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java index 06edfb2..e7ddeba 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java @@ -137,12 +137,10 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - checkImageAdapter = new ImageRecycleViewAdapter(this); caseCheckRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseCheckRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -256,8 +254,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java index c03d474..87b7376 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java @@ -143,12 +143,10 @@ caseNextNodePresenter = new CaseNextNodePresenterImpl(this); uploadImagePresenter = new UploadImagePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") .create(); - handleImageAdapter = new ImageRecycleViewAdapter(this); caseHandleRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseHandleRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -363,8 +361,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: 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 864fa03..93f74c0 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -17,10 +17,10 @@ import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.view.ICaseListView; +import com.casic.dcms.utils.OtherUtils; 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; @@ -59,7 +59,6 @@ private List dataBeans = new ArrayList<>(); private boolean isRefresh, isLoadMore = false; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog searchDialog; @Override public int initLayoutView() { @@ -80,10 +79,6 @@ @Override public void initData() { - searchDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); caseListPresenter = new CaseListPresenterImpl(this); weakReferenceHandler = new WeakReferenceHandler(this); eorc = getIntent().getStringExtra("eorc"); @@ -163,12 +158,12 @@ @Override public void showProgress() { - searchDialog.show(); + OtherUtils.showLoadingDialog(this, "案卷查询中,请稍后"); } @Override public void hideProgress() { - searchDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java index d5583c2..371bb34 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseProcessActivity.java @@ -16,11 +16,11 @@ import com.casic.dcms.bean.CaseProcessBean; import com.casic.dcms.mvp.presenter.CaseProcessPresenterImpl; import com.casic.dcms.mvp.view.ICaseProcessView; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.TimeLineDecoration; import com.casic.dcms.utils.ToastHelper; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.ArrayList; import java.util.List; @@ -35,7 +35,6 @@ @BindView(R.id.processRecyclerView) RecyclerView processRecyclerView; private CaseProcessPresenterImpl caseProcessPresenter; - private QMUITipDialog loadingDialog; private List dataBeans = new ArrayList<>(); @Override @@ -57,10 +56,7 @@ @Override public void initData() { - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("获取记录中,请稍后") - .create(); + } @Override @@ -72,7 +68,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "获取案卷流程记录中,请稍后"); } @Override @@ -126,7 +122,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java index e7129e6..1c30a11 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java @@ -33,7 +33,6 @@ import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.AudioPlayerView; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.ArrayList; @@ -78,7 +77,6 @@ private CaseDetailPresenterImpl caseDetailPresenter; private CaseCommonSentencePresenterImpl commonSentencePresenter; private CaseUpdateSupervisePresenterImpl updateSupervisePresenter; - private QMUITipDialog submitDialog; @Override public int initLayoutView() { @@ -99,11 +97,6 @@ commonSentencePresenter = new CaseCommonSentencePresenterImpl(this); updateSupervisePresenter = new CaseUpdateSupervisePresenterImpl(this); - - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("提交中,请稍后") - .create(); } @Override @@ -237,12 +230,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override 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 bbb7a0d..2537700 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java @@ -152,7 +152,6 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseSubmitPresenter = new CaseSubmitPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) .setTipWord("处理中,请稍后") @@ -370,8 +369,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -678,6 +681,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java index ee68ac3..b5abea4 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java @@ -180,8 +180,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -281,6 +285,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override 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 49a80cc..e7d5898 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java @@ -56,7 +56,6 @@ ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView { private Context context = this; - @BindView(R.id.caseClassView) TextView caseClassView; @BindView(R.id.caseLargeClassView) @@ -271,8 +270,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: @@ -337,6 +340,11 @@ } @Override + public void hideProgress() { + submitDialog.dismiss(); + } + + @Override public void obtainUploadAudioResult(ActionResultBean resultBean) { } @@ -449,11 +457,7 @@ @Override public void obtainDataFail() { ToastHelper.showToast("操作失败", ToastHelper.ERROR); - } - - @Override - public void hideProgress() { - submitDialog.dismiss(); + //TODO 案卷如果在网络极差的情况下,提交超时导致失败了,需要保存到本地吗?等下次打开的是时候提醒用户补提交之前没提交成功的案卷? } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java index 530a77e..2ab7451 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java @@ -171,7 +171,6 @@ .create(); caseNextNodePresenter = new CaseNextNodePresenterImpl(this); caseHandlePresenter = new CaseHandlePresenterImpl(this); - verifyImageAdapter = new ImageRecycleViewAdapter(this); caseVerifyRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); caseVerifyRecyclerView.addItemDecoration(new ItemDecorationSpace()); @@ -519,8 +518,12 @@ case PictureConfig.CHOOSE_REQUEST: List selectList = PictureSelector.obtainMultipleResult(data); for (LocalMedia media : selectList) { - String mediaPath = media.getCompressPath(); - uploadImagePresenter.onReadyRetrofitRequest(new File(mediaPath)); + File file = new File(media.getCompressPath()); + if (file.length() <= Constant.IMAGE_MINUS_SIZE) { + ToastHelper.showToast("图片尺寸太小,请重新选择", ToastHelper.ERROR); + continue; + } + uploadImagePresenter.onReadyRetrofitRequest(file); } break; case PictureConfig.REQUEST_CAMERA: diff --git a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java index 8bcdb86..570f9f6 100644 --- a/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CleanResultListActivity.java @@ -10,7 +10,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -21,37 +20,46 @@ import com.casic.dcms.bean.CleanRecordBean; import com.casic.dcms.mvp.presenter.CleanRecordPresenterImpl; import com.casic.dcms.mvp.view.ICleanToiletRecordView; -import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.qmuiteam.qmui.widget.QMUIEmptyView; +import com.casic.dcms.widgets.datepicker.DatePopupWindow; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.Calendar; import java.util.List; import butterknife.BindView; public class CleanResultListActivity extends BaseCaseActivity implements ICleanToiletRecordView { - @BindView(R.id.emptyView) - QMUIEmptyView emptyView; + // @BindView(R.id.emptyView) +// QMUIEmptyView emptyView; @BindView(R.id.dateView) TextView dateView; @BindView(R.id.calendarView) ImageView calendarView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.recordRecyclerView) RecyclerView recordRecyclerView; private Context context = this; private RecordListAdapter adapter; private List dataBeans = new ArrayList<>(); - private boolean isNotify = false; private WeakReferenceHandler weakReferenceHandler; private CleanRecordPresenterImpl recordPresenter; + private int pageIndex = 1; + private boolean isRefresh, isLoadMore = false; + private int startGroup = -1; + private int endGroup = -1; + private int startChild = -1; + private int endChild = -1; @Override public int initLayoutView() { @@ -71,27 +79,47 @@ @Override public void initEvent() { - //默认加载所有数据 - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", ""); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", "", "", pageIndex); calendarView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - new TimePickerDialog.Builder().setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("请选择起始时间") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) - .setCallBack((timePickerView, millSeconds) -> { - String date = TimeOrDateUtil.timestampToDate(millSeconds); - - dateView.setText(date); - recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", - date, ""); - isNotify = true; - }).build().show(getSupportFragmentManager(), "year_month_day"); + new DatePopupWindow + .Builder(CleanResultListActivity.this, Calendar.getInstance().getTime(), v)//初始化 + .setInitSelect(startGroup, startChild, endGroup, endChild)//设置上一次选中的区间状态 + .setInitDay(true)//默认为true,UI内容为共几天、开始、结束;当为false时,UI内容为共几晚、入住、离开 + .setDateOnClickListener(new DatePopupWindow.DateOnClickListener() {//设置监听 + //点击完成按钮后回调返回方法 + @Override + public void getDate(String startDate, String endDate, int startGroupPosition, int + startChildPosition, int endGroupPosition, int endChildPosition) { + startGroup = startGroupPosition;//开始月份位置 + startChild = startChildPosition;//开始对应月份中日的位置 + endGroup = endGroupPosition;//结束月份位置 + endChild = endChildPosition;//结束对应月份中日的位置 + dateView.setText(startDate + "~" + endDate); + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + startDate, endDate, pageIndex); + } + }).builder(); + } + }); + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 1; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + recordPresenter.onReadyRetrofitRequest(StringHelper.getUserId(), "", + "", "", pageIndex); } }); } @@ -101,24 +129,35 @@ // Log.d("TAG", "obtainCleanRecordResult: " + new Gson().toJson(resultBean)); if (resultBean.isSuccess()) { List dataRows = resultBean.getData().getRows(); - if (isNotify) { - dataBeans.clear(); - //后台返回的数据不是倒叙的,需要手动反序过来 - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + ToastHelper.showToast("到底了,别拉了", ToastHelper.INFO); } - isNotify = false; + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; } else { - int size = dataRows.size(); - for (int i = 0; i < size; i++) { - dataBeans.add(i, dataRows.get(size - 1 - i)); - } + dataBeans = dataRows; } weakReferenceHandler.sendEmptyMessage(20210601); } } + @Override + public void showProgress() { + OtherUtils.showLoadingDialog(this, "查询记录中,请稍后"); + } + + @Override + public void hideProgress() { + OtherUtils.dismissLoadingDialog(); + } + private static class WeakReferenceHandler extends Handler { private WeakReference reference; @@ -131,14 +170,14 @@ super.handleMessage(msg); CleanResultListActivity resultActivity = reference.get(); if (msg.what == 20210601) { - if (resultActivity.isNotify) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { resultActivity.adapter.notifyDataSetChanged(); } else { //首次加载数据 if (resultActivity.dataBeans.size() == 0) { - resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); +// resultActivity.emptyView.show("抱歉,没有查到您的保洁工作记录", null); } else { - resultActivity.emptyView.hide(); +// resultActivity.emptyView.hide(); resultActivity.adapter = new RecordListAdapter(resultActivity, resultActivity.dataBeans); resultActivity.recordRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); resultActivity.recordRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); diff --git a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java index 70dfacf..f1675ab 100644 --- a/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DisplayMapActivity.java @@ -13,6 +13,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.data.ServiceFeatureTable; import com.esri.arcgisruntime.geometry.Point; @@ -28,7 +29,6 @@ import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.util.Arrays; @@ -44,7 +44,6 @@ MapView mapView; private double lng, lat; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -90,11 +89,6 @@ arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); } mapView.setMap(arcGISMap); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -142,7 +136,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -156,7 +150,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java index ea4750d..69a8dcb 100644 --- a/app/src/main/java/com/casic/dcms/ui/LoginActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/LoginActivity.java @@ -2,8 +2,11 @@ import android.content.Intent; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; @@ -18,17 +21,19 @@ import com.casic.dcms.mvp.view.ILoginView; import com.casic.dcms.utils.AuthenticationHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.RSAUtils; import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.widgets.InputDialog; +import com.google.android.material.textfield.TextInputLayout; import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton; import com.qmuiteam.qmui.util.QMUIStatusBarHelper; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.security.PublicKey; +import java.util.Objects; import butterknife.BindView; import butterknife.OnClick; @@ -39,6 +44,8 @@ @BindView(R.id.userNameView) EditText userNameView; + @BindView(R.id.inputLayout) + TextInputLayout inputLayout; @BindView(R.id.userPasswordView) EditText userPasswordView; @BindView(R.id.loginButton) @@ -50,7 +57,6 @@ @BindView(R.id.changeServerConfigButton) QMUIAlphaImageButton changeServerConfigButton; - private QMUITipDialog loadingDialog; private AuthenticatePresenterImpl authenticatePresenter; private LoginPresenterImpl loginPresenter; @@ -88,10 +94,6 @@ } } }); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("登录中,请稍后") - .create(); } @Override @@ -100,6 +102,35 @@ changeServerConfigButton.setChangeAlphaWhenPress(true); authenticatePresenter = new AuthenticatePresenterImpl(this); loginPresenter = new LoginPresenterImpl(this); + EditText editText = Objects.requireNonNull(inputLayout.getEditText()); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().trim().length() > 12) { + inputLayout.setError("密码长度超出限制"); + } else { + inputLayout.setError(null); + } + } + }); + //点击输入法键盘"完成" + editText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + authenticatePresenter.onReadyRetrofitRequest(); + return true; + } + return false; + }); } @OnClick({R.id.loginButton, R.id.changeServerConfigButton}) @@ -148,7 +179,7 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "登录中,请稍后"); } @Override @@ -169,6 +200,13 @@ ToastHelper.showToast("用户名不能为空", ToastHelper.WARING); return; } + //判断是否是手机号,先区分是手机号还是账号 + if (account.startsWith("1")) { + if (!StringHelper.isPhoneNumber(account)) { + ToastHelper.showToast("手机号格式不对,可以改为账号登录", ToastHelper.WARING); + return; + } + } if (TextUtils.isEmpty(userPassword)) { ToastHelper.showToast("密码不能为空", ToastHelper.WARING); return; @@ -202,7 +240,7 @@ @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/MainActivity.java b/app/src/main/java/com/casic/dcms/ui/MainActivity.java index 78b70d5..37466d0 100644 --- a/app/src/main/java/com/casic/dcms/ui/MainActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/MainActivity.java @@ -198,7 +198,11 @@ break; case Constant.PUSH_CREATE_NOTIFICATION: //显示小红点 - mainActivity.updateMessageNumber(); + try { + mainActivity.updateMessageNumber(); + } catch (NullPointerException e) { + e.printStackTrace(); + } NoticeBean noticeBean = (NoticeBean) msg.obj; if (null == noticeBean) { diff --git a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java index ad070ae..ac995d3 100644 --- a/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/PublicToiletActivity.java @@ -31,6 +31,7 @@ import com.casic.dcms.utils.FileUtils; import com.casic.dcms.utils.GlideLoadEngine; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; @@ -55,7 +56,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -97,7 +97,6 @@ TextView clockView; private UploadImagePresenterImpl uploadImagePresenter; - private QMUITipDialog submitDialog, locationDialog; private String imagePath = "";//服务器返回的拍照数据 private CleanToiletPresenterImpl cleanToiletPresenter; @@ -177,15 +176,6 @@ uploadImagePresenter = new UploadImagePresenterImpl(this); cleanToiletPresenter = new CleanToiletPresenterImpl(this); - submitDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("处理中,请稍后") - .create(); - - locationDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @Override @@ -214,7 +204,7 @@ public void onClick(View v) { switch (v.getId()) { case R.id.removeToLocalView: - locationDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -244,7 +234,7 @@ } locationStreetView.setTextColor(Color.BLUE); } - locationDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } }, true); break; @@ -372,12 +362,12 @@ @Override public void showProgress() { - submitDialog.show(); + OtherUtils.showLoadingDialog(this, "处理中,请稍后"); } @Override public void hideProgress() { - submitDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java index 050b443..f0b9831 100644 --- a/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/WorkerOnMapActivity.java @@ -20,6 +20,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.OtherUtils; import com.casic.dcms.utils.ToastHelper; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -38,7 +39,6 @@ import com.esri.arcgisruntime.util.ListenableList; import com.qmuiteam.qmui.util.QMUIDisplayHelper; import com.qmuiteam.qmui.widget.QMUITopBarLayout; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.popup.QMUIPopup; import com.qmuiteam.qmui.widget.popup.QMUIPopups; @@ -60,7 +60,6 @@ private String userName, createTime, toiletName; private double lng, lat; private WeakReferenceHandler weakReferenceHandler; - private QMUITipDialog loadingDialog; @Override public int initLayoutView() { @@ -98,11 +97,6 @@ mapView.setMap(arcGISMap); weakReferenceHandler = new WeakReferenceHandler(this); - - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("定位中,请稍后") - .create(); } @SuppressLint("ClickableViewAccessibility") @@ -208,7 +202,7 @@ mapView.setViewpointScaleAsync(mapView.getMapScale() * 2); break; case R.id.removeToLocalView: - loadingDialog.show(); + OtherUtils.showLoadingDialog(this, "定位中,请稍后"); LocationHelper.obtainCurrentLocationByGD(this, new ILocationListener() { @Override public void onLocationGet(Location location) { @@ -222,7 +216,7 @@ Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReference.create(4326)); addPictureMarker(point); mapView.setViewpointCenterAsync((point), 2800); - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } } }, true); diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java index ab75c67..6d0b03b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/MinePageFragment.java @@ -40,7 +40,6 @@ import com.casic.dcms.utils.callback.IDownloadListener; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.io.File; @@ -48,7 +47,8 @@ import butterknife.BindView; import butterknife.OnClick; -public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, ILoginOutView { +public class MinePageFragment extends BaseFragment implements View.OnClickListener, IUpdateVersionView, + ILoginOutView { private static final String TAG = "MinePageFragment"; @BindView(R.id.deviceIdView) @@ -64,7 +64,6 @@ private Context context; private LoginOutPresenterImpl loginOutPresenter; - private QMUITipDialog loadingDialog; private UpdatePresenterImpl updatePresenter; private ProgressDialog progressDialog; private ClipboardManager clipboardManager; @@ -86,10 +85,6 @@ loginOutPresenter = new LoginOutPresenterImpl(this); boolean isAutoLogin = (boolean) SaveKeyValues.getValue("autoLogin", false); autoLoginSwitch.setChecked(isAutoLogin); - loadingDialog = new QMUITipDialog.Builder(context) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("请求中,请稍后") - .create(); updatePresenter = new UpdatePresenterImpl(this); clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); @@ -198,12 +193,12 @@ @Override public void showProgress() { - loadingDialog.show(); + OtherUtils.showLoadingDialog(context, "请求中,请稍后"); } @Override public void hideProgress() { - loadingDialog.dismiss(); + OtherUtils.dismissLoadingDialog(); } @Override diff --git a/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java new file mode 100755 index 0000000..21db61c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/CalendarUtil.java @@ -0,0 +1,112 @@ +package com.casic.dcms.utils; + +import android.text.TextUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class CalendarUtil { + public static String getTwoDay(String sj1, String sj2) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long day; + try { + Date date = formatter.parse(sj1); + Date mydate = formatter.parse(sj2); + day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); + } catch (Exception e) { + return ""; + } + return day + ""; + } + + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static int getWeekNoFormat(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + return c.get(Calendar.DAY_OF_WEEK); + } + + public static Calendar toDate(String pTime) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + return c; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 参数格式:2012-12-1 + * return 12月1日 + * + * @param date + */ + public static String FormatDateMD(String date) { + if (TextUtils.isEmpty(date)) { + throw new NullPointerException(); + } + String month = date.split("-")[1]; + String day = date.split("-")[2]; + return month + "月" + day + "日"; + } + + /** + * 判断当前日期是星期几 + * + * @param pTime 设置的需要判断的时间 //格式如2012-09-08 + * @return dayForWeek 判断结果 + * @Exception 发生异常 + */ + public static String getWeekByFormat(String pTime) { + String week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(pTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { + week += "日"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) { + week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) { + week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) { + week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) { + week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) { + week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + week += "六"; + } + return week; + } + +} 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 1d1f693..1b99038 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -35,6 +35,7 @@ public static final String IP_KEY = "BASE_IP"; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final long IMAGE_MINUS_SIZE = 100 * 1024; public static final long HTTP_TIMEOUT = 30L; public static final int PERMISSIONS_CODE = 999; public static final int REQUEST_MAP_CODE = 9001; @@ -66,6 +67,12 @@ public static final double DELTA_LNG_10 = 0.00002536; // 10米范围经度值偏移量(大约) public static final double DELTA_LAT_10 = 0.00002256;// 10米范围纬度值偏移量(大约) + //单独网络请求接口名 + public static final String SHOP_DETAIL = "/shop/merchant/detail?merchantId="; + public static final String SHOP_PUNISH_LIST = "/shop/punish/listByMerchant?merchantId="; + public static final String SHOP_PUNISH_TYPE = "/shop/punish/statisticByMerchant?merchantId="; + public static final String SHOP_MERCHANT_ID = "/shop/merchant/getIdByCode?shopCode="; + //生产环境 public static final String BASE_MAP_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt/MapServer";//崇仁城管地图底图 public static final String BASE_MAP_NO_SERVICE_URL = "http://111.198.10.15:13002/arcgis/rest/services/crdt_1/MapServer";//崇仁城管地图不带网格底图 diff --git a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java index c0affb8..1194b81 100644 --- a/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/HttpRequestHelper.java @@ -23,7 +23,7 @@ public class HttpRequestHelper { private static final String TAG = "HttpRequestHelper"; - public static void doRequest(String function, String merchantId, IHttpRequestListener listener) { + public static void doRequest(String function, String requestValue, IHttpRequestListener listener) { String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://111.198.10.15:11409"); // String ip = (String) SaveKeyValues.getValue(Constant.IP_KEY, "http://223.82.47.232:11401"); Observable.create(new Observable.OnSubscribe() { @@ -46,7 +46,7 @@ Request request = new Request.Builder() .addHeader("token", AuthenticationHelper.getToken()) - .url(ip + function + "?merchantId=" + merchantId) + .url(ip + function + requestValue) .get() .build();//创建Request 对象 try { diff --git a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java index 1ded678..99fc6a1 100644 --- a/app/src/main/java/com/casic/dcms/utils/ImageHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ImageHelper.java @@ -48,13 +48,7 @@ @Override public void call(Subscriber subscriber) { //图片像素不一样,字体也需要设置不一样,像素低的图片,文字要小 - if (bitmap.getWidth() <= 720) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 3)); - } else if (bitmap.getWidth() > 720 && bitmap.getWidth() <= 1080) { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 10)); - } else { - textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 20)); - } + textPaint.setTextSize(QMUIDisplayHelper.dp2px(context, 16)); Rect nameBounds = new Rect(); textPaint.getTextBounds(name, 0, name.length(), nameBounds); Rect dateBounds = new Rect(); @@ -75,19 +69,9 @@ //图片像素不一样,间距也需要设置不一样 int padding, paddingRight, paddingBottom; - if (bitmapWidth <= 720) { - padding = QMUIDisplayHelper.dp2px(context, 3);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 3); - paddingBottom = QMUIDisplayHelper.dp2px(context, 3); - } else if (bitmapWidth > 720 && bitmapWidth <= 1080) { - padding = QMUIDisplayHelper.dp2px(context, 5);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 8); - paddingBottom = QMUIDisplayHelper.dp2px(context, 8); - } else { - padding = QMUIDisplayHelper.dp2px(context, 10);//两行水印间的间距 - paddingRight = QMUIDisplayHelper.dp2px(context, 15); - paddingBottom = QMUIDisplayHelper.dp2px(context, 15); - } + padding = QMUIDisplayHelper.dp2px(context, 8);//两行水印间的间距 + paddingRight = QMUIDisplayHelper.dp2px(context, 12); + paddingBottom = QMUIDisplayHelper.dp2px(context, 12); //有几行就写几行 canvas.drawText(name, bitmapWidth - nameBounds.width() - paddingRight, bitmapHeight - (dateBounds.height() + timeBounds.height() + 2 * padding + paddingBottom), textPaint); diff --git a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java index 8872825..54c3262 100644 --- a/app/src/main/java/com/casic/dcms/utils/OtherUtils.java +++ b/app/src/main/java/com/casic/dcms/utils/OtherUtils.java @@ -14,12 +14,14 @@ import com.casic.dcms.ui.BigImageActivity; import com.casic.dcms.ui.CaseProcessActivity; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import java.lang.reflect.Method; import java.util.ArrayList; public class OtherUtils { private static final String TAG = "OtherUtils"; + private static QMUITipDialog loadingDialog; //查看大图 public static void showBigImage(Context context, int index, ArrayList imageList) { @@ -67,4 +69,18 @@ } return ""; } + + public static void showLoadingDialog(Context context, String message) { + loadingDialog = new QMUITipDialog.Builder(context) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create(); + loadingDialog.show(); + } + + public static void dismissLoadingDialog() { + if (loadingDialog != null || loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index 57409ff..e491c51 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -472,7 +472,9 @@ @Query("userId") String userId, @Query("keywords") String keywords, @Query("beginDate") String beginDate, - @Query("endDate") String endDate); + @Query("endDate") String endDate, + @Query("limit") int limit, + @Query("offset") int offset); /** * 三包待办 diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9cf41be..9e9ff8d 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -509,10 +509,12 @@ * 公厕打扫记录 */ public static Observable getCleanRecordResult(String userId, String keywords, - String beginDate, String endDate) { + String beginDate, String endDate, + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); - return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, endDate); + return service.obtainToiletCleanRecord(AuthenticationHelper.getToken(), userId, keywords, beginDate, + endDate, 15, offset); } /** diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java new file mode 100755 index 0000000..122b863 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DateInfo.java @@ -0,0 +1,24 @@ +package com.casic.dcms.widgets.datepicker; + +import java.util.List; + +public class DateInfo { + private String date; + private List list; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java new file mode 100755 index 0000000..a169a6c --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DatePopupWindow.java @@ -0,0 +1,652 @@ +package com.casic.dcms.widgets.datepicker; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.dcms.R; +import com.casic.dcms.utils.CalendarUtil; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +@SuppressLint("SetTextI18n") +public class DatePopupWindow extends PopupWindow { + private static final String TAG = "DatePopupWindow"; + private View rootView; + private QMUIRoundButton selectDoneButton; + private RecyclerView dateRecyclerView; + private TextView hintTextTextView; + private TextView endWeekView; + private TextView endDateView; + private LinearLayout endDateLayout; + private TextView sumTimeView; + private TextView startWeekView; + private TextView startDateView; + + private boolean dayFlag; + private Activity activity; + private Date mSetDate; + private String currentDate; + private String startDesc; + private String endDesc; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private int childPosition = -1;//当天在列表中的子索引 + private DateAdapter mDateAdapter; + private List mList; + private DateOnClickListener mOnClickListener; + + private DatePopupWindow(Builder builder) { + this.activity = builder.context; + this.currentDate = builder.date; + this.startDesc = builder.startDesc; + this.endDesc = builder.endDesc; + this.dayFlag = builder.dayFlag; + this.startGroupPosition = builder.startGroupPosition; + this.startChildPosition = builder.startChildPosition; + this.endGroupPosition = builder.endGroupPosition; + this.endChildPosition = builder.endChildPosition; + this.mOnClickListener = builder.mOnClickListener; + + LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + rootView = inflater.inflate(R.layout.popu_date, null); + this.setContentView(rootView); + this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); + this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); + this.setAnimationStyle(R.style.dialogWindowAnim); + this.setFocusable(true); + this.setBackgroundDrawable(new BitmapDrawable()); + this.setOnDismissListener(new ShareDismissListener()); + backgroundAlpha(activity); + + initView(); + setInitSelect(); + create(builder.parentView); + } + + private void backgroundAlpha(Activity context) { + WindowManager.LayoutParams lp = context.getWindow().getAttributes(); + lp.alpha = 1.0f; //0.0-1.0 + context.getWindow().setAttributes(lp); + } + + private void initView() { + selectDoneButton = rootView.findViewById(R.id.selectDoneButton); + dateRecyclerView = rootView.findViewById(R.id.dateRecyclerView); + hintTextTextView = rootView.findViewById(R.id.hintTextTextView); + endWeekView = rootView.findViewById(R.id.endWeekView); + endDateView = rootView.findViewById(R.id.endDateView); + endDateLayout = rootView.findViewById(R.id.endDateLayout); + sumTimeView = rootView.findViewById(R.id.sumTimeView); + startWeekView = rootView.findViewById(R.id.startWeekView); + startDateView = rootView.findViewById(R.id.startDateView); + TextView clearButton = rootView.findViewById(R.id.clearButton); + TextView closeButton = rootView.findViewById(R.id.closeButton); + TextView startDateDescView = rootView.findViewById(R.id.startDateDescView); + TextView endDateDescView = rootView.findViewById(R.id.endDateDescView); + startDateDescView.setText(startDesc + "日期"); + endDateDescView.setText(endDesc + "日期"); + selectDoneButton.setChangeAlphaWhenPress(true); + selectDoneButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnClickListener != null) { + String startDate = mList.get(startGroupPosition) + .getList() + .get(startChildPosition) + .getDate(); + String endDate = mList.get(endGroupPosition) + .getList() + .get(endChildPosition) + .getDate(); + mOnClickListener.getDate(startDate, endDate, startGroupPosition, startChildPosition, endGroupPosition, endChildPosition); + } + DatePopupWindow.this.dismiss(); + } + }); + closeButton.setOnClickListener(v -> DatePopupWindow.this.dismiss()); + clearButton.setOnClickListener(v -> { + initView();//重置当前view + setDefaultSelect();//选中初始状态值 + }); + LinearLayoutManager manager = new LinearLayoutManager(activity); + manager.setOrientation(LinearLayoutManager.VERTICAL); + mList = new ArrayList<>(); + mDateAdapter = new DateAdapter(mList); + dateRecyclerView.setLayoutManager(manager); + dateRecyclerView.setAdapter(mDateAdapter); + dateRecyclerView.setItemViewCacheSize(200); + dateRecyclerView.setHasFixedSize(true); + dateRecyclerView.setNestedScrollingEnabled(false); + initData(); + } + + private void initData() { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);//当前日期转date + try { + if (currentDate == null) { + return; + } + mSetDate = dateFormat.parse(currentDate); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化日期 + Calendar c = Calendar.getInstance(); + c.setTime(mSetDate); + int firstM = c.get(Calendar.MONTH) + 1;//获取月份 月份是从0开始,需要+1 + int days = c.get(Calendar.DATE);//日期 + int week = c.get(Calendar.DAY_OF_WEEK);//周几 + //获取当前这个月最大天数 + int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + +// 获取上2个月的数据 +// for (int i = 0; i <= 1; i++) { +// //当前月份循环减1 +// c.add(Calendar.MONTH, -1);//倒序,+1正序 +// DateInfo lastMonth = new DateInfo(); +// List lastDayList = new ArrayList<>(); +// int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH); +// lastMonth.setDate(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月"); +// //周几 +// int weeks = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; +// //根据该月的第一天,星期几,填充上个月的空白日期 +// for (int t = 0; t < weeks; t++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName(""); +// dayInfo.setEnable(false); +// dayInfo.setDate(""); +// lastDayList.add(dayInfo); +// } +// //该月的所有日期 +// for (int j = 0; j < maxDays; j++) { +// DayInfo dayInfo = new DayInfo(); +// dayInfo.setName((j + 1) + ""); +// dayInfo.setEnable(true); +// dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + (j + 1)); +// lastDayList.add(dayInfo); +// } +// lastMonth.setList(lastDayList); +// mList.add(i, lastMonth); +// } + DateInfo month = new DateInfo(); + List dayList = new ArrayList<>(); + month.setDate(c.get(Calendar.YEAR) + "年" + firstM + "月"); + //当前月第一天是周几 + int w = CalendarUtil.getWeekNoFormat(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-01") - 1; + //根据该月的第一天,星期几,填充上个月的空白日期 + for (int t = 0; t < w; t++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(""); + dayInfo.setEnable(false); + dayInfo.setDate(""); + dayList.add(dayInfo); + } + //计算当前月的天数 + for (int i = 1; i <= maxDay; i++) { + DayInfo dayInfo = new DayInfo(); + dayInfo.setName(i + ""); + dayInfo.setDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + i); + int c_year = Integer.parseInt(currentDate.split("-")[0]); + int c_month = Integer.parseInt(currentDate.split("-")[1]); + int c_day = Integer.parseInt(currentDate.split("-")[2]); + if (c_year == c.get(Calendar.YEAR) && c_month == (c.get(Calendar.MONTH) + 1) && c_day == i) { + childPosition = dayList.size(); + } + //设置日期是否可选择,当大于当前日期时,是不可选,setEnable(false) + if (i <= days) { + dayInfo.setEnable(true); + } else { + dayInfo.setEnable(false); + } + dayList.add(dayInfo); + } + month.setList(dayList); + mList.add(mList.size(), month); + mDateAdapter.updateData(); + } + + private void setInitSelect() { + if (0 <= this.startGroupPosition && this.startGroupPosition < mList.size() && + 0 <= this.endGroupPosition && this.endGroupPosition < mList.size()) { + int maxStartChild = mList.get(this.startGroupPosition).getList().size(); + int maxEndChild = mList.get(this.endGroupPosition).getList().size(); + if (0 <= this.startChildPosition && this.startChildPosition < maxStartChild && + 0 <= this.endChildPosition && this.endChildPosition < maxEndChild) { + setInit(); + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } else { + setDefaultSelect();//设置根据mDate设定今天和昨天日期 + } + } + + private void setInit() { + mList.get(this.startGroupPosition).getList().get(this.startChildPosition).setStatus(1); + mList.get(this.endGroupPosition).getList().get(this.endChildPosition).setStatus(2); + mDateAdapter.notifyDataSetChanged(); + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + dateRecyclerView.scrollToPosition(this.startGroupPosition); + } + + //设置日历标明当前日期的状态 + private void setDefaultSelect() { + if (childPosition == -1) return; + String date = mList.get(0).getList().get(childPosition).getDate(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Date curDate = null; + try { + curDate = sdf.parse(formatDate(date)); + } catch (ParseException e) { + e.printStackTrace(); + } + if (curDate == null) return; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(curDate); + calendar.add(Calendar.DATE, 1); + + int year = Integer.parseInt(date.split("-")[0]); + int month = Integer.parseInt(date.split("-")[1]); + if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) + 1 + && childPosition < mList.get(0).getList().size() - 1) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 0; + this.endChildPosition = childPosition - 1; + setInit(); + } else { + for (int i = 0; i < mList.get(1).getList().size(); i++) { + if (!TextUtils.isEmpty(mList.get(1).getList().get(i).getDate())) { + this.startGroupPosition = 0; + this.startChildPosition = childPosition; + this.endGroupPosition = 1; + this.endChildPosition = i; + setInit(); + break; + } + } + } + } + + /** + * 设置起始时间和结束时间的选中标识,或者设置不选中 + * + * @param startDate + * @param endDate + * @param status 选中设置为true 设置不选中false + */ + @SuppressLint("SetTextI18n") + private void getOffsetDate(String startDate, String endDate, boolean status) { + //更新开始日期和结束日期的信息和状态 + Calendar sCalendar = CalendarUtil.toDate(startDate); + Calendar eCalendar = CalendarUtil.toDate(endDate); + startDateView.setText((sCalendar.get(Calendar.MONTH) + 1) + "月" + sCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(startDate)); + endDateView.setText((eCalendar.get(Calendar.MONTH) + 1) + "月" + eCalendar.get(Calendar.DAY_OF_MONTH) + "日"); + endWeekView.setText("周" + CalendarUtil.getWeekByFormat(endDate)); + int daysOffset = Integer.parseInt(CalendarUtil.getTwoDay(endDate, startDate)); + if (daysOffset < 0) return; + if (dayFlag) { + sumTimeView.setText("共" + (daysOffset + 1) + "天"); + } else { + sumTimeView.setText("共" + daysOffset + "晚"); + } + //更改结束日期和完成按钮状态 + endDateLayout.setVisibility(View.VISIBLE); + hintTextTextView.setVisibility(View.GONE); + initButton("完成", true); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + Calendar c = Calendar.getInstance(); + DayInfo info = mList.get(startGroupPosition).getList().get(startChildPosition); + try { + c.setTime(sdf.parse(info.getDate())); + } catch (ParseException e) { + e.printStackTrace(); + } + //根据2个时间的相差天数去循环 + for (int i = 0; i < daysOffset; i++) { + //下一天(目标天) + c.add(Calendar.DATE, 1); + //改天的日期(目标天) + String d = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE); + //循环group列表 + for (int j = 0; j < mList.size(); j++) { + //获取该月的随机一个dayInfo + DayInfo dayInfo = mList.get(j).getList().get(mList.get(j).getList().size() - 1); + boolean isCheck = false; + //判断该天是否和目标天是否是同一个月 + if (!TextUtils.isEmpty(dayInfo.getDate()) + && Integer.parseInt(dayInfo.getDate().split("-")[0]) == (c.get(Calendar.YEAR)) + && Integer.parseInt(dayInfo.getDate().split("-")[1]) == ((c.get(Calendar.MONTH) + 1))) { + //是同一个月,则循环该月多有天数 + for (int t = 0; t < mList.get(j).getList().size(); t++) { + //找到该月的日期与目标日期相同,存在,设置选择标记 + if (mList.get(j).getList().get(t).getDate().equals(d)) { + mList.get(j).getList().get(t).setSelect(status); + isCheck = true; + break; + } + } + } + if (isCheck) { + mDateAdapter.notifyItemChanged(j); + break; + } + } + } + } + + private String formatDate(String date) { + if (TextUtils.isEmpty(date)) return ""; + return date.split("-")[0] + + "-" + + (date.split("-")[1].length() < 2 ? "0" + date.split("-")[1] : date.split("-")[1]) + + "-" + + (date.split("-")[2].length() < 2 ? "0" + date.split("-")[2] : date.split("-")[2]); + } + + private void create(View view) { + this.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + /** + * return startDate、endDate(格式:2012-12-10) + * 选中完成后返回开始时间和结束时间 + * return startGroupPosition、startChildPosition、endGroupPosition、endChildPosition + * 返回选中时间区间的状态标记,监听中接收后在builder中setInitSelect()方法中直接传出入(可用于记录上次选中的状态,用户再点击进入的时候恢复上一次的区间选中状态) + */ + public interface DateOnClickListener { + void getDate(String startDate, String endDate, int startGroupPosition, int startChildPosition, int endGroupPosition, int endChildPosition); + } + + public static class Builder { + private String date; + private Activity context; + private View parentView; + private String startDesc; + private String endDesc; + private boolean dayFlag = true; + private int startGroupPosition = -1; + private int endGroupPosition = -1; + private int startChildPosition = -1; + private int endChildPosition = -1; + private DateOnClickListener mOnClickListener = null; + + public Builder(Activity context, Date date, View parentView) { + this.date = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(date); + this.context = context; + this.parentView = parentView; + this.startDesc = "开始"; + this.endDesc = "结束"; + this.dayFlag = true; + } + + public DatePopupWindow builder() { + return new DatePopupWindow(this); + } + + public Builder setInitSelect(int startGroup, int startChild, int endGroup, int endChild) { + this.startGroupPosition = startGroup; + this.startChildPosition = startChild; + this.endGroupPosition = endGroup; + this.endChildPosition = endChild; + return this; + } + + public Builder setInitDay(boolean dayFlag) { + this.dayFlag = dayFlag; + if (dayFlag) { + this.startDesc = "开始"; + this.endDesc = "结束"; + } else { + this.startDesc = "入住"; + this.endDesc = "离开"; + } + return this; + } + + public Builder setDateOnClickListener(DateOnClickListener mlListener) { + mOnClickListener = mlListener; + return this; + } + } + + private class DateAdapter extends BaseQuickAdapter { + + DateAdapter(@Nullable List data) { + super(R.layout.adapter_select_date, data); + } + + @Override + public void onBindViewHolder(BaseViewHolder holder, int positions) { + super.onBindViewHolder(holder, positions); + TextView monthTitleView = holder.getView(R.id.monthTitleView); + monthTitleView.setText(mList.get(positions).getDate()); + } + + @Override + protected void convert(final BaseViewHolder helper, final DateInfo item) { + RecyclerView monthRecyclerView = helper.getView(R.id.monthRecyclerView); + + GridLayoutManager manager = new GridLayoutManager(activity, 7); + monthRecyclerView.setLayoutManager(manager); + final TempAdapter groupAdapter = new TempAdapter(item.getList()); + monthRecyclerView.setAdapter(groupAdapter); + monthRecyclerView.setItemViewCacheSize(200); + monthRecyclerView.setHasFixedSize(true); + monthRecyclerView.setNestedScrollingEnabled(false); + groupAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { + @Override + public void onItemClick(BaseQuickAdapter adapter, View view, int position) { + if (!item.getList().get(position).isEnable()) return; + if (TextUtils.isEmpty(item.getList().get(position).getName())) return; + if (TextUtils.isEmpty(item.getList().get(position).getDate())) return; + int status = item.getList().get(position).getStatus(); + if (status == 0 && + startGroupPosition == -1 && + startChildPosition == -1 && + item.getList().get(position).isEnable()) { + //开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + + startDateView.setText(CalendarUtil.FormatDateMD(item.getList().get(position).getDate())); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + if (status == 0 && endGroupPosition == -1 && endChildPosition == -1) { + int offset = Integer.parseInt(CalendarUtil.getTwoDay(item.getList().get(position).getDate() + , mList.get(startGroupPosition).getList().get(startChildPosition).getDate())); + //判断该离开日期是否比入住时间还小,是则重新设置入住时间。 + if (offset < 0) { + //刷新上一个开始日期 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + //设置新的入开始日期 + item.getList().get(position).setStatus(1); + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + adapter.notifyItemChanged(position); + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + return; + } + //结束 + item.getList().get(position).setStatus(2); + adapter.notifyItemChanged(position); + endGroupPosition = helper.getAdapterPosition(); + endChildPosition = position; + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), true); + return; + } + //重置开始和结束时间,设置开始时间 + if (status == 0 && endGroupPosition != -1 && endChildPosition != -1 && startChildPosition != -1 && startGroupPosition != -1) { + //重置开始和结束 + mList.get(startGroupPosition).getList().get(startChildPosition).setStatus(0); + mList.get(endGroupPosition).getList().get(endChildPosition).setStatus(0); + mDateAdapter.notifyItemChanged(startGroupPosition); + mDateAdapter.notifyItemChanged(endGroupPosition); + //重置选择间区的状态 + getOffsetDate(mList.get(startGroupPosition).getList().get(startChildPosition).getDate(), + mList.get(endGroupPosition).getList().get(endChildPosition).getDate(), false); + //设置开始 + item.getList().get(position).setStatus(1); + adapter.notifyItemChanged(position); + String mStartTime = CalendarUtil.FormatDateMD(item.getList().get(position).getDate()); + startDateView.setText(mStartTime); + startWeekView.setText("周" + CalendarUtil.getWeekByFormat(item.getList().get(position).getDate())); + + startGroupPosition = helper.getAdapterPosition(); + startChildPosition = position; + endGroupPosition = -1; + endChildPosition = -1; + sumTimeView.setText("请选择" + endDesc + "时间"); + initButton("请选择" + endDesc + "时间", false); + endDateLayout.setVisibility(View.GONE); + hintTextTextView.setText(endDesc + "日期"); + hintTextTextView.setVisibility(View.VISIBLE); + } + } + }); + } + + void updateData() { + notifyDataSetChanged(); + } + } + + private class TempAdapter extends BaseQuickAdapter { + TempAdapter(@Nullable List data) { + super(R.layout.adapter_select_date_child, data); + } + + @Override + protected void convert(BaseViewHolder helper, DayInfo item) { + String name = item.getName(); + boolean isSelect = item.isSelect(); + boolean isEnable = item.isEnable(); + int status = item.getStatus(); + helper.setText(R.id.dateView, name); + //默认 + if (status == 0) { + if (isSelect) { + //选中 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else { + //没选中状态 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.black)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.white)); + } + } else if (status == 1) { + //开始 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, startDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } else if (status == 2) { + //结束 + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.setText(R.id.statusView, endDesc); + helper.getView(R.id.statusView).setVisibility(View.VISIBLE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + ((TextView) helper.getView(R.id.statusView)).setTextColor(activity.getResources().getColor(R.color.white)); + ((TextView) helper.getView(R.id.dateView)).setTextColor(activity.getResources().getColor(R.color.white)); + (helper.getView(R.id.selectedLayout)).setBackgroundColor(activity.getResources().getColor(R.color.mainThemeColor)); + } + //设置当前日期前的样式,没选中,并状态为0情况下 + if (!isSelect && status == 0) { + if (!isEnable) { + //无效 + TextView textView = helper.getView(R.id.dateDelView); + if (TextUtils.isEmpty(name)) { + textView.setVisibility(View.GONE); + } else { + textView.setText(name); + textView.setVisibility(View.VISIBLE); + } + textView.setTextColor(activity.getResources().getColor(R.color.mainThemeColor)); + helper.getView(R.id.dateView).setVisibility(View.GONE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + } else { + helper.getView(R.id.dateView).setVisibility(View.VISIBLE); + helper.getView(R.id.statusView).setVisibility(View.GONE); + helper.getView(R.id.dateDelView).setVisibility(View.GONE); + TextView textView = helper.getView(R.id.dateView); + textView.setTextColor(activity.getResources().getColor(R.color.black)); + } + } + } + } + + private class ShareDismissListener implements OnDismissListener { + @Override + public void onDismiss() { + backgroundAlpha(activity); + } + } + + private void initButton(String msg, boolean enable) { + selectDoneButton.setText(msg); + if (enable) { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.mainThemeColor)); + } else { + selectDoneButton.setBackgroundColor(ActivityCompat.getColor(activity, R.color.hintColor)); + } + selectDoneButton.setEnabled(enable); + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java new file mode 100755 index 0000000..9bffa8e --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/DayInfo.java @@ -0,0 +1,49 @@ +package com.casic.dcms.widgets.datepicker; + +public class DayInfo { + private String name; + private boolean isEnable; + private String date; + private int status = 0; + private boolean select; + + boolean isSelect() { + return select; + } + + void setSelect(boolean select) { + this.select = select; + } + + int getStatus() { + return status; + } + + void setStatus(int status) { + this.status = status; + } + + String getDate() { + return date; + } + + void setDate(String date) { + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + boolean isEnable() { + return isEnable; + } + + void setEnable(boolean enable) { + isEnable = enable; + } +} diff --git a/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java new file mode 100755 index 0000000..7bc6dbf --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/datepicker/LineTextView.java @@ -0,0 +1,47 @@ +package com.casic.dcms.widgets.datepicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; + +import com.casic.dcms.R; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; + +/** + * 不可选日期斜线 + */ +public class LineTextView extends AppCompatTextView { + private Paint mPaint; + private Context context; + + public LineTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.context = context; + mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaint.setStrokeWidth(QMUIDisplayHelper.dp2px(context, 1)); + mPaint.setColor(getResources().getColor(R.color.punishColor)); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //斜线坐标 + int startX, startY, endX, endY; + + //视图宽高 + int width = getWidth(); + int height = getHeight(); + + //计算坐标 + startX = width; + startY = QMUIDisplayHelper.dp2px(context, 2); + endX = 0; + endY = height - QMUIDisplayHelper.dp2px(context, 3); + //画斜线 + canvas.drawLine(startX, startY, endX, endY, mPaint); + } +} diff --git a/app/src/main/res/anim/dialog_enter_anim.xml b/app/src/main/res/anim/dialog_enter_anim.xml new file mode 100644 index 0000000..da91274 --- /dev/null +++ b/app/src/main/res/anim/dialog_enter_anim.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/dialog_exit_anim.xml b/app/src/main/res/anim/dialog_exit_anim.xml new file mode 100644 index 0000000..3e7c4a4 --- /dev/null +++ b/app/src/main/res/anim/dialog_exit_anim.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_default.xml b/app/src/main/res/drawable/ic_psd_default.xml new file mode 100644 index 0000000..cc4f031 --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_default.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_psd_show.xml b/app/src/main/res/drawable/ic_psd_show.xml new file mode 100644 index 0000000..4d3338a --- /dev/null +++ b/app/src/main/res/drawable/ic_psd_show.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/password_selector.xml b/app/src/main/res/drawable/password_selector.xml new file mode 100644 index 0000000..1d44b4e --- /dev/null +++ b/app/src/main/res/drawable/password_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_clean_list.xml b/app/src/main/res/layout/activity_clean_list.xml index eb35023..6776de4 100644 --- a/app/src/main/res/layout/activity_clean_list.xml +++ b/app/src/main/res/layout/activity_clean_list.xml @@ -7,10 +7,10 @@ - + + + + - + android:layout_height="match_parent"> - + - + - - + + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index f4e06c6..88b00c3 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -20,29 +20,47 @@ android:layout_marginHorizontal="30dp" android:orientation="vertical"> - + - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date.xml b/app/src/main/res/layout/adapter_select_date.xml new file mode 100644 index 0000000..9e22615 --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_select_date_child.xml b/app/src/main/res/layout/adapter_select_date_child.xml new file mode 100644 index 0000000..cb767de --- /dev/null +++ b/app/src/main/res/layout/adapter_select_date_child.xml @@ -0,0 +1,39 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_package_base.xml b/app/src/main/res/layout/include_package_base.xml new file mode 100644 index 0000000..45f8c15 --- /dev/null +++ b/app/src/main/res/layout/include_package_base.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_record_recycleview.xml b/app/src/main/res/layout/item_record_recycleview.xml index dd29b50..f97bcf5 100644 --- a/app/src/main/res/layout/item_record_recycleview.xml +++ b/app/src/main/res/layout/item_record_recycleview.xml @@ -5,27 +5,41 @@ android:padding="@dimen/padding_10dp"> - - + + + + + android:text="2021/06/01 09:13" + android:textColor="@color/listSubColor" /> \ No newline at end of file diff --git a/app/src/main/res/layout/popu_date.xml b/app/src/main/res/layout/popu_date.xml new file mode 100644 index 0000000..5c4c266 --- /dev/null +++ b/app/src/main/res/layout/popu_date.xml @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 70e18b7..6ec3787 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,6 +8,11 @@ @color/colorAccent + +