diff --git a/app/build.gradle b/app/build.gradle index 3286df2..7ede907 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,5 +99,7 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //经纬度逆编码 + implementation 'com.amap.api:search:7.9.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } diff --git a/app/build.gradle b/app/build.gradle index 3286df2..7ede907 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,5 +99,7 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //经纬度逆编码 + implementation 'com.amap.api:search:7.9.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } 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 92f30f1..7630eee 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -2,6 +2,7 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -10,8 +11,11 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.amap.api.services.core.LatLonPoint; import com.casic.dcms.R; import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.IAddressListener; import java.util.List; @@ -62,7 +66,7 @@ this.clickListener = onItemClickListener; } - static class ItemViewHolder extends RecyclerView.ViewHolder { + class ItemViewHolder extends RecyclerView.ViewHolder { private TextView workTimeView; private TextView toiletNameView; @@ -81,7 +85,22 @@ void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); - workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + + String lng = rowsBean.getLng(); + if (TextUtils.isEmpty(lng)) { + return; + } + String lat = rowsBean.getLat(); + if (TextUtils.isEmpty(lat)) { + return; + } + LatLonPoint latLonPoint = new LatLonPoint(Double.parseDouble(lat), Double.parseDouble(lng)); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + workerPositionView.setText(address); + } + }); workTimeView.setText(rowsBean.getCreateTime()); } } diff --git a/app/build.gradle b/app/build.gradle index 3286df2..7ede907 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,5 +99,7 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //经纬度逆编码 + implementation 'com.amap.api:search:7.9.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } 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 92f30f1..7630eee 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -2,6 +2,7 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -10,8 +11,11 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.amap.api.services.core.LatLonPoint; import com.casic.dcms.R; import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.IAddressListener; import java.util.List; @@ -62,7 +66,7 @@ this.clickListener = onItemClickListener; } - static class ItemViewHolder extends RecyclerView.ViewHolder { + class ItemViewHolder extends RecyclerView.ViewHolder { private TextView workTimeView; private TextView toiletNameView; @@ -81,7 +85,22 @@ void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); - workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + + String lng = rowsBean.getLng(); + if (TextUtils.isEmpty(lng)) { + return; + } + String lat = rowsBean.getLat(); + if (TextUtils.isEmpty(lat)) { + return; + } + LatLonPoint latLonPoint = new LatLonPoint(Double.parseDouble(lat), Double.parseDouble(lng)); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + workerPositionView.setText(address); + } + }); workTimeView.setText(rowsBean.getCreateTime()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 9d141c3..3b9759b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,13 +3,15 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.util.Log; import android.widget.TextView; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; import com.casic.dcms.R; import com.casic.dcms.adapter.HomeRecycleAdapter; import com.casic.dcms.base.BaseFragment; @@ -33,17 +35,24 @@ import com.casic.dcms.ui.PersonOnlineActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; +import org.jetbrains.annotations.NotNull; + +import java.lang.ref.WeakReference; + import butterknife.BindView; /** - * 此页面后期可能需要添加滑动吸顶效果 + * TODO 此页面后期可能需要添加滑动吸顶效果 */ public class HomePageFragment extends BaseFragment implements IUserDataView, IHomePageView { + private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -57,6 +66,8 @@ private Context context; private UserDataPresenterImpl userDataPresenter; private HomePagePresenterImpl homePagePresenter; + private Gson gson; + private WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -70,34 +81,146 @@ @Override protected void initData() { + gson = new Gson(); userDataPresenter = new UserDataPresenterImpl(this); - userDataPresenter.onReadyRetrofitRequest(); - homePagePresenter = new HomePagePresenterImpl(this); - homePagePresenter.onReadyRetrofitRequest("05"); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override protected void initEvent() { + /** + * 根据登录账号判断是否是同一个人登录,如果是,从缓存读取数据,否则请求后台数据,获取最新登录者的部门等信息 + * */ + String userBeanJson = (String) SaveKeyValues.getValue("userBean", ""); + if (userBeanJson.equals("")) { + Log.d(TAG, "initData: 从没有人登录过,需要从新获取数据"); + userDataPresenter.onReadyRetrofitRequest(); + homePagePresenter.onReadyRetrofitRequest("05"); + } else { + UserBean userBean = gson.fromJson(userBeanJson, UserBean.class); + if (userBean.getData().getAccount().equals(StringHelper.getUserAccount())) { + Log.d(TAG, "initData: 同一人重复登录,加载缓存"); + Message userInfoMessage = weakReferenceHandler.obtainMessage(); + userInfoMessage.what = 2021061101; + userInfoMessage.obj = userBean; + weakReferenceHandler.sendMessage(userInfoMessage); + String homePageBeanJson = (String) SaveKeyValues.getValue("homePageBean", ""); + HomePageBean homePageBean = gson.fromJson(homePageBeanJson, HomePageBean.class); + Message homePageMessage = weakReferenceHandler.obtainMessage(); + homePageMessage.what = 2021061102; + homePageMessage.obj = homePageBean; + weakReferenceHandler.sendMessage(homePageMessage); + } else { + Log.d(TAG, "initData: 有人登录过,但是上次和这次登录者不是同一人,需要从新获取数据"); + userDataPresenter.onReadyRetrofitRequest(); + homePagePresenter.onReadyRetrofitRequest("05"); + } + } } - @SuppressLint("SetTextI18n") + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(HomePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @SuppressLint("SetTextI18n") + @Override + public void handleMessage(@NotNull Message msg) { + HomePageFragment homePageFragment = reference.get(); + Context context = homePageFragment.context; + switch (msg.what) { + case 2021061101: + UserBean userBean = (UserBean) msg.obj; + //QMUIRadiusImageView无法动态设置圆形头像,借助Glide实现圆形头像 +// Glide.with(homePageFragment).load(R.mipmap.app_logo).apply(RequestOptions.circleCropTransform()).into(userIconView); + Glide.with(homePageFragment).load(R.mipmap.app_logo).into(homePageFragment.userIconView); + + UserBean.DataBean data = userBean.getData(); + homePageFragment.userNameView.setText(data.getName()); + homePageFragment.userDeptView.setText(data.getDeptName() + data.getRoleNames()); + + //把常用的几个属性单独存起来 + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); + break; + case 2021061102: + HomePageBean resultBean = (HomePageBean) msg.obj; + HomeRecycleAdapter adapter = new HomeRecycleAdapter(context, resultBean.getData().getMenus()); + homePageFragment.homeRecyclerView.setLayoutManager(new GridLayoutManager(context, 3)); + homePageFragment.homeRecyclerView.setAdapter(adapter); + adapter.setOnGridItemClickListener(new HomeRecycleAdapter.OnGridItemClickListener() { + @Override + public void onClick(String itemName) { + Intent intent = new Intent(); + switch (itemName) { + case "案卷上报": + intent.setClass(context, CaseUploadActivity.class); + break; + case "快速上报": + intent.setClass(context, CaseUploadQuicklyActivity.class); + break; + case "三包上报": + intent.setClass(context, CaseUploadPackageActivity.class); + break; + case "案卷核实": + intent.setClass(context, CaseVerifyActivity.class); + break; + case "案卷核查": + intent.setClass(context, CaseCheckActivity.class); + break; + case "案卷处理": + intent.setClass(context, CaseHandleActivity.class); + break; + case "紧急要件": + intent.setClass(context, UrgentCaseActivity.class); + break; + case "超时督办": + intent.setClass(context, OvertimeCaseActivity.class); + break; + case "统计分析": + intent.setClass(context, DataAnalysisActivity.class); + break; + case "在岗人员": + intent.setClass(context, PersonOnlineActivity.class); + break; + case "案卷查询": + intent.setClass(context, CaseSearchActivity.class); + break; + case "案卷分布": + intent.setClass(context, CaseOnMapActivity.class); + break; + case "公厕保洁": + intent.setClass(context, PublicToiletActivity.class); + break; + case "三包处置": + intent.setClass(context, PackageHandleActivity.class); + break; + default: + break; + } + context.startActivity(intent); + } + }); + break; + } + } + } + @Override public void obtainUserData(UserBean userBean) { if (userBean.isSuccess()) { - //QMUIRadiusImageView无法动态设置圆形头像,借助Glide实现圆形头像 - Glide.with(this).load(R.mipmap.app_logo).apply(RequestOptions.circleCropTransform()).into(userIconView); - - UserBean.DataBean data = userBean.getData(); - userNameView.setText(data.getName()); - userDeptView.setText(data.getDeptName() + data.getRoleNames()); - - StringHelper.saveUserName(data.getName()); - StringHelper.saveUserPhone(data.getPhone()); - StringHelper.saveUserDept(data.getDeptName()); - StringHelper.saveUserDeptId(data.getDeptId()); - StringHelper.saveUserId(data.getId()); + SaveKeyValues.putValue("userBean", gson.toJson(userBean)); + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021061101; + message.obj = userBean; + weakReferenceHandler.sendMessage(message); } } @@ -105,62 +228,11 @@ @Override public void obtainHomePageResult(HomePageBean resultBean) { if (resultBean.isSuccess()) { - HomeRecycleAdapter adapter = new HomeRecycleAdapter(context, resultBean.getData().getMenus()); - homeRecyclerView.setLayoutManager(new GridLayoutManager(context, 3)); - homeRecyclerView.setAdapter(adapter); - adapter.setOnGridItemClickListener(new HomeRecycleAdapter.OnGridItemClickListener() { - @Override - public void onClick(String itemName) { - Intent intent = new Intent(); - switch (itemName) { - case "案卷上报": - intent.setClass(context, CaseUploadActivity.class); - break; - case "快速上报": - intent.setClass(context, CaseUploadQuicklyActivity.class); - break; - case "三包上报": - intent.setClass(context, CaseUploadPackageActivity.class); - break; - case "案卷核实": - intent.setClass(context, CaseVerifyActivity.class); - break; - case "案卷核查": - intent.setClass(context, CaseCheckActivity.class); - break; - case "案卷处理": - intent.setClass(context, CaseHandleActivity.class); - break; - case "紧急要件": - intent.setClass(context, UrgentCaseActivity.class); - break; - case "超时督办": - intent.setClass(context, OvertimeCaseActivity.class); - break; - case "统计分析": - intent.setClass(context, DataAnalysisActivity.class); - break; - case "在岗人员": - intent.setClass(context, PersonOnlineActivity.class); - break; - case "案卷查询": - intent.setClass(context, CaseSearchActivity.class); - break; - case "案卷分布": - intent.setClass(context, CaseOnMapActivity.class); - break; - case "公厕保洁": - intent.setClass(context, PublicToiletActivity.class); - break; - case "三包处置": - intent.setClass(context, PackageHandleActivity.class); - break; - default: - break; - } - startActivity(intent); - } - }); + SaveKeyValues.putValue("homePageBean", gson.toJson(resultBean)); + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021061102; + message.obj = resultBean; + weakReferenceHandler.sendMessage(message); } } diff --git a/app/build.gradle b/app/build.gradle index 3286df2..7ede907 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,5 +99,7 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //经纬度逆编码 + implementation 'com.amap.api:search:7.9.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } 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 92f30f1..7630eee 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -2,6 +2,7 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -10,8 +11,11 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.amap.api.services.core.LatLonPoint; import com.casic.dcms.R; import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.IAddressListener; import java.util.List; @@ -62,7 +66,7 @@ this.clickListener = onItemClickListener; } - static class ItemViewHolder extends RecyclerView.ViewHolder { + class ItemViewHolder extends RecyclerView.ViewHolder { private TextView workTimeView; private TextView toiletNameView; @@ -81,7 +85,22 @@ void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); - workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + + String lng = rowsBean.getLng(); + if (TextUtils.isEmpty(lng)) { + return; + } + String lat = rowsBean.getLat(); + if (TextUtils.isEmpty(lat)) { + return; + } + LatLonPoint latLonPoint = new LatLonPoint(Double.parseDouble(lat), Double.parseDouble(lng)); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + workerPositionView.setText(address); + } + }); workTimeView.setText(rowsBean.getCreateTime()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 9d141c3..3b9759b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,13 +3,15 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.util.Log; import android.widget.TextView; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; import com.casic.dcms.R; import com.casic.dcms.adapter.HomeRecycleAdapter; import com.casic.dcms.base.BaseFragment; @@ -33,17 +35,24 @@ import com.casic.dcms.ui.PersonOnlineActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; +import org.jetbrains.annotations.NotNull; + +import java.lang.ref.WeakReference; + import butterknife.BindView; /** - * 此页面后期可能需要添加滑动吸顶效果 + * TODO 此页面后期可能需要添加滑动吸顶效果 */ public class HomePageFragment extends BaseFragment implements IUserDataView, IHomePageView { + private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -57,6 +66,8 @@ private Context context; private UserDataPresenterImpl userDataPresenter; private HomePagePresenterImpl homePagePresenter; + private Gson gson; + private WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -70,34 +81,146 @@ @Override protected void initData() { + gson = new Gson(); userDataPresenter = new UserDataPresenterImpl(this); - userDataPresenter.onReadyRetrofitRequest(); - homePagePresenter = new HomePagePresenterImpl(this); - homePagePresenter.onReadyRetrofitRequest("05"); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override protected void initEvent() { + /** + * 根据登录账号判断是否是同一个人登录,如果是,从缓存读取数据,否则请求后台数据,获取最新登录者的部门等信息 + * */ + String userBeanJson = (String) SaveKeyValues.getValue("userBean", ""); + if (userBeanJson.equals("")) { + Log.d(TAG, "initData: 从没有人登录过,需要从新获取数据"); + userDataPresenter.onReadyRetrofitRequest(); + homePagePresenter.onReadyRetrofitRequest("05"); + } else { + UserBean userBean = gson.fromJson(userBeanJson, UserBean.class); + if (userBean.getData().getAccount().equals(StringHelper.getUserAccount())) { + Log.d(TAG, "initData: 同一人重复登录,加载缓存"); + Message userInfoMessage = weakReferenceHandler.obtainMessage(); + userInfoMessage.what = 2021061101; + userInfoMessage.obj = userBean; + weakReferenceHandler.sendMessage(userInfoMessage); + String homePageBeanJson = (String) SaveKeyValues.getValue("homePageBean", ""); + HomePageBean homePageBean = gson.fromJson(homePageBeanJson, HomePageBean.class); + Message homePageMessage = weakReferenceHandler.obtainMessage(); + homePageMessage.what = 2021061102; + homePageMessage.obj = homePageBean; + weakReferenceHandler.sendMessage(homePageMessage); + } else { + Log.d(TAG, "initData: 有人登录过,但是上次和这次登录者不是同一人,需要从新获取数据"); + userDataPresenter.onReadyRetrofitRequest(); + homePagePresenter.onReadyRetrofitRequest("05"); + } + } } - @SuppressLint("SetTextI18n") + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(HomePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @SuppressLint("SetTextI18n") + @Override + public void handleMessage(@NotNull Message msg) { + HomePageFragment homePageFragment = reference.get(); + Context context = homePageFragment.context; + switch (msg.what) { + case 2021061101: + UserBean userBean = (UserBean) msg.obj; + //QMUIRadiusImageView无法动态设置圆形头像,借助Glide实现圆形头像 +// Glide.with(homePageFragment).load(R.mipmap.app_logo).apply(RequestOptions.circleCropTransform()).into(userIconView); + Glide.with(homePageFragment).load(R.mipmap.app_logo).into(homePageFragment.userIconView); + + UserBean.DataBean data = userBean.getData(); + homePageFragment.userNameView.setText(data.getName()); + homePageFragment.userDeptView.setText(data.getDeptName() + data.getRoleNames()); + + //把常用的几个属性单独存起来 + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); + break; + case 2021061102: + HomePageBean resultBean = (HomePageBean) msg.obj; + HomeRecycleAdapter adapter = new HomeRecycleAdapter(context, resultBean.getData().getMenus()); + homePageFragment.homeRecyclerView.setLayoutManager(new GridLayoutManager(context, 3)); + homePageFragment.homeRecyclerView.setAdapter(adapter); + adapter.setOnGridItemClickListener(new HomeRecycleAdapter.OnGridItemClickListener() { + @Override + public void onClick(String itemName) { + Intent intent = new Intent(); + switch (itemName) { + case "案卷上报": + intent.setClass(context, CaseUploadActivity.class); + break; + case "快速上报": + intent.setClass(context, CaseUploadQuicklyActivity.class); + break; + case "三包上报": + intent.setClass(context, CaseUploadPackageActivity.class); + break; + case "案卷核实": + intent.setClass(context, CaseVerifyActivity.class); + break; + case "案卷核查": + intent.setClass(context, CaseCheckActivity.class); + break; + case "案卷处理": + intent.setClass(context, CaseHandleActivity.class); + break; + case "紧急要件": + intent.setClass(context, UrgentCaseActivity.class); + break; + case "超时督办": + intent.setClass(context, OvertimeCaseActivity.class); + break; + case "统计分析": + intent.setClass(context, DataAnalysisActivity.class); + break; + case "在岗人员": + intent.setClass(context, PersonOnlineActivity.class); + break; + case "案卷查询": + intent.setClass(context, CaseSearchActivity.class); + break; + case "案卷分布": + intent.setClass(context, CaseOnMapActivity.class); + break; + case "公厕保洁": + intent.setClass(context, PublicToiletActivity.class); + break; + case "三包处置": + intent.setClass(context, PackageHandleActivity.class); + break; + default: + break; + } + context.startActivity(intent); + } + }); + break; + } + } + } + @Override public void obtainUserData(UserBean userBean) { if (userBean.isSuccess()) { - //QMUIRadiusImageView无法动态设置圆形头像,借助Glide实现圆形头像 - Glide.with(this).load(R.mipmap.app_logo).apply(RequestOptions.circleCropTransform()).into(userIconView); - - UserBean.DataBean data = userBean.getData(); - userNameView.setText(data.getName()); - userDeptView.setText(data.getDeptName() + data.getRoleNames()); - - StringHelper.saveUserName(data.getName()); - StringHelper.saveUserPhone(data.getPhone()); - StringHelper.saveUserDept(data.getDeptName()); - StringHelper.saveUserDeptId(data.getDeptId()); - StringHelper.saveUserId(data.getId()); + SaveKeyValues.putValue("userBean", gson.toJson(userBean)); + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021061101; + message.obj = userBean; + weakReferenceHandler.sendMessage(message); } } @@ -105,62 +228,11 @@ @Override public void obtainHomePageResult(HomePageBean resultBean) { if (resultBean.isSuccess()) { - HomeRecycleAdapter adapter = new HomeRecycleAdapter(context, resultBean.getData().getMenus()); - homeRecyclerView.setLayoutManager(new GridLayoutManager(context, 3)); - homeRecyclerView.setAdapter(adapter); - adapter.setOnGridItemClickListener(new HomeRecycleAdapter.OnGridItemClickListener() { - @Override - public void onClick(String itemName) { - Intent intent = new Intent(); - switch (itemName) { - case "案卷上报": - intent.setClass(context, CaseUploadActivity.class); - break; - case "快速上报": - intent.setClass(context, CaseUploadQuicklyActivity.class); - break; - case "三包上报": - intent.setClass(context, CaseUploadPackageActivity.class); - break; - case "案卷核实": - intent.setClass(context, CaseVerifyActivity.class); - break; - case "案卷核查": - intent.setClass(context, CaseCheckActivity.class); - break; - case "案卷处理": - intent.setClass(context, CaseHandleActivity.class); - break; - case "紧急要件": - intent.setClass(context, UrgentCaseActivity.class); - break; - case "超时督办": - intent.setClass(context, OvertimeCaseActivity.class); - break; - case "统计分析": - intent.setClass(context, DataAnalysisActivity.class); - break; - case "在岗人员": - intent.setClass(context, PersonOnlineActivity.class); - break; - case "案卷查询": - intent.setClass(context, CaseSearchActivity.class); - break; - case "案卷分布": - intent.setClass(context, CaseOnMapActivity.class); - break; - case "公厕保洁": - intent.setClass(context, PublicToiletActivity.class); - break; - case "三包处置": - intent.setClass(context, PackageHandleActivity.class); - break; - default: - break; - } - startActivity(intent); - } - }); + SaveKeyValues.putValue("homePageBean", gson.toJson(resultBean)); + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021061102; + message.obj = resultBean; + weakReferenceHandler.sendMessage(message); } } diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index e2e4bb6..8d95580 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -15,6 +15,13 @@ import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeAddress; +import com.amap.api.services.geocoder.RegeocodeQuery; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.casic.dcms.utils.callback.IAddressListener; import com.casic.dcms.utils.callback.ICommunityListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -137,6 +144,32 @@ } /** + * 经纬度反编码为地址 + */ + public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + GeocodeSearch codeSearch = new GeocodeSearch(context); + // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 + RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 50, GeocodeSearch.GPS); + codeSearch.getFromLocationAsyn(query); + codeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) { + RegeocodeAddress regeocodeAddress = regeocodeResult.getRegeocodeAddress(); + if (regeocodeAddress != null) { + listener.onGetAddress(regeocodeAddress.getFormatAddress()); + } else { + listener.onGetAddress("解析位置失败"); + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { + + } + }); + } + + /** * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ diff --git a/app/build.gradle b/app/build.gradle index 3286df2..7ede907 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,5 +99,7 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //经纬度逆编码 + implementation 'com.amap.api:search:7.9.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } 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 92f30f1..7630eee 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -2,6 +2,7 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -10,8 +11,11 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.amap.api.services.core.LatLonPoint; import com.casic.dcms.R; import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.IAddressListener; import java.util.List; @@ -62,7 +66,7 @@ this.clickListener = onItemClickListener; } - static class ItemViewHolder extends RecyclerView.ViewHolder { + class ItemViewHolder extends RecyclerView.ViewHolder { private TextView workTimeView; private TextView toiletNameView; @@ -81,7 +85,22 @@ void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); - workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + + String lng = rowsBean.getLng(); + if (TextUtils.isEmpty(lng)) { + return; + } + String lat = rowsBean.getLat(); + if (TextUtils.isEmpty(lat)) { + return; + } + LatLonPoint latLonPoint = new LatLonPoint(Double.parseDouble(lat), Double.parseDouble(lng)); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + workerPositionView.setText(address); + } + }); workTimeView.setText(rowsBean.getCreateTime()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 9d141c3..3b9759b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,13 +3,15 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.util.Log; import android.widget.TextView; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; import com.casic.dcms.R; import com.casic.dcms.adapter.HomeRecycleAdapter; import com.casic.dcms.base.BaseFragment; @@ -33,17 +35,24 @@ import com.casic.dcms.ui.PersonOnlineActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; +import org.jetbrains.annotations.NotNull; + +import java.lang.ref.WeakReference; + import butterknife.BindView; /** - * 此页面后期可能需要添加滑动吸顶效果 + * TODO 此页面后期可能需要添加滑动吸顶效果 */ public class HomePageFragment extends BaseFragment implements IUserDataView, IHomePageView { + private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -57,6 +66,8 @@ private Context context; private UserDataPresenterImpl userDataPresenter; private HomePagePresenterImpl homePagePresenter; + private Gson gson; + private WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -70,34 +81,146 @@ @Override protected void initData() { + gson = new Gson(); userDataPresenter = new UserDataPresenterImpl(this); - userDataPresenter.onReadyRetrofitRequest(); - homePagePresenter = new HomePagePresenterImpl(this); - homePagePresenter.onReadyRetrofitRequest("05"); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override protected void initEvent() { + /** + * 根据登录账号判断是否是同一个人登录,如果是,从缓存读取数据,否则请求后台数据,获取最新登录者的部门等信息 + * */ + String userBeanJson = (String) SaveKeyValues.getValue("userBean", ""); + if (userBeanJson.equals("")) { + Log.d(TAG, "initData: 从没有人登录过,需要从新获取数据"); + userDataPresenter.onReadyRetrofitRequest(); + homePagePresenter.onReadyRetrofitRequest("05"); + } else { + UserBean userBean = gson.fromJson(userBeanJson, UserBean.class); + if (userBean.getData().getAccount().equals(StringHelper.getUserAccount())) { + Log.d(TAG, "initData: 同一人重复登录,加载缓存"); + Message userInfoMessage = weakReferenceHandler.obtainMessage(); + userInfoMessage.what = 2021061101; + userInfoMessage.obj = userBean; + weakReferenceHandler.sendMessage(userInfoMessage); + String homePageBeanJson = (String) SaveKeyValues.getValue("homePageBean", ""); + HomePageBean homePageBean = gson.fromJson(homePageBeanJson, HomePageBean.class); + Message homePageMessage = weakReferenceHandler.obtainMessage(); + homePageMessage.what = 2021061102; + homePageMessage.obj = homePageBean; + weakReferenceHandler.sendMessage(homePageMessage); + } else { + Log.d(TAG, "initData: 有人登录过,但是上次和这次登录者不是同一人,需要从新获取数据"); + userDataPresenter.onReadyRetrofitRequest(); + homePagePresenter.onReadyRetrofitRequest("05"); + } + } } - @SuppressLint("SetTextI18n") + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(HomePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @SuppressLint("SetTextI18n") + @Override + public void handleMessage(@NotNull Message msg) { + HomePageFragment homePageFragment = reference.get(); + Context context = homePageFragment.context; + switch (msg.what) { + case 2021061101: + UserBean userBean = (UserBean) msg.obj; + //QMUIRadiusImageView无法动态设置圆形头像,借助Glide实现圆形头像 +// Glide.with(homePageFragment).load(R.mipmap.app_logo).apply(RequestOptions.circleCropTransform()).into(userIconView); + Glide.with(homePageFragment).load(R.mipmap.app_logo).into(homePageFragment.userIconView); + + UserBean.DataBean data = userBean.getData(); + homePageFragment.userNameView.setText(data.getName()); + homePageFragment.userDeptView.setText(data.getDeptName() + data.getRoleNames()); + + //把常用的几个属性单独存起来 + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); + break; + case 2021061102: + HomePageBean resultBean = (HomePageBean) msg.obj; + HomeRecycleAdapter adapter = new HomeRecycleAdapter(context, resultBean.getData().getMenus()); + homePageFragment.homeRecyclerView.setLayoutManager(new GridLayoutManager(context, 3)); + homePageFragment.homeRecyclerView.setAdapter(adapter); + adapter.setOnGridItemClickListener(new HomeRecycleAdapter.OnGridItemClickListener() { + @Override + public void onClick(String itemName) { + Intent intent = new Intent(); + switch (itemName) { + case "案卷上报": + intent.setClass(context, CaseUploadActivity.class); + break; + case "快速上报": + intent.setClass(context, CaseUploadQuicklyActivity.class); + break; + case "三包上报": + intent.setClass(context, CaseUploadPackageActivity.class); + break; + case "案卷核实": + intent.setClass(context, CaseVerifyActivity.class); + break; + case "案卷核查": + intent.setClass(context, CaseCheckActivity.class); + break; + case "案卷处理": + intent.setClass(context, CaseHandleActivity.class); + break; + case "紧急要件": + intent.setClass(context, UrgentCaseActivity.class); + break; + case "超时督办": + intent.setClass(context, OvertimeCaseActivity.class); + break; + case "统计分析": + intent.setClass(context, DataAnalysisActivity.class); + break; + case "在岗人员": + intent.setClass(context, PersonOnlineActivity.class); + break; + case "案卷查询": + intent.setClass(context, CaseSearchActivity.class); + break; + case "案卷分布": + intent.setClass(context, CaseOnMapActivity.class); + break; + case "公厕保洁": + intent.setClass(context, PublicToiletActivity.class); + break; + case "三包处置": + intent.setClass(context, PackageHandleActivity.class); + break; + default: + break; + } + context.startActivity(intent); + } + }); + break; + } + } + } + @Override public void obtainUserData(UserBean userBean) { if (userBean.isSuccess()) { - //QMUIRadiusImageView无法动态设置圆形头像,借助Glide实现圆形头像 - Glide.with(this).load(R.mipmap.app_logo).apply(RequestOptions.circleCropTransform()).into(userIconView); - - UserBean.DataBean data = userBean.getData(); - userNameView.setText(data.getName()); - userDeptView.setText(data.getDeptName() + data.getRoleNames()); - - StringHelper.saveUserName(data.getName()); - StringHelper.saveUserPhone(data.getPhone()); - StringHelper.saveUserDept(data.getDeptName()); - StringHelper.saveUserDeptId(data.getDeptId()); - StringHelper.saveUserId(data.getId()); + SaveKeyValues.putValue("userBean", gson.toJson(userBean)); + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021061101; + message.obj = userBean; + weakReferenceHandler.sendMessage(message); } } @@ -105,62 +228,11 @@ @Override public void obtainHomePageResult(HomePageBean resultBean) { if (resultBean.isSuccess()) { - HomeRecycleAdapter adapter = new HomeRecycleAdapter(context, resultBean.getData().getMenus()); - homeRecyclerView.setLayoutManager(new GridLayoutManager(context, 3)); - homeRecyclerView.setAdapter(adapter); - adapter.setOnGridItemClickListener(new HomeRecycleAdapter.OnGridItemClickListener() { - @Override - public void onClick(String itemName) { - Intent intent = new Intent(); - switch (itemName) { - case "案卷上报": - intent.setClass(context, CaseUploadActivity.class); - break; - case "快速上报": - intent.setClass(context, CaseUploadQuicklyActivity.class); - break; - case "三包上报": - intent.setClass(context, CaseUploadPackageActivity.class); - break; - case "案卷核实": - intent.setClass(context, CaseVerifyActivity.class); - break; - case "案卷核查": - intent.setClass(context, CaseCheckActivity.class); - break; - case "案卷处理": - intent.setClass(context, CaseHandleActivity.class); - break; - case "紧急要件": - intent.setClass(context, UrgentCaseActivity.class); - break; - case "超时督办": - intent.setClass(context, OvertimeCaseActivity.class); - break; - case "统计分析": - intent.setClass(context, DataAnalysisActivity.class); - break; - case "在岗人员": - intent.setClass(context, PersonOnlineActivity.class); - break; - case "案卷查询": - intent.setClass(context, CaseSearchActivity.class); - break; - case "案卷分布": - intent.setClass(context, CaseOnMapActivity.class); - break; - case "公厕保洁": - intent.setClass(context, PublicToiletActivity.class); - break; - case "三包处置": - intent.setClass(context, PackageHandleActivity.class); - break; - default: - break; - } - startActivity(intent); - } - }); + SaveKeyValues.putValue("homePageBean", gson.toJson(resultBean)); + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021061102; + message.obj = resultBean; + weakReferenceHandler.sendMessage(message); } } diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index e2e4bb6..8d95580 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -15,6 +15,13 @@ import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeAddress; +import com.amap.api.services.geocoder.RegeocodeQuery; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.casic.dcms.utils.callback.IAddressListener; import com.casic.dcms.utils.callback.ICommunityListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -137,6 +144,32 @@ } /** + * 经纬度反编码为地址 + */ + public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + GeocodeSearch codeSearch = new GeocodeSearch(context); + // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 + RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 50, GeocodeSearch.GPS); + codeSearch.getFromLocationAsyn(query); + codeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) { + RegeocodeAddress regeocodeAddress = regeocodeResult.getRegeocodeAddress(); + if (regeocodeAddress != null) { + listener.onGetAddress(regeocodeAddress.getFormatAddress()); + } else { + listener.onGetAddress("解析位置失败"); + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { + + } + }); + } + + /** * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IAddressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IAddressListener.java new file mode 100644 index 0000000..f351aef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IAddressListener.java @@ -0,0 +1,5 @@ +package com.casic.dcms.utils.callback; + +public interface IAddressListener { + void onGetAddress(String address); +} diff --git a/app/build.gradle b/app/build.gradle index 3286df2..7ede907 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,5 +99,7 @@ implementation 'cn.bertsir.zbarLibary:zbarlibary:1.4.2' //定位功能 implementation 'com.amap.api:location:5.3.1' + //经纬度逆编码 + implementation 'com.amap.api:search:7.9.0' implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34' } 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 92f30f1..7630eee 100644 --- a/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/RecordListAdapter.java @@ -2,6 +2,7 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -10,8 +11,11 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.amap.api.services.core.LatLonPoint; import com.casic.dcms.R; import com.casic.dcms.bean.CleanRecordBean; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.IAddressListener; import java.util.List; @@ -62,7 +66,7 @@ this.clickListener = onItemClickListener; } - static class ItemViewHolder extends RecyclerView.ViewHolder { + class ItemViewHolder extends RecyclerView.ViewHolder { private TextView workTimeView; private TextView toiletNameView; @@ -81,7 +85,22 @@ void bindView(CleanRecordBean.DataBean.RowsBean rowsBean) { toiletNameView.setText(rowsBean.getToiletName().equals("") ? "未知-" : rowsBean.getToiletName() + "-"); workerNameView.setText(rowsBean.getUserName().equals("") ? "未知" : rowsBean.getUserName()); - workerPositionView.setText("[" + rowsBean.getLng() + "," + rowsBean.getLat() + "]"); + + String lng = rowsBean.getLng(); + if (TextUtils.isEmpty(lng)) { + return; + } + String lat = rowsBean.getLat(); + if (TextUtils.isEmpty(lat)) { + return; + } + LatLonPoint latLonPoint = new LatLonPoint(Double.parseDouble(lat), Double.parseDouble(lng)); + LocationHelper.antiCodingLocation(context, latLonPoint, new IAddressListener() { + @Override + public void onGetAddress(String address) { + workerPositionView.setText(address); + } + }); workTimeView.setText(rowsBean.getCreateTime()); } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java index 9d141c3..3b9759b 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java @@ -3,13 +3,15 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.util.Log; import android.widget.TextView; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; import com.casic.dcms.R; import com.casic.dcms.adapter.HomeRecycleAdapter; import com.casic.dcms.base.BaseFragment; @@ -33,17 +35,24 @@ import com.casic.dcms.ui.PersonOnlineActivity; import com.casic.dcms.ui.PublicToiletActivity; import com.casic.dcms.ui.UrgentCaseActivity; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.ToastHelper; +import com.google.gson.Gson; import com.qmuiteam.qmui.widget.QMUIRadiusImageView; +import org.jetbrains.annotations.NotNull; + +import java.lang.ref.WeakReference; + import butterknife.BindView; /** - * 此页面后期可能需要添加滑动吸顶效果 + * TODO 此页面后期可能需要添加滑动吸顶效果 */ public class HomePageFragment extends BaseFragment implements IUserDataView, IHomePageView { + private static final String TAG = "HomePageFragment"; @BindView(R.id.userIconView) QMUIRadiusImageView userIconView; @BindView(R.id.userNameView) @@ -57,6 +66,8 @@ private Context context; private UserDataPresenterImpl userDataPresenter; private HomePagePresenterImpl homePagePresenter; + private Gson gson; + private WeakReferenceHandler weakReferenceHandler; @Override protected int initLayoutView() { @@ -70,34 +81,146 @@ @Override protected void initData() { + gson = new Gson(); userDataPresenter = new UserDataPresenterImpl(this); - userDataPresenter.onReadyRetrofitRequest(); - homePagePresenter = new HomePagePresenterImpl(this); - homePagePresenter.onReadyRetrofitRequest("05"); + weakReferenceHandler = new WeakReferenceHandler(this); } @Override protected void initEvent() { + /** + * 根据登录账号判断是否是同一个人登录,如果是,从缓存读取数据,否则请求后台数据,获取最新登录者的部门等信息 + * */ + String userBeanJson = (String) SaveKeyValues.getValue("userBean", ""); + if (userBeanJson.equals("")) { + Log.d(TAG, "initData: 从没有人登录过,需要从新获取数据"); + userDataPresenter.onReadyRetrofitRequest(); + homePagePresenter.onReadyRetrofitRequest("05"); + } else { + UserBean userBean = gson.fromJson(userBeanJson, UserBean.class); + if (userBean.getData().getAccount().equals(StringHelper.getUserAccount())) { + Log.d(TAG, "initData: 同一人重复登录,加载缓存"); + Message userInfoMessage = weakReferenceHandler.obtainMessage(); + userInfoMessage.what = 2021061101; + userInfoMessage.obj = userBean; + weakReferenceHandler.sendMessage(userInfoMessage); + String homePageBeanJson = (String) SaveKeyValues.getValue("homePageBean", ""); + HomePageBean homePageBean = gson.fromJson(homePageBeanJson, HomePageBean.class); + Message homePageMessage = weakReferenceHandler.obtainMessage(); + homePageMessage.what = 2021061102; + homePageMessage.obj = homePageBean; + weakReferenceHandler.sendMessage(homePageMessage); + } else { + Log.d(TAG, "initData: 有人登录过,但是上次和这次登录者不是同一人,需要从新获取数据"); + userDataPresenter.onReadyRetrofitRequest(); + homePagePresenter.onReadyRetrofitRequest("05"); + } + } } - @SuppressLint("SetTextI18n") + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(HomePageFragment fragment) { + reference = new WeakReference<>(fragment); + } + + @SuppressLint("SetTextI18n") + @Override + public void handleMessage(@NotNull Message msg) { + HomePageFragment homePageFragment = reference.get(); + Context context = homePageFragment.context; + switch (msg.what) { + case 2021061101: + UserBean userBean = (UserBean) msg.obj; + //QMUIRadiusImageView无法动态设置圆形头像,借助Glide实现圆形头像 +// Glide.with(homePageFragment).load(R.mipmap.app_logo).apply(RequestOptions.circleCropTransform()).into(userIconView); + Glide.with(homePageFragment).load(R.mipmap.app_logo).into(homePageFragment.userIconView); + + UserBean.DataBean data = userBean.getData(); + homePageFragment.userNameView.setText(data.getName()); + homePageFragment.userDeptView.setText(data.getDeptName() + data.getRoleNames()); + + //把常用的几个属性单独存起来 + StringHelper.saveUserName(data.getName()); + StringHelper.saveUserPhone(data.getPhone()); + StringHelper.saveUserDept(data.getDeptName()); + StringHelper.saveUserDeptId(data.getDeptId()); + StringHelper.saveUserId(data.getId()); + break; + case 2021061102: + HomePageBean resultBean = (HomePageBean) msg.obj; + HomeRecycleAdapter adapter = new HomeRecycleAdapter(context, resultBean.getData().getMenus()); + homePageFragment.homeRecyclerView.setLayoutManager(new GridLayoutManager(context, 3)); + homePageFragment.homeRecyclerView.setAdapter(adapter); + adapter.setOnGridItemClickListener(new HomeRecycleAdapter.OnGridItemClickListener() { + @Override + public void onClick(String itemName) { + Intent intent = new Intent(); + switch (itemName) { + case "案卷上报": + intent.setClass(context, CaseUploadActivity.class); + break; + case "快速上报": + intent.setClass(context, CaseUploadQuicklyActivity.class); + break; + case "三包上报": + intent.setClass(context, CaseUploadPackageActivity.class); + break; + case "案卷核实": + intent.setClass(context, CaseVerifyActivity.class); + break; + case "案卷核查": + intent.setClass(context, CaseCheckActivity.class); + break; + case "案卷处理": + intent.setClass(context, CaseHandleActivity.class); + break; + case "紧急要件": + intent.setClass(context, UrgentCaseActivity.class); + break; + case "超时督办": + intent.setClass(context, OvertimeCaseActivity.class); + break; + case "统计分析": + intent.setClass(context, DataAnalysisActivity.class); + break; + case "在岗人员": + intent.setClass(context, PersonOnlineActivity.class); + break; + case "案卷查询": + intent.setClass(context, CaseSearchActivity.class); + break; + case "案卷分布": + intent.setClass(context, CaseOnMapActivity.class); + break; + case "公厕保洁": + intent.setClass(context, PublicToiletActivity.class); + break; + case "三包处置": + intent.setClass(context, PackageHandleActivity.class); + break; + default: + break; + } + context.startActivity(intent); + } + }); + break; + } + } + } + @Override public void obtainUserData(UserBean userBean) { if (userBean.isSuccess()) { - //QMUIRadiusImageView无法动态设置圆形头像,借助Glide实现圆形头像 - Glide.with(this).load(R.mipmap.app_logo).apply(RequestOptions.circleCropTransform()).into(userIconView); - - UserBean.DataBean data = userBean.getData(); - userNameView.setText(data.getName()); - userDeptView.setText(data.getDeptName() + data.getRoleNames()); - - StringHelper.saveUserName(data.getName()); - StringHelper.saveUserPhone(data.getPhone()); - StringHelper.saveUserDept(data.getDeptName()); - StringHelper.saveUserDeptId(data.getDeptId()); - StringHelper.saveUserId(data.getId()); + SaveKeyValues.putValue("userBean", gson.toJson(userBean)); + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021061101; + message.obj = userBean; + weakReferenceHandler.sendMessage(message); } } @@ -105,62 +228,11 @@ @Override public void obtainHomePageResult(HomePageBean resultBean) { if (resultBean.isSuccess()) { - HomeRecycleAdapter adapter = new HomeRecycleAdapter(context, resultBean.getData().getMenus()); - homeRecyclerView.setLayoutManager(new GridLayoutManager(context, 3)); - homeRecyclerView.setAdapter(adapter); - adapter.setOnGridItemClickListener(new HomeRecycleAdapter.OnGridItemClickListener() { - @Override - public void onClick(String itemName) { - Intent intent = new Intent(); - switch (itemName) { - case "案卷上报": - intent.setClass(context, CaseUploadActivity.class); - break; - case "快速上报": - intent.setClass(context, CaseUploadQuicklyActivity.class); - break; - case "三包上报": - intent.setClass(context, CaseUploadPackageActivity.class); - break; - case "案卷核实": - intent.setClass(context, CaseVerifyActivity.class); - break; - case "案卷核查": - intent.setClass(context, CaseCheckActivity.class); - break; - case "案卷处理": - intent.setClass(context, CaseHandleActivity.class); - break; - case "紧急要件": - intent.setClass(context, UrgentCaseActivity.class); - break; - case "超时督办": - intent.setClass(context, OvertimeCaseActivity.class); - break; - case "统计分析": - intent.setClass(context, DataAnalysisActivity.class); - break; - case "在岗人员": - intent.setClass(context, PersonOnlineActivity.class); - break; - case "案卷查询": - intent.setClass(context, CaseSearchActivity.class); - break; - case "案卷分布": - intent.setClass(context, CaseOnMapActivity.class); - break; - case "公厕保洁": - intent.setClass(context, PublicToiletActivity.class); - break; - case "三包处置": - intent.setClass(context, PackageHandleActivity.class); - break; - default: - break; - } - startActivity(intent); - } - }); + SaveKeyValues.putValue("homePageBean", gson.toJson(resultBean)); + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021061102; + message.obj = resultBean; + weakReferenceHandler.sendMessage(message); } } diff --git a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java index e2e4bb6..8d95580 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocationHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/LocationHelper.java @@ -15,6 +15,13 @@ import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeAddress; +import com.amap.api.services.geocoder.RegeocodeQuery; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.casic.dcms.utils.callback.IAddressListener; import com.casic.dcms.utils.callback.ICommunityListener; import com.casic.dcms.utils.callback.ILocationListener; import com.esri.arcgisruntime.concurrent.ListenableFuture; @@ -137,6 +144,32 @@ } /** + * 经纬度反编码为地址 + */ + public static void antiCodingLocation(Context context, LatLonPoint latLonPoint, IAddressListener listener) { + GeocodeSearch codeSearch = new GeocodeSearch(context); + // 第一个参数表示一个LatLonPoint,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 + RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 50, GeocodeSearch.GPS); + codeSearch.getFromLocationAsyn(query); + codeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) { + RegeocodeAddress regeocodeAddress = regeocodeResult.getRegeocodeAddress(); + if (regeocodeAddress != null) { + listener.onGetAddress(regeocodeAddress.getFormatAddress()); + } else { + listener.onGetAddress("解析位置失败"); + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { + + } + }); + } + + /** * check if the point in china * 72.004 <= lng <= 137.8347 and 0.8293 <= lat <= 55.8271 */ diff --git a/app/src/main/java/com/casic/dcms/utils/callback/IAddressListener.java b/app/src/main/java/com/casic/dcms/utils/callback/IAddressListener.java new file mode 100644 index 0000000..f351aef --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/callback/IAddressListener.java @@ -0,0 +1,5 @@ +package com.casic.dcms.utils.callback; + +public interface IAddressListener { + void onGetAddress(String address); +} diff --git a/app/src/main/res/layout/item_record_recycleview.xml b/app/src/main/res/layout/item_record_recycleview.xml index f97bcf5..c6ed343 100644 --- a/app/src/main/res/layout/item_record_recycleview.xml +++ b/app/src/main/res/layout/item_record_recycleview.xml @@ -8,7 +8,6 @@ android:id="@+id/toiletNameView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="师范路公厕-" android:textColor="@color/listMainColor" android:textSize="@dimen/textFontSize" /> @@ -16,8 +15,9 @@ android:id="@+id/workerNameView" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_toStartOf="@id/workTimeView" android:layout_toEndOf="@id/toiletNameView" - android:text="张三" + android:singleLine="true" android:textColor="@color/listMainColor" android:textSize="@dimen/textFontSize" /> @@ -28,10 +28,8 @@ android:layout_below="@id/toiletNameView" android:layout_alignParentStart="true" android:layout_marginTop="3dp" - android:layout_toStartOf="@id/workTimeView" android:gravity="center_vertical" android:singleLine="true" - android:text="江西省江西省江西省江西省江西省江西省江西省江西省江西省" android:textColor="@color/listAuxiliaryColor" /> \ No newline at end of file