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 datePassStartTimeList = new ArrayList<>(); List datePassEndTimeList = new ArrayList<>(); List dateRefuseStartTimeList = new ArrayList<>(); List 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 datePassStartTimeList = new ArrayList<>(); List datePassEndTimeList = new ArrayList<>(); List dateRefuseStartTimeList = new ArrayList<>(); List 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); } }