From b123c57942474b1a78a4e511c9ccaf4d68090250 Mon Sep 17 00:00:00 2001 From: itgaojian163 Date: Sun, 4 Jun 2023 21:20:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BE=96=E5=8C=BA=E4=BA=BA=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/kotlinc.xml | 2 +- baselib/build.gradle | 2 +- .../baselib/constant/PathConfig.java | 4 + .../baselib/core/beans/PersonSearchBean.java | 9 + .../baselib/core/retrofit_net/BaseUrlApi.java | 4 +- .../widget/base/ConditionAreaIdAdapter.java | 55 ++ .../widget/views/ConditionAreaIdPopup.java | 88 +++ build.gradle | 2 +- commonmodule/src/main/AndroidManifest.xml | 14 +- .../populace/CensusBaseDetailActivity.java | 245 +++++++ .../populace/PopulaceAreaListActivity.java | 645 ++++++++++++++++++ .../adapters/ConditionAreaGridAdapter.java | 57 ++ .../commonmodule/nets/GridApis.java | 15 +- .../views/ConditionAreaGridPopup.java | 88 +++ .../layout/activity_census_base_detail.xml | 301 ++++++++ .../layout/activity_populace_area_list.xml | 190 ++++++ .../src/main/res/layout/item_person.xml | 1 + .../fragments/LeaderMainFragment.java | 9 +- .../drawable-xhdpi/ic_populace_list_icon.png | Bin 0 -> 1731 bytes 19 files changed, 1723 insertions(+), 8 deletions(-) create mode 100644 baselib/src/main/java/com/tenlionsoft/baselib/core/widget/base/ConditionAreaIdAdapter.java create mode 100644 baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/ConditionAreaIdPopup.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/populace/CensusBaseDetailActivity.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/populace/PopulaceAreaListActivity.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/ConditionAreaGridAdapter.java create mode 100644 commonmodule/src/main/java/com/tengshisoft/commonmodule/views/ConditionAreaGridPopup.java create mode 100644 commonmodule/src/main/res/layout/activity_census_base_detail.xml create mode 100644 commonmodule/src/main/res/layout/activity_populace_area_list.xml create mode 100644 mainmodule/src/main/res/drawable-xhdpi/ic_populace_list_icon.png diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 7e340a7..1f71170 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/baselib/build.gradle b/baselib/build.gradle index 45fa351..9ff93df 100755 --- a/baselib/build.gradle +++ b/baselib/build.gradle @@ -89,7 +89,7 @@ dependencies { api "io.github.razerdp:BasePopup:$rootProject.popup_version" //选择器 api 'io.github.lucksiege:pictureselector:v2.7.3-rc08' - api 'me.rosuh:AndroidFilePicker:0.7.0-x' + api 'me.rosuh:AndroidFilePicker:0.8.3' //toast api 'com.github.getActivity:ToastUtils:9.5' diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java index a411f63..a1e34d7 100755 --- a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java @@ -205,6 +205,8 @@ public class PathConfig { public static final String PATH_MODULE_COMMON_ACTIVITY_CHOOSE_GRID_USER = "/modulecommon/activity/chooseGridUser";//网格员选择 public static final String PATH_MODULE_COMMON_ACTIVITY_CHOOSE_COMMUNITY_USER = "/modulecommon/activity/chooseCommunityUser";//社区专管员选择 + public static final String PATH_MODULE_COMMON_ACTIVITY_AREA_POPULACE_LIST = "/modulecommon/activity/populaceAreaList";//辖区人口 + public static final String PATH_MODULE_COMMON_ACTIVITY_INCIDENT_REPORT = "/modulecommon/activity/incidentReport";//事件上报 public static final String PATH_MODULE_COMMON_ACTIVITY_INCIDENT_EDIT = "/modulecommon/activity/incidentEdit";//事件修改 @@ -247,6 +249,7 @@ public class PathConfig { public static final String PATH_MODULE_COMMON_ACTIVITY_GRID_STATISTICS = "/modulecommon/activity/gridStatistics";//统计分析 public static final String PATH_MODULE_COMMON_ACTIVITY_DEPT_STATISTICS = "/modulecommon/activity/deptStatistics";//统计分析 public static final String PATH_MODULE_COMMON_ACTIVITY_COMMAND_STATISTICS = "/modulecommon/activity/commandStatistics";//统计分析 + public static final String PATH_MODULE_COMMON_ACTIVITY_POPULACE_DETAIL = "/modulecommon/activity/populaceBaseDetail";//人口详情 public static final String PATH_MODULE_COMMON_ACTIVITY_KNOWLEDGE_LIBRARY_LIST = "/modulecommon/activity/knowledgeList";//知识库列表 public static final String PATH_MODULE_COMMON_ACTIVITY_KNOWLEDGE_LIBRARY_DETAIL = "/modulecommon/activity/knowledgeDetail";//知识详情 @@ -565,4 +568,5 @@ public class PathConfig { public static final String PATH_MODULE_GRID_FRAGMENT_PERSON_LIB = "/modulegrid/fragment/personLib";//人口库 + } diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/core/beans/PersonSearchBean.java b/baselib/src/main/java/com/tenlionsoft/baselib/core/beans/PersonSearchBean.java index 236cf91..2ec4f2f 100644 --- a/baselib/src/main/java/com/tenlionsoft/baselib/core/beans/PersonSearchBean.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/core/beans/PersonSearchBean.java @@ -44,6 +44,15 @@ public class PersonSearchBean { private String religionDictionaryName; private String serviceSpace; private String telephone; + private String type; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } public String getAreaCode() { return areaCode; diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/core/retrofit_net/BaseUrlApi.java b/baselib/src/main/java/com/tenlionsoft/baselib/core/retrofit_net/BaseUrlApi.java index 5cf33b8..62621aa 100755 --- a/baselib/src/main/java/com/tenlionsoft/baselib/core/retrofit_net/BaseUrlApi.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/core/retrofit_net/BaseUrlApi.java @@ -11,9 +11,9 @@ public class BaseUrlApi { // public static final String IP = "http://10.25.242.183:80/";/* 测试IP */ public static final String IP = "http://www.wlcbsyzl.cn/";/* 正式IP */ public static final String SYS_USERCENTER = "usercenter/"; - public static final String SYS_POPULATION = "population/";/*人口系统*/ + public static final String SYS_POPULATION = "populationhouse/";/*人口系统*/ public static final String SYS_CASE = "case/";/*事件部件*/ - public static final String SYS_HOUSE = "house/";/*房屋系统*/ + public static final String SYS_HOUSE = "populationhouse/";/*房屋系统*/ public static final String SYS_SECURITY = "manage/";/*社会治安*/ public static final String SYS_TASK = "task/";/*任务系统*/ public static final String SYS_LIBRARY = "library/";/*知识库系统*/ diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/base/ConditionAreaIdAdapter.java b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/base/ConditionAreaIdAdapter.java new file mode 100644 index 0000000..103bb7e --- /dev/null +++ b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/base/ConditionAreaIdAdapter.java @@ -0,0 +1,55 @@ +package com.tenlionsoft.baselib.core.widget.base; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.tenlionsoft.baselib.R; +import com.tenlionsoft.baselib.core.beans.AreaBean; +import com.tenlionsoft.baselib.core.beans.AreaSimpleBean; + +import java.util.ArrayList; +import java.util.List; + +/** + * 作者: adam + * 日期: 2021/10/20 - 11:18 上午 + * 邮箱: itgaojian@163.com + * 描述:区域筛选 + */ +public class ConditionAreaIdAdapter extends BaseRecyclerAdapter { + public List mSelBeans = new ArrayList<>(); + + public ConditionAreaIdAdapter(Context ctx, List list) { + super(ctx, list); + } + + @Override + public ConditionHolder createHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(mContext).inflate(R.layout.item_condition_sel, parent, false); + return new ConditionHolder(view); + } + + @Override + public void bindHolder(ConditionHolder holder, int i) { + AreaBean bean = mData.get(i); + holder.mTvName.setText(bean.getAreaName()); + holder.mCbCheck.setOnCheckedChangeListener(null); + holder.mTvName.setTextColor(bean.isCheck() ? Color.parseColor("#1296db") : Color.BLACK); + holder.mCbCheck.setChecked(bean.isCheck()); + holder.mCbCheck.setOnCheckedChangeListener((buttonView, isChecked) -> mLis.onItemCheckChange(bean, isChecked, i)); + holder.itemView.setOnClickListener(v -> mLis.onItemCheckChange(bean, !bean.isCheck(), i)); + } + + private OnItemCheckChange mLis; + + public void addOnitemCheckChange(OnItemCheckChange lis) { + this.mLis = lis; + } + + public interface OnItemCheckChange { + void onItemCheckChange(AreaBean bean, boolean isCheck, int pos); + } +} diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/ConditionAreaIdPopup.java b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/ConditionAreaIdPopup.java new file mode 100644 index 0000000..3240398 --- /dev/null +++ b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/ConditionAreaIdPopup.java @@ -0,0 +1,88 @@ +package com.tenlionsoft.baselib.core.widget.views; + +import android.content.Context; +import android.graphics.Color; +import android.util.DisplayMetrics; +import android.view.Gravity; +import android.view.View; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.tenlionsoft.baselib.R; +import com.tenlionsoft.baselib.core.beans.AreaBean; +import com.tenlionsoft.baselib.core.beans.AreaSimpleBean; +import com.tenlionsoft.baselib.core.widget.base.ConditionAreaAdapter; +import com.tenlionsoft.baselib.core.widget.base.ConditionAreaIdAdapter; + +import java.util.ArrayList; +import java.util.List; + +import razerdp.basepopup.BasePopupWindow; + +/** + * 作者: adam + * 日期: 2021/9/30 - 2:58 下午 + * 邮箱: itgaojian@163.com + * 描述: 条件选择 + */ +public class ConditionAreaIdPopup extends BasePopupWindow { + private List mDatas; + private RecyclerView mRlvConditions; + private ConditionAreaIdAdapter mAdapter; + private OnListPopupItemClickListener mOnListPopupItemClickListener; + + public ConditionAreaIdPopup(Context context, List datas) { + super(context); + View view = createPopupById(R.layout.popup_condition_layout); + RecyclerView rlvCondition = view.findViewById(R.id.rlv_conditions); + if (datas == null) { + mDatas = new ArrayList<>(); + } else { + mDatas = datas; + } + mAdapter = new ConditionAreaIdAdapter(context, mDatas); + rlvCondition.setLayoutManager(new LinearLayoutManager(context)); + rlvCondition.setAdapter(mAdapter); + setContentView(view); + + setBackgroundColor(Color.parseColor("#11000000")); + setPopupGravity(Gravity.BOTTOM | Gravity.CENTER); + DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); + int height = (int) (displayMetrics.heightPixels * 0.5); + setHeight(height); + mAdapter.addOnitemCheckChange((bean, isCheck, pos) -> { + if (isCheck) { + mAdapter.mSelBeans.clear(); + mAdapter.mSelBeans.add(bean); + } else { + mAdapter.mSelBeans.remove(bean); + } + bean.setCheck(isCheck); + mOnListPopupItemClickListener.onItemClick(bean, isCheck, pos); + if (isCheck) { + if (true) { + for (int i = 0; i < mAdapter.getData().size(); i++) { + if (!mAdapter.getData().get(i).getAreaId().equals(bean.getAreaId())) { + mAdapter.getData().get(i).setCheck(false); + } + } + } + } + mAdapter.notifyDataSetChanged(); + }); + } + + + public OnListPopupItemClickListener getOnListPopupItemClickListener() { + return mOnListPopupItemClickListener; + } + + public void setOnListPopupItemClickListener(OnListPopupItemClickListener onListPopupItemClickListener) { + mOnListPopupItemClickListener = onListPopupItemClickListener; + } + + public interface OnListPopupItemClickListener { + void onItemClick(AreaBean bean, boolean isCheck, int pos); + } +} diff --git a/build.gradle b/build.gradle index c946b78..a4d5c15 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.4.0-rc' + ext.kotlin_version = '1.6.0' repositories { google() jcenter() diff --git a/commonmodule/src/main/AndroidManifest.xml b/commonmodule/src/main/AndroidManifest.xml index fc440b5..1b46d30 100644 --- a/commonmodule/src/main/AndroidManifest.xml +++ b/commonmodule/src/main/AndroidManifest.xml @@ -3,12 +3,24 @@ package="com.tengshisoft.commonmodule"> + + + android:windowSoftInputMode="adjustPan|stateHidden" /> onShowDelReason()); + } + + private void onShowDelReason() { + CenterBaseInputView intputView = new CenterBaseInputView.DialogBuilder(mActivity).build(); + intputView.addOnChoseListener((time, content) -> { + intputView.HideSoftKeyBoardDialog(mActivity); + intputView.dismiss(); + doDelBean(content); + }); + intputView.show(); + } + + /** + * 获取详细信息 + * + * @param id + */ + private void getDetailData(String id) { + RetrofitManager.getInstance() + .create(GridApis.class) + .getBaseInfoDetailById(id, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull PersonSearchBean searchBaseInfoBean) { + setDataToView(searchBaseInfoBean, 0); + } + + @Override + public void onError(@NonNull Throwable e) { + ExceptionHandler.handleException(e); + refreshView(STATE_LOAD_ERROR); + } + + @Override + public void onComplete() { + + } + }); + } + + /** + * 删除数据 + */ + private void doDelBean(String content) { + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle("提示") + .setMessage("确定要删除该条信息吗?") + .setPositiveButton("确定", (dialog, which) -> { + dialog.dismiss(); + ProgressDialog dialog1 = UIUtil.initDialog(mActivity, "删除中..."); + dialog1.show(); + RetrofitManager.getInstance() + .create(GridApis.class) + .doDelBaseInfo(mId, content, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull SuccessBean successBean) { + dialog1.dismiss(); + ToastUtils.show("删除成功"); + setResult(13); + finish(); + } + + @Override + public void onError(@NonNull Throwable e) { + dialog1.dismiss(); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + }) + .setNegativeButton("取消", (dialog, which) -> dialog.dismiss()) + .create() + .show(); + } + + /** + * 回填数据 + */ + private void setDataToView(PersonSearchBean bean, int type) { + mEtIdentity.setText(IDCard.idMask(bean.getIdCardNumber(), 10, 4));//身份证号码 + mEtName.setText(bean.getFullName());//姓名 + mEtOnceName.setText(bean.getNameUsedBefore());//曾用名--- + mTvGender.setText(bean.getGenderDictionaryName());//性别 + mTvArea.setText(bean.getAreaNames()); + mTvGrid.setText(bean.getGridName()); + mTvBirth.setText(bean.getBirthDate());//生日 + mTvNation.setText(bean.getNationDictionaryName());//民族 + mTvMarry.setText(bean.getMaritalStatusDictionaryName());//婚姻 + mTvPolitical.setText(bean.getPoliticalStatusDictionaryName());//政治面貌 + mTvEdu.setText(bean.getEducationDictionaryName());//学历 + mTvReligion.setText(bean.getReligionDictionaryName());//宗教 + mTvWorkType.setText(bean.getOccupationCategoryDictionaryName());//职业类别 + mTvWork.setText(bean.getOccupation());//职业 + mEtWorkSpace.setText(bean.getServiceSpace());//服务处所----- + mEtPhone.setText(bean.getTelephone());//联系方式 + mEtCensusDetail.setText(bean.getNativePlaceAddr());//户籍地详址 + mEtCurDetail.setText(bean.getCurrentResidenceAddr());//现在详细地址 + if (!TextUtils.isEmpty(bean.getType())) { + switch (bean.getType()) { + case "1": + mTvType.setText("户籍人口"); + break; + case "2": + mTvType.setText("常住人口"); + break; + case "3": + mTvType.setText("外来人口"); + break; + } + } + + refreshView(STATE_LOAD_SUCCESS); + } +} \ No newline at end of file diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/populace/PopulaceAreaListActivity.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/populace/PopulaceAreaListActivity.java new file mode 100644 index 0000000..0996109 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/activitys/populace/PopulaceAreaListActivity.java @@ -0,0 +1,645 @@ +package com.tengshisoft.commonmodule.activitys.populace; + +import android.annotation.SuppressLint; +import android.app.ProgressDialog; +import android.content.Intent; +import android.graphics.Color; +import android.text.TextUtils; +import android.view.View; +import android.view.inputmethod.EditorInfo; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.alibaba.android.arouter.launcher.ARouter; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.toast.ToastUtils; +import com.scwang.smart.refresh.layout.SmartRefreshLayout; +import com.tengshisoft.commonmodule.R; +import com.tengshisoft.commonmodule.R2; +import com.tengshisoft.commonmodule.adapters.CensusPersonAdapter; +import com.tengshisoft.commonmodule.beans.AreaGridListBean; +import com.tengshisoft.commonmodule.beans.CensusPersonBean; +import com.tengshisoft.commonmodule.nets.GridApis; +import com.tengshisoft.commonmodule.views.ConditionAreaGridPopup; +import com.tenlionsoft.baselib.constant.PathConfig; +import com.tenlionsoft.baselib.core.beans.AreaSimpleBean; +import com.tenlionsoft.baselib.core.retrofit_net.RetrofitManager; +import com.tenlionsoft.baselib.core.retrofit_net.api.BaseApiService; +import com.tenlionsoft.baselib.core.widget.base.BaseActivity; +import com.tenlionsoft.baselib.core.widget.views.ConditionAreaPopup; +import com.tenlionsoft.baselib.core.widget.views.ItemSplitDivider; +import com.tenlionsoft.baselib.utils.ExceptionHandler; +import com.tenlionsoft.baselib.utils.UIUtil; +import com.tenlionsoft.baselib.utils.UserLgUtils; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; + +/** + * 辖区人口 + */ +@Route(path = PathConfig.PATH_MODULE_COMMON_ACTIVITY_AREA_POPULACE_LIST) +public class PopulaceAreaListActivity extends BaseActivity { + + @BindView(R2.id.tv_grid) + TextView mTvGrid; + @BindView(R2.id.rlv_components) + RecyclerView mRlvComponents; + @BindView(R2.id.srl_content) + SmartRefreshLayout mSrlContent; + @BindView(R2.id.pb_loading) + ProgressBar mPbLoading; + @BindView(R2.id.iv_empty_data) + ImageView mIvEmptyData; + @BindView(R2.id.tv_error_hint) + TextView mTvErrorHint; + @BindView(R2.id.et_search_key) + EditText mEtSearchKey; + @BindView(R2.id.tv_area) + TextView mTvArea; + @BindView(R2.id.tv_area1) + TextView mTvArea1; + @BindView(R2.id.tv_area_2) + TextView mTvArea2; + @BindView(R2.id.tv_area3) + TextView mTvArea3; + @BindView(R2.id.tv_total) + TextView mTvTotal; + private Unbinder mBind; + private List mDatas; + private CensusPersonAdapter mAdapter; + private int mCurrentPage = 1; + private String mKeywords = ""; + + private ProgressDialog mDialog; + private int mSearchDelay = 600; + private List mArea1List; + private List mArea2List; + private List mArea3List; + private AreaSimpleBean mSelArea1; + private AreaSimpleBean mSelArea2; + private AreaSimpleBean mSelArea3; + private String mCurrentAreaCode = PathConfig.DEFAULT_AREA_2_CODE; + private String mSelAreaCode = ""; + private AreaGridListBean.RowsBean mSelGrid; + + @Override + protected int setLayoutId() { + return R.layout.activity_populace_area_list; + } + + @Override + protected void doShowOptions() { + + } + + @Override + protected void clearSearch() { + mKeywords = ""; + doRefresh(); + } + + @Override + protected void doSearchByTitle() { + doSearch(); + } + + @SuppressLint("CheckResult") + @Override + public void initData() { + mBind = ButterKnife.bind(this); + mTvBaseTitle.setText("辖区人口"); + ImmersionBar.with(mActivity) + .statusBarColor("#FFFFFF") + .statusBarDarkFont(true) + .titleBar(mRlTitleBar) + .init(); + mTvBaseTitle.setTextColor(Color.BLACK); + mRlTitleBar.setBackgroundColor(getResources().getColor(R.color.white)); + mIvAppSearchIcon.setVisibility(View.GONE); + mTvAppBack.setBackgroundResource(R.drawable.ic_back_black); + + refreshView(STATE_LOAD_SUCCESS); + mIvAppSearchIcon.setVisibility(View.VISIBLE); + mDatas = new ArrayList<>(); + mAdapter = new CensusPersonAdapter(mActivity, mDatas); + mRlvComponents.setLayoutManager(new LinearLayoutManager(mActivity)); + mRlvComponents.setAdapter(mAdapter); + mRlvComponents.addItemDecoration(new ItemSplitDivider(mActivity, LinearLayoutManager.VERTICAL, 1, Color.parseColor("#BFBFBF"))); + mSrlContent.setOnRefreshListener(v -> doRefresh()); + mSrlContent.setOnLoadMoreListener(v -> doLoadMore()); + setStateView(13); + + mAdapter.addOnItemClickListener(v -> ARouter.getInstance() + .build(PathConfig.PATH_MODULE_COMMON_ACTIVITY_POPULACE_DETAIL) + .withString("id", v.getBasePopulationInfoId()) + .navigation()); + mDialog = UIUtil.initDialog(mActivity, "搜索中..."); + //判断用户登录账号区域 + int userAreaLevel = UserLgUtils.getUserAreaLevel(); + String areaFullName = UserLgUtils.getUserFullAreaName(); + + //1 市 2旗县区 3乡镇街道 4村社区 + // + if (userAreaLevel != -1) { + mSelAreaCode = UserLgUtils.getUserAreaCode(); + mTvArea.setText(areaFullName); + switch (userAreaLevel) { + case 1://市 + mCurrentAreaCode = UserLgUtils.getUserAreaCode(); + break; + case 2://旗县区 + mTvArea1.setEnabled(false); + mTvArea1.setVisibility(View.GONE); + mSelArea1 = new AreaSimpleBean(); + mSelArea1.setId(UserLgUtils.getUserAreaCode()); + mTvArea2.setVisibility(View.VISIBLE); + mTvArea3.setVisibility(View.VISIBLE); + break; + case 3://乡镇街道 + mTvArea1.setEnabled(false); + mTvArea2.setEnabled(false); + mSelArea2 = new AreaSimpleBean(); + mSelArea2.setId(UserLgUtils.getUserAreaCode()); + mTvArea1.setVisibility(View.GONE); + mTvArea2.setVisibility(View.GONE); + mTvArea3.setVisibility(View.VISIBLE); + break; + case 4://村社区 + mTvArea1.setEnabled(false); + mTvArea2.setEnabled(false); + mTvArea3.setEnabled(false); + mSelArea3 = new AreaSimpleBean(); + mSelArea3.setId(UserLgUtils.getUserAreaCode()); + mTvArea1.setVisibility(View.GONE); + mTvArea2.setVisibility(View.GONE); + mTvArea3.setVisibility(View.GONE); + break; + } + } else { + ToastUtils.show("您的账号区划配置错误,请联系管理员"); + finish(); + } + doRefresh(); + mEtSearchKey.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + hideSoftKeyboard(); + mEtSearchKey.clearFocus(); + mKeywords = v.getText().toString(); + mDialog.show(); + doRefresh(); + return true; + } else { + return false; + } + }); + mTvArea1.setOnClickListener(v -> { + if (mArea1List != null && mArea1List.size() > 0) { + onShowArea1(); + } else { + getAreaList(1, mCurrentAreaCode); + } + }); + mTvArea2.setOnClickListener(v -> { + if (mSelArea1 == null) { + ToastUtils.show("请选择旗县区"); + return; + } + if (mArea2List != null && mArea2List.size() > 0) { + onShowArea2(); + } else { + getAreaList(2, mSelArea1.getId()); + } + }); + mTvArea3.setOnClickListener(v -> { + if (mSelArea2 == null) { + ToastUtils.show("请选择乡镇街道"); + return; + } + if (mArea3List != null && mArea3List.size() > 0) { + onShowArea3(); + } else { + getAreaList(3, mSelArea2.getId()); + } + }); + mTvGrid.setOnClickListener(v -> { + if (mSelArea3 == null) { + ToastUtils.show("请先选择社区、村"); + return; + } + if (mGridList != null && mGridList.size() > 0) { + onShowGrid(); + } else { + getGridList(); + } + }); + } + + /** + * 获取网格 + */ + private void getGridList() { + ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中..."); + dialog.show(); + RetrofitManager.getInstance() + .create(GridApis.class) + .getGridByAreaCode(mSelArea3.getId(), "", "1", UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull AreaGridListBean areaGridListBean) { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + if (areaGridListBean.getRows() != null && areaGridListBean.getRows().size() > 0) { + mGridList = areaGridListBean.getRows(); + onShowGrid(); + } else { + ToastUtils.show("暂无网格数据"); + } + } + + @Override + public void onError(@NonNull Throwable e) { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + + private List mGridList; + + /** + * 选择网格 + */ + private void onShowGrid() { + ConditionAreaGridPopup conditionPopup = new ConditionAreaGridPopup(mActivity, mGridList); + conditionPopup.setOnListPopupItemClickListener((bean, isCheck, pos) -> { + if (isCheck) { + //选中了 + mSelGrid = bean; + mTvGrid.setText(mSelGrid.getGridName()); + } else { + //清除了选项 + mSelGrid = null; + mTvGrid.setText("网格"); + } + mDialog.show(); + doRefresh(); + conditionPopup.dismiss(); + }); + conditionPopup.showPopupWindow(mTvGrid); + } + + + /** + * 获取片区内的部件列表 + */ + private void getAreaPopulaceList(int currentPage) { + mCurrentPage = currentPage; + RetrofitManager.getInstance() + .create(GridApis.class) + .getPopulaceListByAreaId( + mKeywords, + mSelAreaCode, + mSelGrid == null ? "" : mSelGrid.getGridId(), + mCurrentPage + "", + UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull CensusPersonBean communityListBean) { + if (mDialog != null && mDialog.isShowing()) { + mDialog.dismiss(); + } + mTvTotal.setText("人口总数 : " + communityListBean.getTotal()); + if (communityListBean.getRows() != null && communityListBean.getRows().size() > 0) { + ++mCurrentPage; + if (currentPage == 1) { + mDatas.clear(); + mDatas.addAll(communityListBean.getRows()); + } else { + mDatas.addAll(communityListBean.getRows()); + } + setStateView(14); + mAdapter.notifyDataSetChanged(); + mSrlContent.finishRefresh(); + if (mDatas.size() >= communityListBean.getTotal()) { + mSrlContent.finishLoadMore(); + mSrlContent.setNoMoreData(true); + } else { + mSrlContent.finishLoadMore(); + mSrlContent.setNoMoreData(false); + } + } else { + if (currentPage > 1) { + mSrlContent.finishLoadMore(); + mSrlContent.setNoMoreData(true); + setStateView(14); + } else { + if (TextUtils.isEmpty(mKeywords)) { + //无数据 + setStateView(15); + } else { + setStateView(15); + ToastUtils.show("未查询到相关内容"); + } + } + } + } + + @Override + public void onError(@NonNull Throwable e) { + if (mDialog != null && mDialog.isShowing()) { + mDialog.dismiss(); + } + mSrlContent.finishLoadMore(); + mSrlContent.finishRefresh(); + ExceptionHandler.handleException(e); + setStateView(16); + } + + @Override + public void onComplete() { + + } + }); + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 12) { + if (resultCode == 13) { + doRefresh(); + } + } + } + + //加载更多 + private void doLoadMore() { + getAreaPopulaceList(mCurrentPage); + } + + //刷新 + private void doRefresh() { + mDatas.clear(); + mAdapter.setData(mDatas); + getAreaPopulaceList(1); + } + + /** + * + */ + private void doSearch() { + String searchContent = mEtAppSearchContent.getText().toString().trim(); + if (!TextUtils.isEmpty(searchContent)) { + hideSoftKeyboard(); + setStateView(13); + mKeywords = searchContent; + mCurrentPage = 1; + getAreaPopulaceList(mCurrentPage); + } else { + ToastUtils.show("请输入要查询的内容"); + } + } + + /** + * 旗县区选择 + */ + private void onShowArea1() { + ConditionAreaPopup conditionPopup = new ConditionAreaPopup(mActivity, mArea1List); + conditionPopup.setOnListPopupItemClickListener((bean, isCheck, pos) -> { + if (isCheck) { + //选中了 + mSelArea1 = bean; + mTvArea1.setText(mSelArea1.getName()); + mSelAreaCode = mSelArea1.getId(); + + mArea2List = null; + mSelArea2 = null; + mTvArea2.setText("乡镇街道"); + + mArea3List = null; + mSelArea3 = null; + mTvArea3.setText("村、社区"); + } else { + //清除了选项 + mSelArea1 = null; + mArea1List = null; + mTvArea1.setText("旗县区"); + + mArea2List = null; + mSelArea2 = null; + mTvArea2.setText("乡镇街道"); + + mArea3List = null; + mSelArea3 = null; + mTvArea3.setText("村、社区"); + mSelAreaCode = UserLgUtils.getUserAreaCode(); + + + } + mSelGrid = null; + mGridList = null; + mTvGrid.setText("网格"); + mDialog.show(); + doRefresh(); + conditionPopup.dismiss(); + }); + conditionPopup.showPopupWindow(mTvArea1); + } + + /** + * 乡镇街道选择 + */ + private void onShowArea2() { + ConditionAreaPopup conditionPopup = new ConditionAreaPopup(mActivity, mArea2List); + conditionPopup.setOnListPopupItemClickListener((bean, isCheck, pos) -> { + if (isCheck) { + //选中了 + mSelArea2 = bean; + mTvArea2.setText(mSelArea2.getName()); + mSelAreaCode = mSelArea2.getId(); + mArea3List = null; + mSelArea3 = null; + mTvArea3.setText("村、社区"); + } else { + //清除了选项 + mArea2List = null; + mSelArea2 = null; + mTvArea2.setText("乡镇街道"); + mSelAreaCode = mSelArea1.getId(); + mArea3List = null; + mSelArea3 = null; + mTvArea3.setText("村、社区"); + } + mSelGrid = null; + mGridList = null; + mTvGrid.setText("网格"); + mDialog.show(); + doRefresh(); + conditionPopup.dismiss(); + }); + conditionPopup.showPopupWindow(mTvArea2); + } + + /** + * 社区村选择 + */ + private void onShowArea3() { + ConditionAreaPopup conditionPopup = new ConditionAreaPopup(mActivity, mArea3List); + conditionPopup.setOnListPopupItemClickListener((bean, isCheck, pos) -> { + if (isCheck) { + //选中了 + mSelArea3 = bean; + mTvArea3.setText(mSelArea3.getName()); + mSelAreaCode = mSelArea3.getId(); + } else { + //清除了选项 + mArea3List = null; + mSelArea3 = null; + mTvArea3.setText("村、社区"); + mSelAreaCode = mSelArea2.getId(); + } + mSelGrid = null; + mGridList = null; + mTvGrid.setText("网格"); + mDialog.show(); + doRefresh(); + conditionPopup.dismiss(); + }); + conditionPopup.showPopupWindow(mTvArea3); + } + + /** + * 获取区域数据 + */ + private void getAreaList(int type, String id) { + ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中..."); + dialog.show(); + RetrofitManager.getInstance() + .create(BaseApiService.class) + .getAreaListByCode(id, UserLgUtils.getToken()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + } + + @Override + public void onNext(List areaListBeans) { + dialog.dismiss(); + if (null != areaListBeans && areaListBeans.size() > 0) { + switch (type) { + case 1: //area1 + mArea1List = areaListBeans; + onShowArea1(); + break; + case 2://area2 + mArea2List = areaListBeans; + onShowArea2(); + break; + case 3://area3 + mArea3List = areaListBeans; + onShowArea3(); + break; + } + } else { + ToastUtils.show("暂无区域数据"); + } + } + + @Override + public void onError(Throwable e) { + dialog.dismiss(); + ToastUtils.show("获取区域失败"); + } + + @Override + public void onComplete() { + + } + }); + } + + /** + * 根据状态显示 + * 12 默认 + * 13 搜索中 + * 14 搜索完成有数据 + * 15 搜索完成没有数据 + * 16 搜索失败 + * + * @param state + */ + private void setStateView(int state) { + switch (state) { + case 12://默认 + case 15: + mPbLoading.setVisibility(View.GONE); + mSrlContent.setVisibility(View.GONE); + mIvEmptyData.setVisibility(View.VISIBLE); + mTvErrorHint.setVisibility(View.VISIBLE); + mTvErrorHint.setText("暂无数据"); + break; + case 13://搜索中 + mPbLoading.setVisibility(View.VISIBLE); + mSrlContent.setVisibility(View.GONE); + mIvEmptyData.setVisibility(View.GONE); + mTvErrorHint.setVisibility(View.VISIBLE); + mTvErrorHint.setText("加载中..."); + break; + case 14://搜索完成有数据 + mPbLoading.setVisibility(View.GONE); + mSrlContent.setVisibility(View.VISIBLE); + mIvEmptyData.setVisibility(View.GONE); + mTvErrorHint.setVisibility(View.GONE); + break; + case 16://搜索失败 + mPbLoading.setVisibility(View.GONE); + mSrlContent.setVisibility(View.GONE); + mIvEmptyData.setVisibility(View.VISIBLE); + mTvErrorHint.setVisibility(View.VISIBLE); + mTvErrorHint.setText("加载失败,请稍后重试"); + break; + } + } +} \ No newline at end of file diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/ConditionAreaGridAdapter.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/ConditionAreaGridAdapter.java new file mode 100644 index 0000000..40e0236 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/adapters/ConditionAreaGridAdapter.java @@ -0,0 +1,57 @@ +package com.tengshisoft.commonmodule.adapters; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.tengshisoft.commonmodule.beans.AreaGridListBean; +import com.tenlionsoft.baselib.R; +import com.tenlionsoft.baselib.core.beans.AreaSimpleBean; +import com.tenlionsoft.baselib.core.widget.base.BaseRecyclerAdapter; +import com.tenlionsoft.baselib.core.widget.base.ConditionHolder; + +import java.util.ArrayList; +import java.util.List; + +/** + * 作者: adam + * 日期: 2021/10/20 - 11:18 上午 + * 邮箱: itgaojian@163.com + * 描述:网格筛选 + */ +public class ConditionAreaGridAdapter extends BaseRecyclerAdapter { + public List mSelBeans = new ArrayList<>(); + + public ConditionAreaGridAdapter(Context ctx, List list) { + super(ctx, list); + } + + @Override + public ConditionHolder createHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(mContext).inflate(R.layout.item_condition_sel, parent, false); + return new ConditionHolder(view); + } + + @Override + public void bindHolder(ConditionHolder holder, int i) { + AreaGridListBean.RowsBean bean = mData.get(i); + holder.mTvName.setText(bean.getGridName()); + holder.mCbCheck.setOnCheckedChangeListener(null); + holder.mTvName.setTextColor(bean.isCheck() ? Color.parseColor("#1296db") : Color.BLACK); + holder.mCbCheck.setChecked(bean.isCheck()); + holder.mCbCheck.setOnCheckedChangeListener((buttonView, isChecked) -> mLis.onItemCheckChange(bean, isChecked, i)); + holder.itemView.setOnClickListener(v -> mLis.onItemCheckChange(bean, !bean.isCheck(), i)); + } + + private OnItemCheckChange mLis; + + public void addOnitemCheckChange(OnItemCheckChange lis) { + this.mLis = lis; + } + + public interface OnItemCheckChange { + void onItemCheckChange(AreaGridListBean.RowsBean bean, boolean isCheck, int pos); + } +} diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/GridApis.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/GridApis.java index aa4224e..33b7bac 100644 --- a/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/GridApis.java +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/nets/GridApis.java @@ -577,7 +577,7 @@ public interface GridApis { */ @Headers({"base_url_name:person", "Content-Type: application/json", "Accept: application/json"}) @DELETE("app/basepopulationinfo/removebasepopulationinfo/{ids}") - Observable doDelBaseInfo(@Path("ids") String id, @Header("token") String token); + Observable doDelBaseInfo(@Path("ids") String id, @Query("reason") String reason, @Header("token") String token); /** * 保存人员基础信息 @@ -1156,6 +1156,19 @@ public interface GridApis { @Query("page") String page, @Header("token") String token); + + /** + * 根据区域code与网格id查看人口 + */ + @Headers({"base_url_name:person", "Content-Type: application/json", "Accept: application/json"}) + @GET("app/basepopulationinfo/listpageareaorgrid") + Observable getPopulaceListByAreaId( + @Query("keywords") String keywords, + @Query("areaCode") String areaCode, + @Query("gridId") String gridId, + @Query("page") String page, + @Header("token") String token); + /** * 我处理过的事件 */ diff --git a/commonmodule/src/main/java/com/tengshisoft/commonmodule/views/ConditionAreaGridPopup.java b/commonmodule/src/main/java/com/tengshisoft/commonmodule/views/ConditionAreaGridPopup.java new file mode 100644 index 0000000..0ec5e99 --- /dev/null +++ b/commonmodule/src/main/java/com/tengshisoft/commonmodule/views/ConditionAreaGridPopup.java @@ -0,0 +1,88 @@ +package com.tengshisoft.commonmodule.views; + +import android.content.Context; +import android.graphics.Color; +import android.util.DisplayMetrics; +import android.view.Gravity; +import android.view.View; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.tengshisoft.commonmodule.adapters.ConditionAreaGridAdapter; +import com.tengshisoft.commonmodule.beans.AreaGridListBean; +import com.tenlionsoft.baselib.R; +import com.tenlionsoft.baselib.core.beans.AreaSimpleBean; +import com.tenlionsoft.baselib.core.widget.base.ConditionAreaAdapter; + +import java.util.ArrayList; +import java.util.List; + +import razerdp.basepopup.BasePopupWindow; + +/** + * 作者: adam + * 日期: 2021/9/30 - 2:58 下午 + * 邮箱: itgaojian@163.com + * 描述: 条件选择-网格 + */ +public class ConditionAreaGridPopup extends BasePopupWindow { + private List mDatas; + private RecyclerView mRlvConditions; + private ConditionAreaGridAdapter mAdapter; + private OnListPopupItemClickListener mOnListPopupItemClickListener; + + public ConditionAreaGridPopup(Context context, List datas) { + super(context); + View view = createPopupById(R.layout.popup_condition_layout); + RecyclerView rlvCondition = view.findViewById(R.id.rlv_conditions); + if (datas == null) { + mDatas = new ArrayList<>(); + } else { + mDatas = datas; + } + mAdapter = new ConditionAreaGridAdapter(context, mDatas); + rlvCondition.setLayoutManager(new LinearLayoutManager(context)); + rlvCondition.setAdapter(mAdapter); + setContentView(view); + + setBackgroundColor(Color.parseColor("#11000000")); + setPopupGravity(Gravity.BOTTOM | Gravity.CENTER); + DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); + int height = (int) (displayMetrics.heightPixels * 0.5); + setHeight(height); + mAdapter.addOnitemCheckChange((bean, isCheck, pos) -> { + if (isCheck) { + mAdapter.mSelBeans.clear(); + mAdapter.mSelBeans.add(bean); + } else { + mAdapter.mSelBeans.remove(bean); + } + bean.setCheck(isCheck); + mOnListPopupItemClickListener.onItemClick(bean, isCheck, pos); + if (isCheck) { + if (true) { + for (int i = 0; i < mAdapter.getData().size(); i++) { + if (!mAdapter.getData().get(i).getGridId().equals(bean.getGridId())) { + mAdapter.getData().get(i).setCheck(false); + } + } + } + } + mAdapter.notifyDataSetChanged(); + }); + } + + + public OnListPopupItemClickListener getOnListPopupItemClickListener() { + return mOnListPopupItemClickListener; + } + + public void setOnListPopupItemClickListener(OnListPopupItemClickListener onListPopupItemClickListener) { + mOnListPopupItemClickListener = onListPopupItemClickListener; + } + + public interface OnListPopupItemClickListener { + void onItemClick(AreaGridListBean.RowsBean bean, boolean isCheck, int pos); + } +} diff --git a/commonmodule/src/main/res/layout/activity_census_base_detail.xml b/commonmodule/src/main/res/layout/activity_census_base_detail.xml new file mode 100644 index 0000000..b32ffc9 --- /dev/null +++ b/commonmodule/src/main/res/layout/activity_census_base_detail.xml @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +