diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bbdea26..4fb7fce 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -48,6 +48,27 @@
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
+
+
+
+
+
+
+
+
+
mDicPicker;
+ private List mDicBeanList;
+
+ private String mSelAreaName = "";
+ private String mSelAreaCode = "";
+ private String mIdCard;
+
+
+ @Override
+ protected int setLayoutId() {
+ return R.layout.activity_census_heresy_add;
+ }
+
+ @Override
+ public void initData() {
+ mBind = ButterKnife.bind(this);
+
+ mLlContent.setVisibility(View.INVISIBLE);
+ //主键
+ mId = getIntent().getStringExtra("id");
+ mIdCard = getIntent().getStringExtra("idCard");
+ //获取人员详情
+ String title = getIntent().getStringExtra("title");
+ if (!TextUtils.isEmpty(mId)) {
+ //编辑
+ mLlSearchContent.setVisibility(View.GONE);
+ refreshView(STATE_LOAD_LOADING);
+ getDetailById(mId);
+ } else {
+ //新增
+ mLlSearchContent.setVisibility(View.GONE);
+ }
+ mTvBaseTitle.setText(title);
+ mBtnSearch.setOnClickListener(v -> doSearchPerson());
+ mIvClear.setOnClickListener(v -> mEtSearchIdCard.setText(""));
+ mTvHeresyType.setOnClickListener(v -> onShowDicPicker(PathConfig.DIC_HERESY_TYPE, 2, 1));
+ mTvHelpCase.setOnClickListener(v -> onShowDicPicker(PathConfig.DIC_HELP, 2, 2));
+ mTvAddress.setOnClickListener(v -> onShowArea());
+ mTvHeresyDate.setOnClickListener(v -> onShowDate(mTvHeresyDate));
+ mTvGetDate.setOnClickListener(v -> onShowDate(mTvGetDate));
+
+ mBtnConfirm.setOnClickListener(v -> doSubmit());
+ getPersonDetail();
+ }
+
+ /**
+ * 获取人员详情
+ */
+ private void getPersonDetail() {
+ RetrofitManager.getInstance()
+ .create(LocationApiService.class)
+ .getBaseRegisterDetail(mIdCard, UserLgUtils.getToken())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribeOn(Schedulers.io())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(BaseRegisterDetailBean baseRegisterDetailBean) {
+ //设置基础信息
+ setBaseInfo(baseRegisterDetailBean);
+ refreshView(STATE_LOAD_SUCCESS);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ refreshView(STATE_LOAD_ERROR);
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+
+ /**
+ * 日期
+ * 1 释放日期 2衔接日期 3释放日期
+ */
+ private void onShowDate(TextView tvItem) {
+ hideSoftKeyboard();
+ TimePickerView mTimePickerView = new TimePickerBuilder(mActivity, (date, v) -> {
+ tvItem.setText(mDateFormat.format(date));
+ })
+ .setTitleText("请选日期")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setType(new boolean[]{true, true, true, false, false, false})
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mTimePickerView.show();
+ }
+
+
+ private void doSubmit() {
+ if (checkParams()) {
+ if (!TextUtils.isEmpty(mId)) {
+ doEdit();
+ } else {
+ doAdd();
+ }
+ }
+ }
+
+ /**
+ * 地区选择
+ */
+ private void onShowArea() {
+ AreaChooseDialog dialog = new AreaChooseDialog
+ .DialogBuilder(mActivity)
+ .setDefault(true)
+ .build();
+ dialog.addOnChoseListener((names, id, code) -> {
+ mSelAreaCode = code;
+ mSelAreaName = names;
+ mTvAddress.setText(names);
+ dialog.dismiss();
+ });
+ dialog.show();
+ }
+
+ /**
+ * 添加
+ */
+ private void doAdd() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "保存中...");
+ dialog.show();
+ RequestBody body = buildParams();
+ RetrofitManager.getInstance()
+ .create(LocationApiService.class)
+ .doSaveHeresy(body, 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) {
+ dialog.dismiss();
+ ToastUtils.showShort("新增成功");
+ finish();
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
+ }
+
+ /**
+ * 编辑
+ */
+ private void doEdit() {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "修改中...");
+ dialog.show();
+ RequestBody body = buildParams();
+ RetrofitManager.getInstance()
+ .create(LocationApiService.class)
+ .doEditHeresy(mId, body, 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) {
+ dialog.dismiss();
+ ToastUtils.showShort("修改成功");
+ finish();
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ private void onShowDicPicker(String id, int type, int source) {
+ hideSoftKeyboard();
+ if (type == 1) {
+ mDicPicker = new OptionsPickerBuilder(mActivity, (o1, o2, o3, v) -> {
+ DicBean dicBean = mDicBeanList.get(o1);
+ if (source == 1) {
+ mTvHeresyType.setText(dicBean.getDictionaryName());
+ } else {
+ mTvHelpCase.setText(dicBean.getDictionaryName());
+ }
+ })
+ .setTitleText("请选择")
+ .setCancelColor(Color.parseColor("#1189FF"))
+ .setSubmitColor(Color.parseColor("#1189FF"))
+ .setTitleColor(Color.parseColor("#1189FF"))
+ .build();
+ mDicPicker.setPicker(mDicBeanList);
+ mDicPicker.show();
+ } else {
+ getDicListByType(id, type, source);
+ }
+ }
+
+ private void getDicListByType(String pId, int i, int source) {
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "获取中...");
+ dialog.show();
+ RetrofitManager.getInstance()
+ .create(LocationApiService.class)
+ .getDictListAllByPid(pId, UserLgUtils.getToken())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull List l) {
+ dialog.dismiss();
+ if (l != null && l.size() > 0) {
+ mDicBeanList = l;
+ onShowDicPicker(pId, 1, source);
+ } else {
+ ToastUtils.showShort("暂无数据");
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ dialog.dismiss();
+ ExceptionHandler.handleException(e);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+
+ }
+
+
+ private RequestBody buildParams() {
+ SaveHeresyBean bean = new SaveHeresyBean();
+ bean.setPopulationInfoId(mBaseInfoBean.getPopulationInfoId());
+ String type = mTvHeresyType.getText().toString().trim();
+ bean.setType(type);
+ String heresyDate = mTvHeresyDate.getText().toString().trim();
+ bean.setTime(heresyDate);
+ String phone = mEtPhone.getText().toString().trim();
+ bean.setPhone(phone);
+ String helpCase = mTvHelpCase.getText().toString().trim();
+ bean.setHelp(helpCase);
+ bean.setCultAddress(mSelAreaName);
+ bean.setCultAreaCode(mSelAreaCode);
+ bean.setCultAreaName(mSelAreaName);
+ String getDate = mTvGetDate.getText().toString().trim();
+ bean.setPuttime(getDate);
+ bean.setDocontinue(mSwIsHeresy.isChecked() ? "是" : "否");
+ Gson gson = new Gson();
+ String obj = gson.toJson(bean);
+ RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), obj);
+ return requestBody;
+ }
+
+ /**
+ * 校验参数
+ */
+ private boolean checkParams() {
+ String crimeName = mTvHeresyType.getText().toString().trim();
+ if (TextUtils.isEmpty(crimeName)) {
+ ToastUtils.showShort("请选择涉邪代码");
+ return false;
+ }
+ String prisonTerm = mTvHeresyDate.getText().toString().trim();
+ if (TextUtils.isEmpty(prisonTerm)) {
+ ToastUtils.showShort("请选择涉邪时间");
+ return false;
+ }
+ String controlPhone = mEtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(controlPhone) || !RegexUtils.isPhone(controlPhone)) {
+ ToastUtils.showShort("请输入正确的联系电话");
+ return false;
+ }
+
+
+ return true;
+ }
+
+ /**
+ * 获取详情
+ */
+ private void getDetailById(String id) {
+ RetrofitManager.getInstance()
+ .create(LocationApiService.class)
+ .getHeresyDetailById(id, UserLgUtils.getToken())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(@NonNull HeresyDetailBean censusCrimeDetailBean) {
+ setDataToView(censusCrimeDetailBean, 0);
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ ExceptionHandler.handleException(e);
+ refreshView(STATE_LOAD_ERROR);
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
+ }
+
+ /**
+ * 根据身份证号码收搜人员详细信息
+ */
+ private void doSearchPerson() {
+ String searchIdCard = mEtSearchIdCard.getText().toString().trim();
+ if (TextUtils.isEmpty(searchIdCard) || !RegexUtils.isIDNumber(searchIdCard)) {
+ ToastUtils.showShort("请输入合法的身份证号码");
+ } else {
+ hideSoftKeyboard();
+ ProgressDialog dialog = UIUtil.initDialog(mActivity, "查询中...");
+ dialog.show();
+
+
+ }
+ }
+
+ /**
+ * 回填数据
+ */
+ private void setDataToView(HeresyDetailBean bean, int type) {
+ mId = bean.getCultId();
+ mTvHeresyType.setText(bean.getType());
+ mTvHeresyDate.setText(bean.getTime());
+ mEtPhone.setText(bean.getPhone());
+ mTvHelpCase.setText(bean.getHelp());
+ mSelAreaCode = bean.getCultAreaCode();
+ mSelAreaName = bean.getCultAreaName();
+ mTvAddress.setText(bean.getCultAddress());
+ mTvGetDate.setText(bean.getPuttime());
+ mSwIsHeresy.setChecked("是".equals(bean.getDocontinue()));
+ refreshView(STATE_LOAD_SUCCESS);
+ }
+
+ /**
+ * 设置基础信息
+ */
+ private void setBaseInfo(BaseRegisterDetailBean o) {
+ mBaseInfoBean = o;
+ mLlContent.setVisibility(View.VISIBLE);
+ mTvBaseName.setText(o.getName());
+ mTvBaseGender.setText(o.getSex());
+ mTvBasePhone.setText(o.getPhone());
+ mTvBaseNative.setText(o.getOriginAddress());
+ mTvBaseCurLoc.setText(o.getDomicileAreaName() + "/" + o.getDomicileAddress());
+
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mBind != null) {
+ mBind.unbind();
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/census/special/CensusHeresyDetailActivity.java b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/census/special/CensusHeresyDetailActivity.java
new file mode 100644
index 0000000..17e3824
--- /dev/null
+++ b/app/src/main/java/com/sucstepsoft/realtimelocation/activitys/census/special/CensusHeresyDetailActivity.java
@@ -0,0 +1,158 @@
+package com.sucstepsoft.realtimelocation.activitys.census.special;
+
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.Switch;
+import android.widget.TextView;
+
+import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager;
+import com.sucstepsoft.cm_utils.core.widget.base.BaseActivity;
+import com.sucstepsoft.cm_utils.utils.UserLgUtils;
+import com.sucstepsoft.realtimelocation.R;
+import com.sucstepsoft.realtimelocation.beans.person.BaseRegisterDetailBean;
+import com.sucstepsoft.realtimelocation.beans.person.CorrectDetailBean;
+import com.sucstepsoft.realtimelocation.beans.person.HeresyDetailBean;
+import com.sucstepsoft.realtimelocation.net.LocationApiService;
+import com.sucstepsoft.realtimelocation.utils.ExceptionHandler;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.Unbinder;
+import io.reactivex.Observable;
+import io.reactivex.Observer;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.annotations.NonNull;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * 特殊人群-涉邪人员
+ */
+public class CensusHeresyDetailActivity extends BaseActivity {
+
+ @BindView(R.id.et_search_id_card)
+ EditText mEtSearchIdCard;
+ @BindView(R.id.iv_clear)
+ ImageView mIvClear;
+ @BindView(R.id.btn_search)
+ Button mBtnSearch;
+ @BindView(R.id.ll_search_content)
+ LinearLayout mLlSearchContent;
+ @BindView(R.id.tv_base_name)
+ TextView mTvBaseName;
+ @BindView(R.id.tv_base_gender)
+ TextView mTvBaseGender;
+ @BindView(R.id.tv_base_phone)
+ TextView mTvBasePhone;
+ @BindView(R.id.tv_base_native)
+ TextView mTvBaseNative;
+ @BindView(R.id.tv_base_cur_loc)
+ TextView mTvBaseCurLoc;
+ @BindView(R.id.cv_base_info)
+ LinearLayout mCvBaseInfo;
+ @BindView(R.id.tv_heresy_type)
+ TextView mTvHeresyType;
+ @BindView(R.id.tv_heresy_date)
+ TextView mTvHeresyDate;
+ @BindView(R.id.et_phone)
+ TextView mEtPhone;
+ @BindView(R.id.tv_help_case)
+ TextView mTvHelpCase;
+ @BindView(R.id.tv_address)
+ TextView mTvAddress;
+ @BindView(R.id.tv_get_date)
+ TextView mTvGetDate;
+ @BindView(R.id.sw_is_heresy)
+ Switch mSwIsHeresy;
+ @BindView(R.id.ll_content)
+ LinearLayout mLlContent;
+ private Unbinder mBind;
+ private BaseRegisterDetailBean mBaseInfo;
+ private HeresyDetailBean mDetailBean;
+
+
+ @Override
+ protected int setLayoutId() {
+ return R.layout.activity_census_heresy_detail;
+ }
+
+ @Override
+ public void initData() {
+ mBind = ButterKnife.bind(this);
+ mTvBaseTitle.setText("详情");
+ refreshView(STATE_LOAD_LOADING);
+ String id = getIntent().getStringExtra("id");
+ String idCard = getIntent().getStringExtra("idCard");
+ getDetailData(id, idCard);
+ }
+
+ /**
+ * 获取详细信息
+ *
+ * @param id
+ * @param idCard
+ */
+ private void getDetailData(String id, String idCard) {
+ Observable baseRegisterDetail = RetrofitManager.getInstance().create(LocationApiService.class).getBaseRegisterDetail(idCard, UserLgUtils.getToken());
+ Observable heresyDetailById = RetrofitManager.getInstance().create(LocationApiService.class).getHeresyDetailById(id, UserLgUtils.getToken());
+ Observable.merge(baseRegisterDetail, heresyDetailById)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer