package com.basic.security.fragment; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; import android.widget.RelativeLayout; 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.BusinessPersonManager; import com.basic.security.manager.impl.cblite.RuleManager; import com.basic.security.model.ModelAdapter; import com.basic.security.utils.DateUtil; import com.basic.security.utils.ToastUtil; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 业务表管理的人 */ @EFragment(R.layout.fragment_business_person) public class BusinessPersonFragment extends BaseFragment { @ViewById Spinner spinner, spinner_pass_model; @ViewById TextView tv_name, tv_pass_model_name, tv_identity_name, tv_business_table_name, tv_business_table_time; @ViewById EditText search_text; @ViewById ImageView icon_search; @ViewById GridView gv_all_face_list, gv_business_person; @ViewById Button btn_business_save, btn_business_delete; Map checkedIdentityMap = new HashMap<>(); private List personList = new ArrayList<>(); private List checkedPersonList = new ArrayList<>(); private int clickTemp = -1; private int checkedClickTemp = -1; private AllFaceGridViewAdapter allFaceGridViewAdapter; private CheckedGridViewAdapter checkedPersonAdapter; private ModelAdapter businessDocument; private String passModel = "有效时间内通行"; private List personIdList = new ArrayList<>(); @Click void btn_business_delete() { if (checkedPersonList.size() != 0 && checkedClickTemp != -1) { try { BusinessPersonManager.deleteBusinessPerson(checkedPersonList.get(checkedClickTemp).getId(), businessDocument.getId()); checkedPersonList.remove(checkedClickTemp); checkedPersonAdapter.notifyDataSetChanged(); ToastUtil.show("人员删除成功"); checkedClickTemp = -1; } catch (Exception e) { e.printStackTrace(); } } } @Click void btn_business_save() { // 保存单个人员的通行规则 if (checkedClickTemp != -1 && checkedPersonList.size() > checkedClickTemp) { BusinessPersonManager.savePersonToBusiness(checkedPersonList.get(checkedClickTemp).getId(), businessDocument.getId(), passModel); ToastUtil.show("保存成功"); } } @Click void icon_search() { // 根据条件在所有人中查询 String search_text = this.search_text.getText().toString().trim(); if (!TextUtils.isEmpty(search_text)) { personList = BusinessPersonManager.getPersonFromMessage(personList, search_text); allFaceGridViewAdapter.notifyDataSetChanged(); } } public void BusinessPersonData(ModelAdapter businessDocument) { this.businessDocument = businessDocument; } @Override public void show() { super.show(); // 上半部分所有人员 initIdentity(); initAllPersonGridView(); // 下半部分业务表中人员 initBusinessTitle(); initCheckedPersonGridView(); initPassModel(); } @Override public void hide() { super.hide(); checkedPersonList.clear(); clickTemp = -1; checkedClickTemp = -1; } private void initBusinessTitle() { if (businessDocument != null) { tv_business_table_name.setText(businessDocument.getString("business_name")); // 仅允许 if ("1".equals(businessDocument.getString("only_allow"))) { String start_time = DateUtil.formatTime(Long.parseLong(businessDocument.getString("only_allow_start")), "yyyy/MM/dd HH:mm"); String end_time = DateUtil.formatTime(Long.parseLong(businessDocument.getString("only_allow_end")), "yyyy/MM/dd HH:mm"); tv_business_table_time.setText(start_time + " — " + end_time); } else if ("1".equals(businessDocument.getString("choose_from_time_rule"))) { // 从时间规则中选取的时间段(暂没处理) tv_business_table_time.setText(businessDocument.getString("checkedTimeRule")); } else { tv_business_table_time.setText("————"); } } } private void initPassModel() { String[] arr = {"有效时间内通行", "确认通行"}; ArrayAdapter adapter = new ArrayAdapter(getContext(), R.layout.spinner_item, arr); // spinner_pass_model.setPopupBackgroundResource(R.color.press_menu_text); spinner_pass_model.setAdapter(adapter); spinner_pass_model.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { passModel = arr[position]; } @Override public void onNothingSelected(AdapterView parent) { } }); } private void initIdentity() { List ruleList = IdentityManager.findIdentityList(); SpinnerAdapter spinnerAdapter = new SpinnerAdapter(ruleList); spinner.setPopupBackgroundResource(R.color.press_menu_text); spinner.setAdapter(spinnerAdapter); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { // 根据选中的身份显示人( 获取含有特定身份的所有人员) personList = PersonManager.getPersonList("已注册"); if (position != 0) { checkedIdentityMap.clear(); checkedIdentityMap.put(ruleList.get(position - 1).getId(), ruleList.get(position - 1)); personList = PersonManager.getIdentityPersonList(personList, checkedIdentityMap); } setAllPersonAdapter(); } @Override public void onNothingSelected(AdapterView parent) { } }); } private void initAllPersonGridView() { personList = PersonManager.getPersonList("已注册"); allFaceGridViewAdapter = new AllFaceGridViewAdapter(); setAllPersonAdapter(); } private void setAllPersonAdapter() { gv_all_face_list.setAdapter(allFaceGridViewAdapter); gv_all_face_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { setDefaultOrSelectedPerson(position); personIdList.clear(); for (ModelAdapter person : checkedPersonList) { personIdList.add(person.getId()); } if (!personIdList.contains(personList.get(position).getId())) { checkedPersonList.add(personList.get(position)); savePersonToBusiness(personList.get(position)); checkedPersonAdapter.notifyDataSetChanged(); ToastUtil.show("人员添加成功"); } } }); } // 存储选中的人员 private void savePersonToBusiness(ModelAdapter personDocument) { passModel = "有效时间内通行"; BusinessPersonManager.savePersonToBusiness(personDocument.getId(), businessDocument.getId(), passModel); } private void initCheckedPersonGridView() { // 首先获取此业务表中的人员信息 checkedPersonList.clear(); if (businessDocument == null) { return; } checkedPersonList = BusinessPersonManager.getPersonFromBusiness(businessDocument.getId()); checkedPersonAdapter = new CheckedGridViewAdapter(); gv_business_person.setAdapter(checkedPersonAdapter); gv_business_person.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { if ("有效时间内通行".equals(BusinessPersonManager.getPersonInBusinessPassModel(businessDocument.getId(), checkedPersonList.get(position).getId()))) { spinner_pass_model.setSelection(0); } else { spinner_pass_model.setSelection(1); } checkedPersonAdapter.setSelection(position); checkedPersonAdapter.notifyDataSetChanged(); } }); } private void setDefaultOrSelectedPerson(int position) { allFaceGridViewAdapter.setSelection(position); allFaceGridViewAdapter.notifyDataSetChanged(); tv_name.setText(personList.get(position).getString("name")); tv_pass_model_name.setText(personList.get(position).getString("sign_up_rule")); // 通行方式 // 人员身份 StringBuffer sb = new StringBuffer(); Map checkedRuleMapByPerson = RuleManager.findRuleMapByPersonId(personList.get(position).getId()); for (ModelAdapter modelAdapterRule : checkedRuleMapByPerson.values()) { if (modelAdapterRule != null && !TextUtils.isEmpty(modelAdapterRule.getString("name"))) { sb.append(modelAdapterRule.getString("name") + ","); } } if (sb.length() == 0) { tv_identity_name.setText(""); } else { tv_identity_name.setText(sb.subSequence(0, sb.length() - 1)); } } private class SpinnerAdapter extends BaseAdapter { private List ruleListName = new ArrayList<>(); public SpinnerAdapter(List ruleList) { ruleListName.clear(); ruleListName.add("全部"); for (int i = 0; i < ruleList.size(); i++) { ruleListName.add(ruleList.get(i).getString("name")); } } @Override public int getCount() { // return ruleList == null ? 0 : ruleList.size(); return ruleListName == null ? 0 : ruleListName.size(); } @Override public Object getItem(int position) { // return ruleList.get(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.setFaceDetailUI(ruleList.get(position).getString("name")); viewHolder.identity_name.setText(ruleListName.get(position)); return convertView; } class ViewHolder { TextView identity_name; } } private class AllFaceGridViewAdapter extends BaseAdapter { public void setSelection(int position) { clickTemp = position; } @Override public int getCount() { return personList == null ? 0 : personList.size(); } @Override public Object getItem(int position) { return personList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder viewHolder; if (convertView == null) { //加载子布局 view = LayoutInflater.from(getContext()).inflate(R.layout.face_view, parent, false); viewHolder = new ViewHolder(); viewHolder.imageView = view.findViewById(R.id.face); viewHolder.imageView_checked = view.findViewById(R.id.face_checked); view.setTag(viewHolder); } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); } byte[] blob = personList.get(position).getBlob("camera_image_path"); Bitmap bitmap = null; if (blob != null) { try { byte[] data = blob; if (data.length != 0) { bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); } } catch (Exception e) { e.printStackTrace(); bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } } else { bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } viewHolder.imageView.setImageBitmap(bitmap); if (clickTemp == position) { viewHolder.imageView_checked.setVisibility(View.VISIBLE); } else { viewHolder.imageView_checked.setVisibility(View.GONE); } return view; } class ViewHolder { ImageView imageView; RelativeLayout imageView_checked; } } private class CheckedGridViewAdapter extends BaseAdapter { public void setSelection(int position) { checkedClickTemp = position; } @Override public int getCount() { return checkedPersonList == null ? 0 : checkedPersonList.size(); } @Override public Object getItem(int position) { return checkedPersonList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder viewHolder; if (convertView == null) { //加载子布局 view = LayoutInflater.from(getContext()).inflate(R.layout.face_view, parent, false); viewHolder = new ViewHolder(); viewHolder.imageView = view.findViewById(R.id.face); viewHolder.imageView_checked = view.findViewById(R.id.face_checked); view.setTag(viewHolder); } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); } try { byte[] data = null; ModelAdapter checkedPerson = checkedPersonList.get(position); if (checkedPerson != null) { data = checkedPerson.getBlob("camera_image_path"); } Bitmap bitmap = null; if (data != null) { try { if (data.length != 0) { bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); } } catch (Exception e) { e.printStackTrace(); bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } } else { bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } viewHolder.imageView.setImageBitmap(bitmap); if (checkedClickTemp == position) { viewHolder.imageView_checked.setVisibility(View.VISIBLE); } else { viewHolder.imageView_checked.setVisibility(View.GONE); } } catch (Exception e) { e.printStackTrace(); } return view; } class ViewHolder { ImageView imageView; RelativeLayout imageView_checked; } } }