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<View> 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<ModelAdapter> 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<ModelAdapter> identityList = IdentityManager.findIdentityList();
|
List<String> 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<ModelAdapter>(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<ModelAdapter> 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<ModelAdapter> 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<ModelAdapter> 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<String> ruleListName;
|
|
public SpinnerAdapter(List<String> 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;
|
}
|
}
|
}
|