package com.basic.security.manager.impl.sqlite; import android.text.TextUtils; import com.basic.security.manager.PersonIdentityManager; import com.basic.security.model.ModelAdapter; import com.basic.security.utils.DateUtil; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; public class SlRuleManager extends SlBaseManager { public static void deleteRule(ModelAdapter modelAdapter) { try { // Expression expression = Expression.property("table").equalTo(Expression.string("person_identity")) // .and(Expression.property("identity_id").equalTo(Expression.string(modelAdapter.getId()))); List personRule = findList("select * from person_identity where identity_id='" + modelAdapter.getId() + "'"); for (ModelAdapter d : personRule) { delete(d); } delete(modelAdapter); } catch (Exception e) { e.printStackTrace(); } } public static List getRuleList() { // Expression expression = Expression.property("table").equalTo(Expression.string("identity")); return findList("select * from identity"); } public static List findAllRule() { // Expression expression = Expression.property("table").equalTo(Expression.string("identity")); return findList("select * from identity"); } public static Map findRuleMapByPersonId(String personId) { Map ruleMap = new HashMap(); List personPersonIdentity = PersonIdentityManager.findPersonIdentityListByPersonId(personId); for (ModelAdapter personIdentity : personPersonIdentity) { String ruleId = personIdentity.getString("identity_id"); ruleMap.put(ruleId, findById("identity", ruleId)); } return ruleMap; } public static List getValidBusinessRuleList(String personId, Collection ruleList) { List validRuleList = new ArrayList<>(); class CheckRulesHelper { private boolean processSuccess = false; public boolean execute() { checkEveryRuleInRules(); return processSuccess; } private void checkEveryRuleInRules() { for (ModelAdapter rule : ruleList) { if (ruleValidInThisDevice(rule)) { //时间允许 boolean timePass = checkVisitTime(rule); if (!timePass) { continue; } boolean countPass = checkVisitCount(rule); //次数允许 if (countPass) { validRuleList.add(rule); } } } } private boolean ruleValidInThisDevice(ModelAdapter rule) { if ("0".equals(rule.getString("apply_type"))) { // Log.e("ruleValidInThisDevice", "全部设备"); return true; } else { String validDeviceIds = rule.getString("apply_device_ids"); String deviceId = SlDeviceManager.getDeviceId(); if (TextUtils.isEmpty(validDeviceIds)) { return false; } else { return validDeviceIds.contains(deviceId); } } } private boolean checkVisitTime(ModelAdapter rule) { boolean timePass = false; //验证是否在允许时间范围内 limit_time 1就是限制,0不限制 if (!"0".equals(rule.getString("limit_time"))) { String begin_time = rule.getString("begin_time"); String end_time = rule.getString("end_time"); long start_time = Long.parseLong(begin_time); long finish_time = Long.parseLong(end_time); long current_time = System.currentTimeMillis(); if (current_time > start_time && current_time < finish_time) { timePass = true; } } else { timePass = true; } return timePass; } private boolean checkVisitCount(ModelAdapter rule) { boolean countPass = false; if (!"0".equals(rule.getString("limit_count"))) { int days = Integer.parseInt(rule.getString("per_days")); int times = Integer.parseInt(rule.getString("per_count")); List visitRecordList = SlVisitManager.getPersonVisitPassRecords(personId, true); // List list = new ArrayList<>(); // for (ModelAdapter d : visitRecordList) { // UserData data = new UserData(); // data.name = d.getString("name"); // data.result = d.getString("verify_result"); // data.visit_time = DateUtil.formatTime(Long.parseLong(d.getString("visit_time")), "yyyy/MM/dd HH:mm:ss"); // data.visit_time_stamp = d.getString("visit_time"); // list.add(data); // } if (visitRecordList.size() >= times) { //假设能通过5次 检索的列表是时间降序的 所以取第5个 即0,1,2,3,4 即list.get(4) 然后对比时间 //如果第5条访问记录的访问时间在search_begin_time之前 即time < search_begin_time 即可通过 否则不允许通过 ModelAdapter visitRecord = visitRecordList.get(times - 1); long visit_time = Long.parseLong(visitRecord.getString("visit_time")); long time_stamp = (long) days * 24 * 3600 * 1000; long time_today_night = DateUtil.getTimesNight(); long search_begin_time = time_today_night - time_stamp; if (visit_time < search_begin_time) { countPass = true; } } else { countPass = true; } } else { countPass = true; } return countPass; } } new CheckRulesHelper().execute(); return validRuleList; } public static List getValidBusinessRuleListButTimeNotReach(String personId, Collection ruleList) { List validRuleListButTimeNotReach = new ArrayList<>(); class CheckRulesHelper { private boolean processSuccess = false; public boolean execute() { checkEveryRuleInRules(); return processSuccess; } private void checkEveryRuleInRules() { for (ModelAdapter rule : ruleList) { if (ruleValidInThisDevice(rule)) { //时间不允许 boolean timeNotReachPass = checkVisitTime(rule); if (timeNotReachPass) { validRuleListButTimeNotReach.add(rule); } } } } private boolean ruleValidInThisDevice(ModelAdapter rule) { if ("0".equals(rule.getString("apply_type"))) { // Log.e("ruleValidInThisDevice", "全部设备"); return true; } else { String validDeviceIds = rule.getString("apply_device_ids"); String deviceId = SlDeviceManager.getDeviceId(); if (TextUtils.isEmpty(validDeviceIds)) { return false; } else { return validDeviceIds.contains(deviceId); } } } private boolean checkVisitTime(ModelAdapter rule) { boolean timeNotReachPass = false; //验证是否在允许时间范围内 limit_time 1就是限制,0不限制 if (!"0".equals(rule.getString("limit_time"))) { String begin_time = rule.getString("begin_time"); String end_time = rule.getString("end_time"); long start_time = Long.parseLong(begin_time); long finish_time = Long.parseLong(end_time); long current_time = System.currentTimeMillis(); if (current_time < start_time) { timeNotReachPass = true; } } else { timeNotReachPass = false; } return timeNotReachPass; } } new CheckRulesHelper().execute(); return validRuleListButTimeNotReach; } public static List getValidSignUpRuleList() { return new ArrayList(); } public static List getValidDeviceRuleList() { return new ArrayList(); } }