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<ModelAdapter> 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<ModelAdapter> getRuleList() {
|
// Expression expression = Expression.property("table").equalTo(Expression.string("identity"));
|
return findList("select * from identity");
|
}
|
|
public static List<ModelAdapter> findAllRule() {
|
// Expression expression = Expression.property("table").equalTo(Expression.string("identity"));
|
return findList("select * from identity");
|
}
|
|
public static Map<String, ModelAdapter> findRuleMapByPersonId(String personId) {
|
Map<String, ModelAdapter> ruleMap = new HashMap();
|
List<ModelAdapter> 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<ModelAdapter> getValidBusinessRuleList(String personId, Collection<ModelAdapter> ruleList) {
|
List<ModelAdapter> 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<ModelAdapter> visitRecordList = SlVisitManager.getPersonVisitPassRecords(personId, true);
|
|
// List<UserData> 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<ModelAdapter> getValidBusinessRuleListButTimeNotReach(String personId, Collection<ModelAdapter> ruleList) {
|
List<ModelAdapter> 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<ModelAdapter> getValidSignUpRuleList() {
|
return new ArrayList();
|
}
|
|
public static List<ModelAdapter> getValidDeviceRuleList() {
|
return new ArrayList();
|
}
|
|
|
}
|