package com.basic.security.fragment;
|
|
import android.graphics.BitmapFactory;
|
import android.support.annotation.NonNull;
|
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.R;
|
import com.basic.security.base.BaseFragment;
|
import com.basic.security.manager.IdentityManager;
|
import com.basic.security.manager.PersonManager;
|
import com.basic.security.manager.impl.cblite.VisitManager;
|
import com.basic.security.model.ModelAdapter;
|
import com.basic.security.utils.DateEditUtil;
|
import com.basic.security.utils.DateUtil;
|
import com.basic.security.utils.KeyboardUtil;
|
import com.basic.security.utils.ToastUtil;
|
import com.basic.security.utils.abslistview.CommonAdapter;
|
import com.basic.security.utils.abslistview.ViewHolder;
|
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
|
import com.scwang.smartrefresh.layout.api.RefreshLayout;
|
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
|
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
|
|
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.util.ArrayList;
|
import java.util.List;
|
|
@EFragment(R.layout.fragment_visit_record_list)
|
public class VisitRecordListFragment extends BaseFragment {
|
|
private static final int LOAD_FROM_ZERO = 0;
|
@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;
|
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);
|
}
|
};
|
|
@Click
|
void search() {
|
loadTask(LOAD_FROM_ZERO);
|
}
|
|
@Click
|
void date_text() {
|
DateEditUtil.selectTime(startTime, endTime, true, new DateEditUtil.CallBack() {
|
@Override
|
public void notify(long start_time, long end_time) {
|
startTime = start_time;
|
endTime = end_time;
|
|
setTimeToView();
|
}
|
});
|
}
|
|
@Override
|
public void show() {
|
search_text.removeTextChangedListener(watcher);
|
startTime = System.currentTimeMillis() - 7 * 24 * 3600 * 1000;
|
endTime = System.currentTimeMillis();
|
setTimeToView();
|
search_text.setText("");
|
registerPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic));
|
idCardPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic));
|
name.setText("");
|
id_card_number.setText("");
|
phone.setText("");
|
register_time.setText("");
|
register_type.setText("");
|
last_visit_time.setText("");
|
key = "";
|
selectIdentity = "全部";
|
search_text.addTextChangedListener(watcher);
|
empty.setVisibility(View.GONE);
|
initIdentitySpinner();
|
adapter.notifyDataSetChanged();
|
}
|
|
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() {
|
@Override
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
if (!"全部".equals(ruleListName.get(position))) {
|
selectIdentity = ruleListName.get(position);
|
loadTask(LOAD_FROM_ZERO);
|
}
|
}
|
|
@Override
|
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() {
|
search_text.addTextChangedListener(watcher);
|
adapter = new CommonAdapter<ModelAdapter>(mainActivity(), R.layout.visit_record_item, record_list) {
|
|
@Override
|
protected void convert(ViewHolder vh, ModelAdapter item, int position) {
|
|
TextView visitTime = vh.getView(R.id.visit_time);
|
TextView device_name = vh.getView(R.id.device_name);
|
TextView name = vh.getView(R.id.name);
|
TextView id_number = vh.getView(R.id.id_number);
|
TextView phone = vh.getView(R.id.phone);
|
TextView identity = vh.getView(R.id.identity);
|
|
if (item == null) {
|
return;
|
}
|
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());
|
|
// 之前的校验结果 暂时废弃 不要删除
|
// String verify_result = item.getString("verify_result");
|
// switch (verify_result) {
|
// case "0":
|
// verifyResult.setFaceDetailUI("通过");
|
// verifyResult.setTextColor(getResources().getColor(R.color.colorGreen));
|
// break;
|
// case "1":
|
// verifyResult.setFaceDetailUI("不通过");
|
// verifyResult.setTextColor(getResources().getColor(R.color.colorRed));
|
// break;
|
// case "2":
|
// verifyResult.setFaceDetailUI("黑名单");
|
// verifyResult.setTextColor(getResources().getColor(R.color.colorRed));
|
// break;
|
// case "3":
|
// verifyResult.setFaceDetailUI("管理员");
|
// verifyResult.setTextColor(getResources().getColor(R.color.colorGreen));
|
// break;
|
// default:
|
// verifyResult.setFaceDetailUI("访问记录异常");
|
// verifyResult.setTextColor(getResources().getColor(R.color.colorRed));
|
// break;
|
// }
|
}
|
};
|
|
visit_record_list.setAdapter(adapter);
|
|
visit_record_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
@Override
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
KeyboardUtil.hideSoftKeyboard();
|
loadPersonByID(position);
|
}
|
});
|
|
refresh_layout.setOnRefreshListener(new OnRefreshListener() {
|
@Override
|
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
|
loadTask(LOAD_FROM_ZERO);
|
}
|
});
|
refresh_layout.setOnLoadMoreListener(new OnLoadMoreListener() {
|
@Override
|
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
|
loadTask(record_list.size());
|
}
|
});
|
}
|
|
@UiThread
|
public void loadPersonByIDUIThread(int position, ModelAdapter document) {
|
|
name.setText(document.getString("name"));
|
id_card_number.setText(document.getString("id_card_number"));
|
phone.setText(document.getString("phone"));
|
try {
|
register_time.setText(DateUtil.formatTime(Long.parseLong(document.getString("sign_up_time")), "yyyy-MM-dd HH:mm:ss"));
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
register_time.setText("");
|
}
|
|
String type = document.getString("sign_up_method");
|
if ("自助注册".equals(type)) {
|
if ("不需要验证身份证".equals(document.getString("verify_status"))) {
|
type = type + "-普通验证";
|
} else {
|
type = type + "-身份证验证";
|
}
|
} else if ("管理员注册".equals(type)) {
|
if ("不需要验证身份证".equals(document.getString("verify_status"))) {
|
type = "人工注册-普通验证";
|
} else {
|
type = "人工注册-身份证验证";
|
}
|
}
|
|
register_type.setText(type);
|
last_visit_time.setText(document.getString("lastTime"));
|
|
if (document.getBlob("camera_image_path") != null && document.getBlob("camera_image_path") != null) {
|
byte[] data = document.getBlob("camera_image_path");
|
registerPic.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length));
|
} else {
|
registerPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic));
|
}
|
if (document.getBlob("id_card_image_path") != null && document.getBlob("id_card_image_path") != null) {
|
byte[] data = document.getBlob("id_card_image_path");
|
idCardPic.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length));
|
} else {
|
idCardPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), 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) {
|
ModelAdapter d = document;
|
String lastTime = VisitManager.getLastVisitTime(document.getId());
|
if (TextUtils.isEmpty(lastTime)) {
|
d.setString("lastTime", "暂无");
|
} else {
|
d.setString("lastTime", DateUtil.formatTime(Long.parseLong(lastTime), "yyyy-MM-dd HH:mm:ss"));
|
}
|
loadPersonByIDUIThread(position, d);
|
} else {
|
ToastUtil.show("此人已被删除");
|
}
|
} else {
|
ToastUtil.show("查无此人");
|
}
|
//
|
//
|
// Observable.create(
|
// new ObservableOnSubscribe<Document>() {
|
// @Override
|
// public void subscribe(ObservableEmitter<Document> emitter) throws Exception {
|
//
|
//
|
// }
|
// })
|
// .subscribeOn(Schedulers.io())
|
// .observeOn(AndroidSchedulers.mainThread())
|
// .subscribe(new Observer<Document>() {
|
// @Override
|
// public void onSubscribe(Disposable d) {}
|
//
|
// @Override
|
// public void onNext(Document document) {
|
//
|
// }
|
//
|
// @Override
|
// public void onError(Throwable e) {
|
// ToastUtil.show("数据库中无此人(可能已被删除)");
|
// name.setFaceDetailUI("");
|
// id_card_number.setFaceDetailUI("");
|
// phone.setFaceDetailUI("");
|
// register_time.setFaceDetailUI("");
|
// register_type.setFaceDetailUI("");
|
// last_visit_time.setFaceDetailUI("");
|
// registerPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic));
|
// idCardPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic));
|
// }
|
//
|
// @Override
|
// public void onComplete() {}
|
// }
|
// );
|
}
|
|
@UiThread
|
public void loadTaskCompleteUIThread(int start, List<ModelAdapter> result) {
|
try {
|
if (result.size() == 0) {
|
if (mainActivity().currentFragment == mainActivity().fragment_visit_record_list) {
|
// if (start == LOAD_FROM_ZERO) {
|
// ToastUtil.show("无符合条件的访问记录");
|
// } else {
|
// ToastUtil.show("无更多符合条件的访问记录");
|
// }
|
}
|
}
|
if (start == LOAD_FROM_ZERO) {
|
record_list.clear();
|
refresh_layout.finishRefresh();
|
} 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);
|
}
|
} catch (Exception e) {
|
System.out.println("VisitRecordListFragment.loadTaskCompleteUIThread " + e.getMessage());
|
}
|
|
}
|
|
public void loadTask(int start) {
|
synchronized (this) {
|
if (loading.getVisibility() == View.VISIBLE) {
|
return;
|
} else {
|
loading.setVisibility(View.VISIBLE);
|
}
|
}
|
|
List<ModelAdapter> result = new ArrayList<>();
|
result.addAll(VisitManager.queryVisitRecords(selectIdentity, key, true, startTime, endTime, start, pageSize));
|
loadTaskCompleteUIThread(start, result);
|
// Observable.create(
|
// new ObservableOnSubscribe<String>() {
|
// @Override
|
// public void subscribe(ObservableEmitter<String> emitter) throws Exception {
|
//
|
//
|
// emitter.onComplete();
|
// }
|
// })
|
// .subscribeOn(Schedulers.io())
|
// .observeOn(AndroidSchedulers.mainThread())
|
// .subscribe(new Observer<String>() {
|
// public void onSubscribe(Disposable d) {}
|
// public void onNext(String s) {}
|
// public void onError(Throwable e) {
|
// ToastUtil.show("加载失败" + e.getMessage());
|
// }
|
// public void onComplete() {
|
//
|
// }
|
// }
|
// );
|
}
|
|
private class SpinnerAdapter extends BaseAdapter {
|
|
private List<String> ruleListName;
|
|
public SpinnerAdapter(List<String> ruleListName) {
|
this.ruleListName = ruleListName;
|
}
|
|
@Override
|
public int getCount() {
|
return ruleListName == null ? 0 : ruleListName.size();
|
}
|
|
@Override
|
public Object getItem(int position) {
|
return ruleListName.get(position);
|
}
|
|
@Override
|
public long getItemId(int position) {
|
return position;
|
}
|
|
@Override
|
public View getView(int position, View convertView, ViewGroup parent) {
|
ViewHolder viewHolder = null;
|
if (convertView == null) {
|
viewHolder = new ViewHolder();
|
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.spinner_identity_item, null);
|
viewHolder.identity_name = convertView.findViewById(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;
|
}
|
}
|
|
}
|