package com.basic.security.fragment; import android.content.Intent; import android.graphics.BitmapFactory; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; import com.basic.security.base.BaseFragment; import com.basic.security.manager.IdentityManager; import com.basic.security.manager.PersonManager; import com.basic.security.manager.VisitManager; import com.basic.security.model.ModelAdapter; import com.basic.security.model.Person; import com.basic.security.utils.Constants; import com.basic.security.utils.DateEditUtilForValidTime; import com.basic.security.utils.DateUtil; import com.basic.security.utils.ExcelWriteUtil; import com.basic.security.utils.KeyboardUtil; import com.basic.security.utils.ResolutionAdaptation; import com.basic.security.utils.ToastUtil; import com.basic.security.widget.FileChooserDialog1; import com.basic.security.widget.abslistview.CommonAdapter; import com.basic.security.widget.abslistview.ViewHolder; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @EFragment public class VisitListFragment extends BaseFragment { public static final int REQUEST_CODE = 1111; private static final int LOAD_FROM_ZERO = 0; public int selectedPosition = -1; public List checkedList = new ArrayList<>(); @ViewById EditText search_text, identity_select; @ViewById View icon_search, empty; @ViewById Button search; @ViewById ImageView registerPic, idCardPic; @ViewById TextView name, id_card_number, phone, register_time, register_type, last_visit_time, date_text; @ViewById ListView visit_record_list; @ViewById SmartRefreshLayout refresh_layout; @ViewById ProgressBar loading; @ViewById Spinner visit_record_spinner; FileChooserDialog1 fileChooserDialog = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH_mm_ss"); private int pageSize = 20; private CommonAdapter adapter; private List record_list = new ArrayList<>(); private long startTime, endTime; private String key = ""; private String selectIdentity = "全部"; private TextWatcher watcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } public void afterTextChanged(Editable s) { key = search_text.getText().toString().trim(); loadTask(LOAD_FROM_ZERO); } }; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(ResolutionAdaptation.fragment_visit_list(), container, false); } @Click void search() { loadTask(LOAD_FROM_ZERO); } @Click void date_text() { DateEditUtilForValidTime.selectTime(startTime, endTime, true, (start_time, end_time) -> { startTime = start_time; endTime = end_time; setTimeToView(); }); } public void show() { super.show(); search_text.removeTextChangedListener(watcher); startTime = System.currentTimeMillis() - 7 * 24 * 3600 * 1000; endTime = System.currentTimeMillis(); setTimeToView(); emptyPersonDetail(); key = ""; selectIdentity = "全部"; search_text.addTextChangedListener(watcher); empty.setVisibility(View.GONE); initIdentitySpinner(); adapter.notifyDataSetChanged(); } public void emptyPersonDetail() { search_text.setText(""); registerPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), com.basic.security.utils.RUtils.R_drawable_no_pic)); idCardPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), com.basic.security.utils.RUtils.R_drawable_no_pic)); name.setText(""); id_card_number.setText(""); phone.setText(""); register_time.setText(""); register_type.setText(""); last_visit_time.setText(""); } private void initIdentitySpinner() { List identityList = IdentityManager.findIdentityList(); List ruleListName = new ArrayList<>(); ruleListName.clear(); ruleListName.add("全部"); for (int i = 0; i < identityList.size(); i++) { ruleListName.add(identityList.get(i).getString("name")); } SpinnerAdapter spinnerAdapter = new SpinnerAdapter(ruleListName); visit_record_spinner.setAdapter(spinnerAdapter); visit_record_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView parent, View view, int position, long id) { selectIdentity = ruleListName.get(position); emptyPersonDetail(); loadTask(LOAD_FROM_ZERO); } public void onNothingSelected(AdapterView parent) { } }); } private void setTimeToView() { StringBuilder builder = new StringBuilder(); builder.append(DateUtil.formatTime(startTime, "yyyy/MM/dd HH:mm")) .append(" — ") .append(DateUtil.formatTime(endTime, "yyyy/MM/dd HH:mm")); date_text.setText(builder.toString()); } @AfterViews void init() { try { search_text.addTextChangedListener(watcher); adapter = new CommonAdapter(mainActivity(), com.basic.security.utils.ResolutionAdaptation.visit_record_item(), record_list) { protected void convert(ViewHolder vh, ModelAdapter item, int position) { TextView visitTime = vh.getView(com.basic.security.utils.RUtils.R_id_visit_time); View checked = vh.getView(com.basic.security.utils.RUtils.R_id_checked); checkedList.add(checked); View row = vh.getView(com.basic.security.utils.RUtils.R_id_row); TextView device_name = vh.getView(com.basic.security.utils.RUtils.R_id_device_name); TextView name = vh.getView(com.basic.security.utils.RUtils.R_id_name); TextView id_number = vh.getView(com.basic.security.utils.RUtils.R_id_id_number); TextView phone = vh.getView(com.basic.security.utils.RUtils.R_id_phone); TextView identity = vh.getView(com.basic.security.utils.RUtils.R_id_identity); if (item == null) { return; } if (selectedPosition == position) { checked.setVisibility(View.VISIBLE); } else { checked.setVisibility(View.GONE); } visitTime.setText(DateUtil.formatTime(Long.parseLong(item.getString("visit_time")), "yyyy/MM/dd HH:mm:ss")); device_name.setText(item.getString("device_name") == null ? "" : item.getString("device_name").trim()); name.setText(item.getString("person_name") == null ? "" : item.getString("person_name").trim()); id_number.setText(item.getString("person_id_number") == null ? "" : item.getString("person_id_number").trim()); phone.setText(item.getString("person_phone") == null ? "" : item.getString("person_phone").trim()); identity.setText(item.getString("person_type") == null ? "" : item.getString("person_type").trim()); } }; visit_record_list.setAdapter(adapter); visit_record_list.setOnItemClickListener((parent, view, position, id) -> { for (View checked : checkedList) { checked.setVisibility(View.GONE); } View checked = view.findViewById(com.basic.security.utils.RUtils.R_id_checked); checked.setVisibility(View.VISIBLE); selectedPosition = position; KeyboardUtil.hideSoftKeyboard(); loadPersonByID(position); }); refresh_layout.setOnRefreshListener(refreshLayout -> loadTask(LOAD_FROM_ZERO)); refresh_layout.setOnLoadMoreListener(refreshLayout -> loadTask(record_list.size())); } catch (Exception e) { e.printStackTrace(); } } @UiThread public void loadPersonByIDUIThread(int position, ModelAdapter person) { name.setText(person.getString("name")); id_card_number.setText(person.getString("id_card_number")); phone.setText(person.getString("phone")); try { register_time.setText(DateUtil.formatTime(Long.parseLong(person.getString("sign_up_time")), "yyyy-MM-dd HH:mm:ss")); } catch (Exception e) { e.printStackTrace(); register_time.setText(""); } String type = person.getString("sign_up_method"); if ("自助注册".equals(type)) { if ("不需要验证身份证".equals(person.getString("verify_status"))) { type = type + "-普通验证"; } else { type = type + "-身份证验证"; } } else if ("人工注册".equals(type)) { if ("不需要验证身份证".equals(person.getString("verify_status"))) { type = "人工注册-普通验证"; } else { type = "人工注册-身份证验证"; } } register_type.setText(type); last_visit_time.setText(person.getString("lastTime")); if (person.getBlob("camera_image_path") != null && person.getBlob("camera_image_path") != null) { byte[] data = person.getBlob("camera_image_path"); registerPic.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length)); } else { registerPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), com.basic.security.utils.RUtils.R_drawable_no_pic)); } if ("访客注册".equals(person.getString(Person.sign_up_method))) { File idCardPhotoFile = new File(Constants.attachmentPath + person.getString(Person.id_card_number) + ".jpg"); if (idCardPhotoFile.exists()) { idCardPic.setImageBitmap(BitmapFactory.decodeFile(idCardPhotoFile.getAbsolutePath())); } else { idCardPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), com.basic.security.utils.RUtils.R_drawable_no_pic)); } if (person.getBlob("id_card_image_path") != null && person.getBlob("id_card_image_path") != null) { byte[] data = person.getBlob("id_card_image_path"); idCardPic.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length)); } else { } } else { if (person.getBlob("id_card_image_path") != null && person.getBlob("id_card_image_path") != null) { byte[] data = person.getBlob("id_card_image_path"); idCardPic.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length)); } else { idCardPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), com.basic.security.utils.RUtils.R_drawable_no_pic)); } } } private void loadPersonByID(int position) { String personId = record_list.get(position).getString("person_id"); if (!TextUtils.isEmpty(personId)) { ModelAdapter document = PersonManager.findPersonById(personId); if (document != null) { String lastTime = VisitManager.getLastVisitTime(document.getId()); if (TextUtils.isEmpty(lastTime)) { document.setString("lastTime", "暂无"); } else { document.setString("lastTime", DateUtil.formatTime(Long.parseLong(lastTime), "yyyy-MM-dd HH:mm:ss")); } loadPersonByIDUIThread(position, document); } else { ToastUtil.show("此人已被删除"); } } else { ToastUtil.show("查无此人"); } } @UiThread public void loadTaskCompleteUIThread(int start, List result) { if (start == LOAD_FROM_ZERO) { record_list.clear(); refresh_layout.finishRefresh(); selectedPosition = -1; } else { refresh_layout.finishLoadMore(); } record_list.addAll(result); if (record_list.size() > 0) { empty.setVisibility(View.GONE); } else { empty.setVisibility(View.VISIBLE); } adapter.notifyDataSetChanged(); loading.setVisibility(View.GONE); if (start == LOAD_FROM_ZERO) { visit_record_list.setSelection(0); } } public void loadTask(int start) { synchronized (this) { if (loading.getVisibility() == View.VISIBLE) { return; } } List result = new ArrayList<>(); result.addAll(VisitManager.queryVisitRecords(selectIdentity, key, true, startTime, endTime, start, pageSize)); loadTaskCompleteUIThread(start, result); } @Click public void export_visit_list() { try { String currentFileName = "访问记录" + sdf.format(new Date()) + ".xlsx"; File file = new File("/sdcard/visit_list.xlsx"); if (file.exists()) { file.delete(); } List visitList = VisitManager.queryVisitRecords(selectIdentity, key, true, startTime, endTime, 0, 10 * 10000); ExcelWriteUtil.write(file, visitList); Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); intent.setType("application/xlsx"); intent.putExtra(Intent.EXTRA_TITLE, currentFileName); startActivityForResult(intent, REQUEST_CODE); } catch (Exception e) { e.printStackTrace(); } } private class SpinnerAdapter extends BaseAdapter { private List ruleListName; public SpinnerAdapter(List ruleListName) { this.ruleListName = ruleListName; } public int getCount() { return ruleListName == null ? 0 : ruleListName.size(); } public Object getItem(int position) { return ruleListName.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(getActivity()).inflate(com.basic.security.utils.ResolutionAdaptation.spinner_identity_item1(), null); viewHolder.identity_name = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_spinner_text); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.identity_name.setText(ruleListName.get(position)); return convertView; } class ViewHolder { TextView identity_name; } } }