| ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/constant/CamPriority.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java | ●●●●● patch | view | raw | blame | history | |
| ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java | ●●●●● patch | view | raw | blame | history |
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/domain/GuidePriorityQueue.java
@@ -1,9 +1,12 @@ package com.ruoyi.alarm.globalAlarm.domain; import lombok.extern.slf4j.Slf4j; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; import java.util.concurrent.PriorityBlockingQueue; /** * @Description: 引导优先级队列 @@ -12,11 +15,12 @@ * @Date: 2023年06月29日11:18 * @Version: 1.0 **/ @Slf4j public class GuidePriorityQueue { /** * 相机队列,每个相机一个优先级队列 */ public static Map<String, PriorityQueue<GuideTask>> cameraQueueMap = new HashMap<>(); public static Map<String, PriorityBlockingQueue<GuideTask>> cameraQueueMap = new HashMap<>(); /** * 创建一个自定义的比较器,根据优先级属性进行比较 @@ -29,4 +33,15 @@ return Comparator; } /** * 测试使用:打印队列 */ public static void printPriorityQueue() { for (String cameraId : GuidePriorityQueue.cameraQueueMap.keySet()) { PriorityBlockingQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId); for (GuideTask task : priorityQueue) { log.info("alarmId:" + task.getAlarmId() + " alarmTime:" + task.getAlarmTime() + " priority:" + task.getPriority() + " num:" + task.getNum() + " cameraId:" + task.getCameraId()); } } } } ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -43,6 +43,7 @@ import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.PriorityBlockingQueue; import java.util.stream.Collectors; @@ -56,6 +57,7 @@ @Service @Slf4j(topic = "mqtt") public class GlobalAlarmServiceImpl implements IGlobalAlarmService { //region 依赖注入 @Resource private ArdAlarmRadarMapper ardAlarmRadarMapper; @Resource @@ -78,6 +80,36 @@ private IHikClientService hikClientService; @Resource private RedisCache redisCache; @Resource private QueueManager queueManager; //endregion /** * @描述 查询所有报警的当前数量 * @参数 [] * @返回值 java.util.Map<java.lang.String, java.lang.Integer> * @创建人 刘苏义 * @创建时间 2023/6/13 16:30 * @修改人和其它信息 */ @Override public Map<String, Object> selectAlarmLogsCount() { Map<String, Object> map = new HashMap<>(); Map<String, Integer> countMap = new HashMap<>(); String refreshTime = configService.selectConfigByKey("refreshTime"); int count1001 = ardAlarmStealelecMapper.selectCountByStartTime(refreshTime); countMap.put("1001", count1001); int count1002 = ardAlarmCameraMapper.selectCountByAlarmTime(refreshTime); countMap.put("1002", count1002); int count1003 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "运动目标检测"); countMap.put("1003", count1003); int count1004 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "热源检测"); countMap.put("1004", count1004); int count1014 = ardAlarmTubeMapper.selectCountByAlarmTime(refreshTime); countMap.put("1014", count1014); map.put("20000", countMap); return map; } /** * @描述 按条件查询报警 @@ -174,6 +206,61 @@ } /** * @描述 历史报警查询 * @参数 [command, beginTime, endTime, pageNum, pageSize] * @返回值 java.lang.Object * @创建人 刘苏义 * @创建时间 2023/6/28 13:30 * @修改人和其它信息 */ @Override public Object selectAlarmList(Integer command, String beginTime, String endTime, Integer pageNum, Integer pageSize) { Map<String, Object> params = new HashMap<>(); params.put("beginTime", beginTime); params.put("endTime", endTime); switch (command) { case 1001: ArdAlarmStealelec aas = new ArdAlarmStealelec(); aas.setParams(params); aas.setPageNum(pageNum); aas.setPageSize(pageSize); List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas); return ardAlarmStealelecs; case 1002: ArdAlarmCamera aac = new ArdAlarmCamera(); aac.setParams(params); aac.setPageNum(pageNum); aac.setPageSize(pageSize); List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectArdAlarmCameraList(aac); return ardAlarmCameras; case 1003: ArdAlarmRadar aar = new ArdAlarmRadar(); aar.setParams(params); aar.setPageNum(pageNum); aar.setPageSize(pageSize); aar.setAlarmType("运动目标检测"); List<ArdAlarmRadar> ardAlarmRadar = ardAlarmRadarMapper.selectArdAlarmRadarList(aar); return ardAlarmRadar; case 1004: ArdAlarmRadar aarr = new ArdAlarmRadar(); aarr.setParams(params); aarr.setPageNum(pageNum); aarr.setPageSize(pageSize); aarr.setAlarmType("热源检测"); List<ArdAlarmRadar> ardAlarmRadarr = ardAlarmRadarMapper.selectArdAlarmRadarList(aarr); return ardAlarmRadarr; case 1014: ArdAlarmTube aat = new ArdAlarmTube(); aat.setParams(params); aat.setPageNum(pageNum); aat.setPageSize(pageSize); List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectArdAlarmTubeList(aat); return ardAlarmTubes; } return null; } /** * @描述 按条件更新查看时间 * @参数 [condition] * @返回值 java.lang.Object @@ -215,21 +302,19 @@ * @修改人和其它信息 */ @Override // @Async("alarmExecutor") @Async("alarmExecutor") public void receiveAlarm(String topic, String message) { try { switch (topic) { case "stealelec": //region 处理盗电报警 ArdAlarmStealelec ardAlarmStealelec = JSONObject.parseObject(message, ArdAlarmStealelec.class); ArdAlarmStealelec existe = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId()); if (StringUtils.isNotNull(existe)) { return; } int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec); if (aas > 0) { log.info("stealelec入库成功:" + ardAlarmStealelec); ArdAlarmStealelec isExiste = ardAlarmStealelecMapper.selectByPrimaryKey(ardAlarmStealelec.getId()); if (StringUtils.isNull(isExiste)) { int aas = ardAlarmStealelecMapper.insertArdAlarmStealelec(ardAlarmStealelec); if (aas > 0) { log.info("stealelec入库成功:" + ardAlarmStealelec); } } //endregion break; @@ -258,8 +343,8 @@ if (aat > 0) { log.debug("tube入库成功:" + ardAlarmTube); String nearbyCamera = getNearbyCamera(new double[]{ardAlarmTube.getLongitude(), ardAlarmTube.getLatitude()}); if(StringUtils.isNotEmpty(nearbyCamera)) { addTaskQueue(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1); if (StringUtils.isNotEmpty(nearbyCamera)) { messagesEnqueued(nearbyCamera, ardAlarmTube.getId(), "sys_tube_leak", ardAlarmTube.getAlarmTime(), 1); } } //endregion @@ -273,8 +358,8 @@ if (aac > 0) { log.debug("camera入库成功:" + ardAlarmCamera); String nearbyCamera = getNearbyCamera(new double[]{ardAlarmCamera.getLongitude(), ardAlarmCamera.getLatitude()}); if(StringUtils.isNotEmpty(nearbyCamera)) { addTaskQueue(nearbyCamera, ardAlarmCamera.getId(), "sys_camera", ardAlarmCamera.getAlarmTime(), 1); if (StringUtils.isNotEmpty(nearbyCamera)) { messagesEnqueued(nearbyCamera, ardAlarmCamera.getId(), "sys_camera", ardAlarmCamera.getAlarmTime(), 1); } //引导录像 // CameraCmd cmd = new CameraCmd(); @@ -325,7 +410,7 @@ String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId()); if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) { //入队列待引导 addTaskQueue(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1); messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), 1); } } else { //5分钟内有引导 @@ -341,7 +426,7 @@ String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId()); if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) { //如果雷达塔上有光电 addTaskQueue(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count); messagesEnqueued(cameraIdWithTower, uuid, alarmType, ardAlarmRadar.getAlarmTime(), count); } } else { //未引导未超过3次,直接入库 @@ -361,21 +446,20 @@ // } } printPriorityQueue(); //endregion break; } printPriorityQueue(); GuidePriorityQueue.printPriorityQueue();//打印队列 } catch (Exception ex) { log.error("接收报警异常:" + ex.getMessage()); } } /** * 引导任务入队方法 */ private void addTaskQueue(String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num) { /** * 消息入队 */ private void messagesEnqueued (String cameraId, String alarmId, String alarmType, Date alarmTime, Integer num) { GuideTask guideTask = new GuideTask(); guideTask.setCameraId(cameraId); guideTask.setAlarmId(alarmId); @@ -384,23 +468,9 @@ Integer priority = CamPriority.priorityMap.get(alarmType); guideTask.setPriority(priority); guideTask.setNum(num); PriorityQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId()); priorityQueue.add(guideTask); } /** * 打印队列 */ private void printPriorityQueue() { for (String cameraId : GuidePriorityQueue.cameraQueueMap.keySet()) { log.info("cameraId" + cameraId); PriorityQueue<GuideTask> priorityQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId); for (GuideTask task : priorityQueue) { log.info("alarmId:" + task.getAlarmId() + " alarmTime:" + task.getAlarmTime() + " priority:" + task.getPriority() + " num:" + task.getNum() + " cameraId:" + task.getCameraId()); } } queueManager.addTaskToQueue(cameraId,guideTask); // PriorityBlockingQueue<GuideTask> priorityBlockingQueue = GuidePriorityQueue.cameraQueueMap.get(guideTask.getCameraId()); // priorityBlockingQueue.add(guideTask); } /** @@ -475,7 +545,7 @@ * @创建时间 2023/6/28 16:33 * @修改人和其它信息 */ public String alarmToRecord(CameraCmd cmd) { private String alarmToRecord(CameraCmd cmd) { String url = ""; try { log.debug("引导成功,尝试录像"); @@ -497,88 +567,6 @@ log.error("录像异常:" + ex.getMessage()); } return url; } /** * @描述 查询所有报警的当前数量 * @参数 [] * @返回值 java.util.Map<java.lang.String, java.lang.Integer> * @创建人 刘苏义 * @创建时间 2023/6/13 16:30 * @修改人和其它信息 */ @Override public Map<String, Object> selectAlarmLogsCount() { Map<String, Object> map = new HashMap<>(); Map<String, Integer> countMap = new HashMap<>(); String refreshTime = configService.selectConfigByKey("refreshTime"); int count1001 = ardAlarmStealelecMapper.selectCountByStartTime(refreshTime); countMap.put("1001", count1001); int count1002 = ardAlarmCameraMapper.selectCountByAlarmTime(refreshTime); countMap.put("1002", count1002); int count1003 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "运动目标检测"); countMap.put("1003", count1003); int count1004 = ardAlarmRadarMapper.selectCountByAlarmTime(refreshTime, "热源检测"); countMap.put("1004", count1004); int count1014 = ardAlarmTubeMapper.selectCountByAlarmTime(refreshTime); countMap.put("1014", count1014); map.put("20000", countMap); return map; } /** * @描述 历史报警查询 * @参数 [command, beginTime, endTime, pageNum, pageSize] * @返回值 java.lang.Object * @创建人 刘苏义 * @创建时间 2023/6/28 13:30 * @修改人和其它信息 */ @Override public Object selectAlarmList(Integer command, String beginTime, String endTime, Integer pageNum, Integer pageSize) { Map<String, Object> params = new HashMap<>(); params.put("beginTime", beginTime); params.put("endTime", endTime); switch (command) { case 1001: ArdAlarmStealelec aas = new ArdAlarmStealelec(); aas.setParams(params); aas.setPageNum(pageNum); aas.setPageSize(pageSize); List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas); return ardAlarmStealelecs; case 1002: ArdAlarmCamera aac = new ArdAlarmCamera(); aac.setParams(params); aac.setPageNum(pageNum); aac.setPageSize(pageSize); List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectArdAlarmCameraList(aac); return ardAlarmCameras; case 1003: ArdAlarmRadar aar = new ArdAlarmRadar(); aar.setParams(params); aar.setPageNum(pageNum); aar.setPageSize(pageSize); aar.setAlarmType("运动目标检测"); List<ArdAlarmRadar> ardAlarmRadar = ardAlarmRadarMapper.selectArdAlarmRadarList(aar); return ardAlarmRadar; case 1004: ArdAlarmRadar aarr = new ArdAlarmRadar(); aarr.setParams(params); aarr.setPageNum(pageNum); aarr.setPageSize(pageSize); aarr.setAlarmType("热源检测"); List<ArdAlarmRadar> ardAlarmRadarr = ardAlarmRadarMapper.selectArdAlarmRadarList(aarr); return ardAlarmRadarr; case 1014: ArdAlarmTube aat = new ArdAlarmTube(); aat.setParams(params); aat.setPageNum(pageNum); aat.setPageSize(pageSize); List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectArdAlarmTubeList(aat); return ardAlarmTubes; } return null; } } ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueManager.java
New file @@ -0,0 +1,86 @@ package com.ruoyi.alarm.globalAlarm.service.impl; import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue; import com.ruoyi.alarm.globalAlarm.domain.GuideTask; import org.apache.tomcat.util.threads.TaskThread; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.PriorityBlockingQueue; /** * @ClassName QueueManager * @Description: * @Author 刘苏义 * @Date 2023/6/29 21:09 * @Version 1.0 */ @Component public class QueueManager { @Autowired private QueueTaskExecutor taskExecutor; private Map<String, TaskThread> threadMap = new ConcurrentHashMap<>(); private static class TaskThread { private Thread thread; private GuideTask currentTask; public TaskThread(Thread thread, GuideTask currentTask) { this.thread = thread; this.currentTask = currentTask; } public Thread getThread() { return thread; } public GuideTask getCurrentTask() { return currentTask; } public void setCurrentTask(GuideTask task) { this.currentTask = task; } } public void addTaskToQueue(String queueName, GuideTask task) { PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(queueName); guideTaskQueue.add(task); TaskThread currentTaskThread = threadMap.get(queueName); if (currentTaskThread != null && task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) { currentTaskThread.getThread().interrupt(); } // Start a new thread if no thread is currently running for the queue if (currentTaskThread == null || !currentTaskThread.getThread().isAlive()) { Thread newThread = createThread(queueName, guideTaskQueue); threadMap.put(queueName, new TaskThread(newThread, task)); newThread.start(); } } private Thread createThread(String queueName, PriorityBlockingQueue<GuideTask> queue) { return new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { try { GuideTask task = queue.take(); taskExecutor.processTask(task); GuidePriorityQueue.printPriorityQueue(); // Update the current task for the thread TaskThread currentTaskThread = threadMap.get(queueName); if (currentTaskThread != null) { currentTaskThread.setCurrentTask(task); } } catch (InterruptedException e) { // Thread interrupted, exit the loop Thread.currentThread().interrupt(); } } }, queueName); } } ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.alarm.globalAlarm.service.impl; /** * @ClassName QueueTaskExecutor * @Description: * @Author 刘苏义 * @Date 2023/6/29 21:10 * @Version 1.0 */ import com.ruoyi.alarm.globalAlarm.domain.GuideTask; import org.springframework.stereotype.Component; @Component public class QueueTaskExecutor { public void processTask(GuideTask guideTask) { System.out.println("Executing task: " + guideTask.getAlarmId()); try { Thread.sleep(30000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("finished task: " + guideTask.getAlarmId()); } } ard-work/src/main/java/com/ruoyi/constant/CamPriority.java
@@ -1,7 +1,12 @@ package com.ruoyi.constant; import com.ruoyi.alarm.globalAlarm.domain.GuidePriorityQueue; import com.ruoyi.alarm.globalAlarm.domain.GuideTask; import lombok.extern.slf4j.Slf4j; import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; /** * @Description: 相机控制优先级 @@ -10,15 +15,18 @@ * @Date: 2023年05月23日11:25 * @Version: 1.0 **/ @Slf4j public class CamPriority { public static Map<String,Integer> priorityMap=new HashMap<>(); public static Map<String, Integer> priorityMap = new HashMap<>(); static { priorityMap.put("sys_radar_fire",999);//雷达防火报警 priorityMap.put("sys_radar_move",999);//雷达移动报警 priorityMap.put("sys_tube_leak",998);//管线泄露报警 priorityMap.put("sys_camera",997);//通用光电报警 priorityMap.put("sys_steal_elec",996);//盗电报警 priorityMap.put("sys_patrol_inspect",1);//巡检 priorityMap.put("sys_radar_fire", 999);//雷达防火报警 priorityMap.put("sys_radar_move", 999);//雷达移动报警 priorityMap.put("sys_tube_leak", 998);//管线泄露报警 priorityMap.put("sys_camera", 997);//通用光电报警 priorityMap.put("sys_steal_elec", 996);//盗电报警 priorityMap.put("sys_patrol_inspect", 1);//巡检 } } ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
@@ -13,6 +13,7 @@ import javax.annotation.Resource; import java.util.Comparator; import java.util.PriorityQueue; import java.util.concurrent.PriorityBlockingQueue; /** * @Description: 异步登录回调 @@ -25,6 +26,7 @@ public class LoginResultCallBack implements HCNetSDK.FLoginResultCallBack { private ArdCameras camera; public LoginResultCallBack(ArdCameras camera) { this.camera = camera; } @@ -41,8 +43,8 @@ camera.setChannel((int) lpDeviceinfo.byChanNum); //创建引导队列 Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator(); PriorityQueue<GuideTask> priorityQueue=new PriorityQueue<>(comparator); GuidePriorityQueue.cameraQueueMap.put(camera.getId(),priorityQueue); PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000,comparator); GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue); } else { log.info(camera.getIp() + ":" + camera.getPort() + "登录失败"); camera.setChannel(0); ard-work/src/main/java/com/ruoyi/utils/tube/TubeTools.java
@@ -53,12 +53,10 @@ } /** * @描述 计算坐标 * @参数 [ardTubesDetails, alarmPointDistance] * @返回值 void * @创建人 刘苏义 * @创建时间 2023/6/8 14:38 * @修改人和其它信息 * 计算坐标 * * 刘苏义 * 2023/6/8 14:38 */ public static GeoPoint CalculateCoordinates(List<ArdTubesDetails> ardTubesDetails, Integer alarmPointDistance) { try { ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
@@ -9,15 +9,15 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Date; import org.apache.commons.lang3.time.DateFormatUtils; /** * 时间工具类 * * * @author ruoyi */ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public static String YYYY = "yyyy"; public static String YYYY_MM = "yyyy-MM"; @@ -31,65 +31,54 @@ public static String HH_MM_SS = "HH:mm:ss"; private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; /** * 获取当前Date型日期 * * * @return Date() 当前日期 */ public static Date getNowDate() { public static Date getNowDate() { return new Date(); } /** * 获取当前日期, 默认格式为yyyy-MM-dd * * * @return String */ public static String getDate() { public static String getDate() { return dateTimeNow(YYYY_MM_DD); } public static final String getTime() { public static final String getTime() { return dateTimeNow(YYYY_MM_DD_HH_MM_SS); } public static final String dateTimeNow() { public static final String dateTimeNow() { return dateTimeNow(YYYYMMDDHHMMSS); } public static final String dateTimeNowMS() { return dateTimeNow(YYYY_MM_DD_HH_MM_SS_MS); } public static final String dateTimeNow(final String format) { public static final String dateTimeNow(final String format) { return parseDateToStr(format, new Date()); } public static final String dateTime(final Date date) { public static final String dateTime(final Date date) { return parseDateToStr(YYYY_MM_DD, date); } public static final String parseDateToStr(final String format, final Date date) { public static final String parseDateToStr(final String format, final Date date) { return new SimpleDateFormat(format).format(date); } public static final Date dateTime(final String format, final String ts) { try { public static final Date dateTime(final String format, final String ts) { try { return new SimpleDateFormat(format).parse(ts); } catch (ParseException e) { } catch (ParseException e) { throw new RuntimeException(e); } } @@ -97,8 +86,7 @@ /** * 日期路径 即年/月/日 如2018/08/08 */ public static final String datePath() { public static final String datePath() { Date now = new Date(); return DateFormatUtils.format(now, "yyyy/MM/dd"); } @@ -106,8 +94,7 @@ /** * 日期路径 即年/月/日 如20180808 */ public static final String dateTime() { public static final String dateTime() { Date now = new Date(); return DateFormatUtils.format(now, "yyyyMMdd"); } @@ -115,18 +102,13 @@ /** * 日期型字符串转化为日期 格式 */ public static Date parseDate(Object str) { if (str == null) { public static Date parseDate(Object str) { if (str == null) { return null; } try { try { return parseDate(str.toString(), parsePatterns); } catch (ParseException e) { } catch (ParseException e) { return null; } } @@ -134,8 +116,7 @@ /** * 获取服务器启动时间 */ public static Date getServerStartDate() { public static Date getServerStartDate() { long time = ManagementFactory.getRuntimeMXBean().getStartTime(); return new Date(time); } @@ -143,16 +124,14 @@ /** * 计算相差天数 */ public static int differentDaysByMillisecond(Date date1, Date date2) { public static int differentDaysByMillisecond(Date date1, Date date2) { return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); } /** * 计算两个时间差 */ public static String getDatePoor(Date endDate, Date nowDate) { public static String getDatePoor(Date endDate, Date nowDate) { long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 * 60; long nm = 1000 * 60; @@ -173,8 +152,7 @@ /** * 增加 LocalDateTime ==> Date */ public static Date toDate(LocalDateTime temporalAccessor) { public static Date toDate(LocalDateTime temporalAccessor) { ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); return Date.from(zdt.toInstant()); } @@ -182,31 +160,29 @@ /** * 增加 LocalDate ==> Date */ public static Date toDate(LocalDate temporalAccessor) { public static Date toDate(LocalDate temporalAccessor) { LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); return Date.from(zdt.toInstant()); } /*判断时间是否在时间内*/ public static boolean TimeCompare(String startT,String endT) { public static boolean TimeCompare(String startT, String endT) { LocalTime startTime = LocalTime.parse(startT); // 开始时间 LocalTime endTime = LocalTime.parse(endT); // 结束时间 LocalTime currentTime = LocalTime.now(); // 当前时间 // 判断当前时间是否在时间区间内 if (currentTime.isAfter(startTime) && currentTime.isBefore(endTime)) { // System.out.println("当前时间在时间区间内"); // System.out.println("当前时间在时间区间内"); return true; } else { // System.out.println("当前时间不在时间区间内"); // System.out.println("当前时间不在时间区间内"); return false; } } public static boolean TimeCompare(Date startT,Date endT) { Date current=new Date(); public static boolean TimeCompare(Date startT, Date endT) { Date current = new Date(); // 判断当前时间是否在时间区间内 if (current.after(startT) && current.before(endT)) { // System.out.println("当前时间在时间区间内"); @@ -216,4 +192,19 @@ return false; } } /** * 计算两个时间秒的差 */ public static long getSecDatePoor(Date endDate, Date nowDate) { long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 * 60; long nm = 1000 * 60; long ns = 1000; // 获得两个时间的毫秒时间差异 long diff = endDate.getTime() - nowDate.getTime(); // 计算差多少秒//输出结果 long sec = diff % nd % nh % nm / ns; return sec; } }