package com.basic.security.manager;
|
|
import android.text.TextUtils;
|
|
import com.basic.security.model.ModelAdapter;
|
import com.basic.security.utils.DateUtil;
|
|
import org.json.JSONArray;
|
import org.json.JSONObject;
|
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
public class TimeRuleManager extends BaseManager {
|
public static boolean timeRuleIsValid(String timeRuleId) {
|
/**
|
* [{"isChecked":"0","timeOrder":"时间1","validTime":"2018\/12\/14 00:00-2018\/12\/14 23:59","station":"允许通行"},
|
* [{"isChecked":"0","week":"星期一","startTime":"12:30:40","endTime":"12:30:44","weekTag":"1"},
|
* {"isChecked":"0","week":"星期二","startTime":"","endTime":"","weekTag":"1"},
|
*/
|
List<Long> datePassStartTimeList = new ArrayList<>();
|
List<Long> datePassEndTimeList = new ArrayList<>();
|
List<Long> dateRefuseStartTimeList = new ArrayList<>();
|
List<Long> dateRefuseEndTimeList = new ArrayList<>();
|
long currentTimeMillis = System.currentTimeMillis();
|
ModelAdapter timeRule = findById("time", timeRuleId);
|
if (timeRule == null) {
|
return false;
|
}
|
// 此业务表是否启用
|
if (!"1".equals(timeRule.getString("is_use"))) {
|
return false;
|
}
|
// 判断日期的逻辑
|
try {
|
JSONArray jsonArray = new JSONArray(timeRule.getString("date_json").replace("`", "\""));
|
for (int i = 0; i < jsonArray.length(); i++) {
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
if ("1".equals(jsonObject.getString("isChecked"))) { // 是否选中规则中的这条数据
|
String[] validTimes = jsonObject.getString("validTime").split("-");
|
if ("允许通行".equals(jsonObject.getString("station"))) {
|
datePassStartTimeList.add(DateUtil.getDefaultTimeStamp(validTimes[0].trim()));
|
datePassEndTimeList.add(DateUtil.getDefaultTimeStamp(validTimes[1].trim()));
|
} else {
|
dateRefuseStartTimeList.add(DateUtil.getDefaultTimeStamp(validTimes[0].trim()));
|
dateRefuseEndTimeList.add(DateUtil.getDefaultTimeStamp(validTimes[1].trim()));
|
}
|
}
|
}
|
for (int i = 0; i < dateRefuseStartTimeList.size(); i++) { // 判断禁止通行
|
if (currentTimeMillis > dateRefuseStartTimeList.get(i) && currentTimeMillis < dateRefuseEndTimeList.get(i)) {
|
return false;
|
}
|
}
|
for (int i = 0; i < datePassStartTimeList.size(); i++) { // 判断允许通行
|
if (currentTimeMillis > datePassStartTimeList.get(i) && currentTimeMillis < datePassEndTimeList.get(i)) {
|
return true;
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
// 判断周的逻辑
|
String yearMouthDay = DateUtil.formatTime(currentTimeMillis, "yyyy/MM/dd");
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
Date date = new Date();
|
SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");
|
String weekDay = dateFm.format(date); // 周几
|
try {
|
JSONArray jsonArray = new JSONArray(timeRule.getString("week_json").replace("`", "\""));
|
for (int i = 0; i < jsonArray.length(); i++) {
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
if ("1".equals(jsonObject.getString("isChecked"))
|
&& weekDay.equals(jsonObject.getString("week"))
|
&& !TextUtils.isEmpty(jsonObject.getString("startTime"))
|
&& !TextUtils.isEmpty(jsonObject.getString("endTime"))) {
|
String startTime = yearMouthDay + " " + jsonObject.getString("startTime");
|
String endTime = yearMouthDay + " " + jsonObject.getString("endTime");
|
long startTimeLong = dateFormat.parse(startTime).getTime();
|
long endTimeLong = dateFormat.parse(endTime).getTime();
|
if (currentTimeMillis > startTimeLong && currentTimeMillis < endTimeLong) {
|
return true;
|
}
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return false;
|
}
|
|
// 有提前时间的有效规则
|
public static boolean timeRuleIsValid(String timeRuleId, long advance_time) {
|
/**
|
* [{"isChecked":"0","timeOrder":"时间1","validTime":"2018\/12\/14 00:00-2018\/12\/14 23:59","station":"允许通行"},
|
* [{"isChecked":"0","week":"星期一","startTime":"12:30:40","endTime":"12:30:44","weekTag":"1"},
|
* {"isChecked":"0","week":"星期二","startTime":"","endTime":"","weekTag":"1"},
|
*/
|
List<Long> datePassStartTimeList = new ArrayList<>();
|
List<Long> datePassEndTimeList = new ArrayList<>();
|
List<Long> dateRefuseStartTimeList = new ArrayList<>();
|
List<Long> dateRefuseEndTimeList = new ArrayList<>();
|
long currentTimeMillis = System.currentTimeMillis();
|
ModelAdapter timeRule = findById("time", timeRuleId);
|
if (timeRule == null) {
|
return false;
|
}
|
// 此业务表是否启用
|
if (!"1".equals(timeRule.getString("is_use"))) {
|
return false;
|
}
|
// 判断日期的逻辑
|
try {
|
JSONArray jsonArray = new JSONArray(timeRule.getString("date_json").replace("`", "\""));
|
for (int i = 0; i < jsonArray.length(); i++) {
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
if ("1".equals(jsonObject.getString("isChecked"))) { // 是否选中规则中的这条数据
|
String[] validTimes = jsonObject.getString("validTime").split("-");
|
if ("允许通行".equals(jsonObject.getString("station"))) {
|
datePassStartTimeList.add(DateUtil.getDefaultTimeStamp(validTimes[0].trim()));
|
datePassEndTimeList.add(DateUtil.getDefaultTimeStamp(validTimes[1].trim()));
|
} else {
|
dateRefuseStartTimeList.add(DateUtil.getDefaultTimeStamp(validTimes[0].trim()));
|
dateRefuseEndTimeList.add(DateUtil.getDefaultTimeStamp(validTimes[1].trim()));
|
}
|
}
|
}
|
for (int i = 0; i < dateRefuseStartTimeList.size(); i++) { // 判断禁止通行
|
if (currentTimeMillis > dateRefuseStartTimeList.get(i) && currentTimeMillis < dateRefuseEndTimeList.get(i)) {
|
return false;
|
}
|
}
|
for (int i = 0; i < datePassStartTimeList.size(); i++) { // 判断允许通行
|
if (currentTimeMillis + advance_time > datePassStartTimeList.get(i) && currentTimeMillis < datePassEndTimeList.get(i)) {
|
return true;
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
// 判断周的逻辑
|
String yearMouthDay = DateUtil.formatTime(currentTimeMillis, "yyyy/MM/dd");
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
Date date = new Date();
|
SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");
|
String weekDay = dateFm.format(date); // 周几
|
try {
|
JSONArray jsonArray = new JSONArray(timeRule.getString("week_json").replace("`", "\""));
|
for (int i = 0; i < jsonArray.length(); i++) {
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
if ("1".equals(jsonObject.getString("isChecked"))
|
&& weekDay.equals(jsonObject.getString("week"))
|
&& !TextUtils.isEmpty(jsonObject.getString("startTime"))
|
&& !TextUtils.isEmpty(jsonObject.getString("endTime"))) {
|
String startTime = yearMouthDay + " " + jsonObject.getString("startTime");
|
String endTime = yearMouthDay + " " + jsonObject.getString("endTime");
|
long startTimeLong = dateFormat.parse(startTime).getTime();
|
long endTimeLong = dateFormat.parse(endTime).getTime();
|
if (currentTimeMillis + advance_time > startTimeLong && currentTimeMillis < endTimeLong) {
|
return true;
|
}
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return false;
|
}
|
|
public static void saveTimeRule(ModelAdapter modelAdapter) {
|
BaseManager.save(modelAdapter);
|
}
|
}
|