فهرست منبع

开发用户积分相关功能提交

zsy 1 ماه پیش
والد
کامیت
8702546ebf

+ 87 - 0
src/main/java/com/rf/help/task/NotifyTask.java

@@ -0,0 +1,87 @@
+package com.rf.help.task;
+
+import com.rf.help.task.dao.model.TaskEntity;
+import com.rf.help.task.service.TaskService;
+import com.rf.help.user.dao.model.UserEntity;
+import com.rf.help.user.service.UserService;
+import com.rf.help.utils.Constant;
+import com.rf.help.utils.DateUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author:zzf
+ * @Date:2024/12/20:11:56
+ * @Description:
+ */
+@Component
+@Slf4j
+public class NotifyTask {
+
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private UserService userService;
+
+    @Scheduled(cron = "0 */3 * * * ?") // 每隔3分钟执行一次
+    public void notifyTeacher() throws ParseException {
+        //发布状态到期改为取消
+        List<TaskEntity> taskEntities = this.taskService.findByTaskTypeAndTaskStatus(Constant.MAGIC_NUM_4,Constant.MAGIC_NUM_1);
+        String type = Constant.MAGIC_NUM_1;
+        handleRecords(taskEntities,type);
+        //进行中状态到期改为已完成
+        taskEntities = this.taskService.findByTaskTypeAndTaskStatus(Constant.MAGIC_NUM_4,Constant.MAGIC_NUM_2);
+        type = Constant.MAGIC_NUM_2;
+        handleRecords(taskEntities,type);
+    }
+
+    private void handleRecords(List<TaskEntity> taskEntities, String type) throws ParseException {
+        DateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
+        //当前时间
+        Date endTime = df.parse(DateUtil.getNowTime("yyyyMMddHHmm"));
+        for (TaskEntity item : taskEntities) {
+            if (Constant.MAGIC_NUM_1.equals(type)) {
+                //开始时间
+                Date beginTime = df.parse(item.getEndTime());
+                //计算时间差---分钟
+                int diff = DateUtil.getDistanceByUnit(beginTime, endTime, 2);
+                if (diff >= 0) {
+                    item.setTaskStatus(Constant.MAGIC_NUM_4);
+                    item.setUpdateTime(DateUtil.getNowTime());
+                    this.taskService.save(item);
+                }
+            }else if (Constant.MAGIC_NUM_2.equals(type)) {
+                //开始时间
+                Date beginTime = df.parse(item.getEndTime());
+                //计算时间差---分钟
+                int diff = DateUtil.getDistanceByUnit(beginTime, endTime, 2);
+                if (diff >= 0) {
+                    item.setTaskStatus(Constant.MAGIC_NUM_3);
+                    item.setUpdateTime(DateUtil.getNowTime());
+                    UserEntity publishUser = this.userService.findById(item.getPublishUserId());
+                    UserEntity acceptUser = this.userService.findById(item.getAcceptUserId());
+                    if (item.getBonus() == null || item.getBonus().equals("")){
+                        publishUser.setIntegral(publishUser.getIntegral() + 1);
+                        acceptUser.setIntegral(acceptUser.getIntegral() + 1);
+                    }else {
+                        publishUser.setIntegral(publishUser.getIntegral() + 2);
+                        acceptUser.setIntegral(acceptUser.getIntegral() + 2);
+                    }
+                    this.userService.save(publishUser);
+                    this.userService.save(acceptUser);
+                    this.taskService.save(item);
+                }
+            }
+        }
+    }
+
+}

+ 1 - 1
src/main/java/com/rf/help/task/dao/model/TaskEntity.java

@@ -39,7 +39,7 @@ public class TaskEntity extends BaseEntity {
     @Column(name = "remark", columnDefinition = "varchar(255) comment '备注信息'")
     private String remark;
 
-    @Column(name = "bonus", columnDefinition = "varchar(6) comment '悬赏金额'")
+    @Column(name = "bonus", columnDefinition = "varchar(6) comment '奖励'")
     private String bonus;
 
     @Column(name = "phone", columnDefinition = "varchar(15) comment '联系电话'")

+ 9 - 0
src/main/java/com/rf/help/task/dao/repository/TaskRepository.java

@@ -35,4 +35,13 @@ public interface TaskRepository extends BaseRepository<TaskEntity, String> {
     List<TaskEntity> findByPublishUserId(String userId);
 
     List<TaskEntity> findByAcceptUserId(String userId);
+
+    @Query(value = "SELECT * FROM t_task_info WHERE task_type != ?1 AND task_status = ?2 ", nativeQuery = true)
+    List<TaskEntity> findByTaskTypeAndTaskStatus(String taskType, String taskStatus);
+
+    @Query(value = "SELECT * FROM t_task_info WHERE publish_user_id = ?2 and create_time like CONCAT('%',?1,'%') ", nativeQuery = true)
+    List<TaskEntity> findByCreateTimeAndPublishUserId(String nowDate, String publishUserId);
+
+    @Query(value = "SELECT * FROM t_task_info WHERE accept_user_id = ?2 and create_time like CONCAT('%',?1,'%') ", nativeQuery = true)
+    List<TaskEntity> findByCreateTimeAndAcceptUserId(String nowDate, String acceptUserId);
 }

+ 37 - 11
src/main/java/com/rf/help/task/rest/TaskController.java

@@ -56,9 +56,29 @@ public class TaskController extends BaseController {
     public Result publishTask(@RequestBody String json) {
         TaskEntity taskEntity = JSONObject.parseObject(json, TaskEntity.class);
         if (taskEntity.getId() == null || taskEntity.getId().equals("")) {
-            taskEntity.setCreateTime(DateUtil.now());
-            taskEntity.setUpdateTime(DateUtil.now());
+            String nowDate = com.rf.help.utils.DateUtil.getNowTime("yyyy-MM-dd");
+            List<TaskEntity> taskEntities = this.taskService.findByCreateTimeAndPublishUserId(nowDate,taskEntity.getPublishUserId());
+            int num = 3;//后续会根据用户积分多少改变数值
+            if (taskEntities.size() < num){
+                taskEntity.setCreateTime(DateUtil.now());
+                taskEntity.setUpdateTime(DateUtil.now());
+            }else {
+                return fail(null, "今日发布任务已达到上限");
+            }
         }else {
+            if (taskEntity.getTaskStatus().equals("3")){
+                UserEntity publishUser = this.userService.findById(taskEntity.getPublishUserId());
+                UserEntity acceptUser = this.userService.findById(taskEntity.getAcceptUserId());
+                if (taskEntity.getBonus() == null || taskEntity.getBonus().equals("")){
+                    publishUser.setIntegral(publishUser.getIntegral() + 1);
+                    acceptUser.setIntegral(acceptUser.getIntegral() + 1);
+                }else {
+                    publishUser.setIntegral(publishUser.getIntegral() + 2);
+                    acceptUser.setIntegral(acceptUser.getIntegral() + 2);
+                }
+                this.userService.save(publishUser);
+                this.userService.save(acceptUser);
+            }
             taskEntity.setUpdateTime(DateUtil.now());
         }
         taskEntity = this.taskService.save(taskEntity);
@@ -72,19 +92,25 @@ public class TaskController extends BaseController {
         if (userEntity == null) {
             return fail(null, "用户不存在");
         }
-        TaskEntity taskEntity = this.taskService.findById(taskId);
-        if (taskEntity == null) {
-            return fail(null, "任务不存在");
-        }
-        Thread.sleep(2000);
-        if (taskEntity.getTaskStatus().equals("1")){
-            if (synchronizedStaticMethod(taskId,acceptUserId)){
-                return success("接单成功");
+        String nowDate = com.rf.help.utils.DateUtil.getNowTime("yyyy-MM-dd");
+        List<TaskEntity> taskEntities = this.taskService.findByCreateTimeAndAcceptUserId(nowDate,acceptUserId);
+        int num = 3;//后续会根据用户积分多少改变数值
+        if (taskEntities.size() < num){
+            TaskEntity taskEntity = this.taskService.findById(taskId);
+            if (taskEntity == null) {
+                return fail(null, "任务不存在");
+            }
+            if (taskEntity.getTaskStatus().equals("1")){
+                if (synchronizedStaticMethod(taskId,acceptUserId)){
+                    return success("接单成功");
+                }else {
+                    return fail(null, "任务已被接受");
+                }
             }else {
                 return fail(null, "任务已被接受");
             }
         }else {
-            return fail(null, "任务已被接受");
+            return fail(null, "今日接受任务已达到上限");
         }
     }
 

+ 6 - 0
src/main/java/com/rf/help/task/service/TaskService.java

@@ -24,4 +24,10 @@ public interface TaskService {
     List<TaskEntity> findByPublishUserId(String userId);
 
     List<TaskEntity> findByAcceptUserId(String userId);
+
+    List<TaskEntity> findByTaskTypeAndTaskStatus(String taskType, String taskStatus);
+
+    List<TaskEntity> findByCreateTimeAndPublishUserId(String nowDate, String publishUserId);
+
+    List<TaskEntity> findByCreateTimeAndAcceptUserId(String nowDate, String acceptUserId);
 }

+ 15 - 0
src/main/java/com/rf/help/task/service/impl/TaskServiceImpl.java

@@ -55,4 +55,19 @@ public class TaskServiceImpl implements TaskService {
     public List<TaskEntity> findByAcceptUserId(String userId) {
         return this.taskRepository.findByAcceptUserId(userId);
     }
+
+    @Override
+    public List<TaskEntity> findByTaskTypeAndTaskStatus(String taskType, String taskStatus) {
+        return this.taskRepository.findByTaskTypeAndTaskStatus(taskType,taskStatus);
+    }
+
+    @Override
+    public List<TaskEntity> findByCreateTimeAndPublishUserId(String nowDate, String publishUserId) {
+        return this.taskRepository.findByCreateTimeAndPublishUserId(nowDate,publishUserId);
+    }
+
+    @Override
+    public List<TaskEntity> findByCreateTimeAndAcceptUserId(String nowDate, String acceptUserId) {
+        return this.taskRepository.findByCreateTimeAndAcceptUserId(nowDate,acceptUserId);
+    }
 }

+ 3 - 0
src/main/java/com/rf/help/user/dao/model/UserEntity.java

@@ -42,4 +42,7 @@ public class UserEntity extends BaseEntity {
     @Column(name = "avatar", columnDefinition = "varchar(255) comment '头像URL'")
     private String avatar;
 
+    @Column(name = "integral", columnDefinition = "int(10) comment '积分'")
+    private int integral;
+
 }

+ 1 - 0
src/main/java/com/rf/help/user/rest/UserController.java

@@ -88,6 +88,7 @@ public class UserController extends BaseController {
             userEntity.setPhone("-");
             userEntity.setGender("0");
             userEntity.setPassword("-");
+            userEntity.setIntegral(0);
             Random rand = new Random();
             int number = rand.nextInt(3) + 1;
             if (userEntity.getGender().equals("1")){

+ 2 - 0
src/main/java/com/rf/help/utils/Constant.java

@@ -17,6 +17,8 @@ public class Constant {
     public static String MAGIC_NUM_0 = "0";
     public static String MAGIC_NUM_1 = "1";
     public static String MAGIC_NUM_2 = "2";
+    public static String MAGIC_NUM_3 = "3";
+    public static String MAGIC_NUM_4 = "4";
 
     public static final String DATE_TRANS_FLAG_START = "start";
     public static final String DATE_TRANS_FLAG_END = "end";

+ 1376 - 0
src/main/java/com/rf/help/utils/DateUtil.java

@@ -0,0 +1,1376 @@
+package com.rf.help.utils;
+
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+public class DateUtil {
+    /**
+     * 默认的日期格式组合,用来将字符串转化为日期用
+     */
+    public static final String[] DATE_PARSE_PATTERNS = {"yyyy/MM/dd",
+            "yyyy-MM-dd", "yyyy年MM月dd日"};
+    /**
+     * 获取当前系统时间格式
+     */
+    public static final String DEFAULT_DATE = "yyyy-MM-dd HH:mm:ss";
+    /**
+     * 特殊日期格式
+     */
+    public static final String DEFAULT_DATE_T = "yyyy-MM-dd:HH:mm";
+
+    /**
+     * 特殊日期格式2
+     */
+    public static final String DEFAULT_DATE_T2 = "yyyy-MM-dd HH:mm";
+    /**
+     * 默认的时间格式
+     */
+    public static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";
+
+    /**
+     * 默认的日期格式
+     */
+    public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
+
+    /**
+     * 获取当前系统时间格式
+     * 用于生成文件名
+     */
+    public static final String DEFAULT_FILE_DATE = "yyyyMMddHHmmss";
+
+
+    /**
+     * 日期代码,周日
+     */
+    public static final int SUNDAY = 1;
+
+    /**
+     * 日期代码,周一
+     */
+    public static final int MONDAY = 2;
+
+    /**
+     * 日期代码,周二
+     */
+    public static final int TUESDAY = 3;
+
+    /**
+     * 日期代码,周三
+     */
+    public static final int WEDNESDAY = 4;
+
+    /**
+     * 日期代码,周四
+     */
+    public static final int THURSDAY = 5;
+
+    /**
+     * 日期代码,周五
+     */
+    public static final int FRIDAY = 6;
+
+    /**
+     * 日期代码,周六
+     */
+    public static final int SATURDAY = 7;
+
+    /**
+     * 日期精度,秒
+     */
+    public static final int ACCURACY_SECOND = 1;
+
+    /**
+     * 日期精度,分
+     */
+    public static final int ACCURACY_MINUTE = 2;
+
+    /**
+     * 日期精度,小时
+     */
+    public static final int ACCURACY_HOUR = 3;
+
+    /**
+     * 日期精度,天
+     */
+    public static final int ACCURACY_DAY = 4;
+
+    /**
+     * 日期精度,月
+     */
+    public static final int ACCURACY_MONTH = 5;
+
+    /**
+     * 日期精度,年
+     */
+    public static final int ACCURACY_YEAR = 6;
+
+    /**
+     * 比较用日期格式,精度为年
+     */
+    public static final String ACCURACY_PATTERN_YEAR = "yyyy";
+
+    /**
+     * 比较用日期格式,精度为月
+     */
+    public static final String ACCURACY_PATTERN_MONTH = "yyyyMM";
+
+    /**
+     * 比较用日期格式,精度为日
+     */
+    public static final String ACCURACY_PATTERN_DAY = "yyyyMMdd";
+
+    /**
+     * 比较用日期格式,精度为时
+     */
+    public static final String ACCURACY_PATTERN_HOUR = "yyyyMMddHH";
+
+    /**
+     * 比较用日期格式,精度为分
+     */
+    public static final String ACCURACY_PATTERN_MINUTE = "yyyyMMddHHmm";
+
+    /**
+     * 比较用日期格式,精度为秒
+     */
+    public static final String ACCURACY_PATTERN_SECOND = "yyyyMMddHHmmss";
+
+    /**
+     * 单一属性格式,时
+     */
+    public static final String SINGLE_YEAR = "yyyy";
+
+    /**
+     * 单一属性格式,时
+     */
+    public static final String SINGLE_MONTH = "M";
+
+    /**
+     * 单一属性格式,时
+     */
+    public static final String SINGLE_DAY = "d";
+
+    /**
+     * 单一属性格式,时
+     */
+    public static final String SINGLE_HOUR = "H";
+
+    /**
+     * 单一属性格式,分
+     */
+    public static final String SINGLE_MINUTE = "m";
+
+    /**
+     * 单一属性格式,秒
+     */
+    public static final String SINGLE_SECOND = "s";
+
+    /**
+     *
+     */
+    public static final long MILLISECONDS_PER_SECOND = 1000;
+
+    /**
+     *
+     */
+    public static final long MILLISECONDS_PER_MINUTE = 1000 * 60;
+
+    /**
+     *
+     */
+    public static final long MILLISECONDS_PER_HOUR = 1000 * 60 * 60;
+
+    /**
+     *
+     */
+    public static final long MILLISECONDS_PER_DAY = 1000 * 60 * 60 * 24;
+
+    /**
+     * 将给定的日期字符串,按照预定的日期格式,转化为Date型数据
+     *
+     * @param dateStr 日期字符字符串
+     * @return 日期型结果
+     */
+    public static Date parseDate(String dateStr) {
+        Date date = null;
+        try {
+            date = org.apache.commons.lang.time.DateUtils.parseDate(dateStr,
+                    DATE_PARSE_PATTERNS);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return date;
+    }
+
+    /**
+     * 根据指定格式转化String型日期到Date型
+     *
+     * @param dateStr      String型日期
+     * @param parsePattern 指定的格式
+     * @return Date型日期
+     */
+    public static Date parseDate(String dateStr, String parsePattern) {
+        Date date = null;
+        try {
+            date = org.apache.commons.lang.time.DateUtils.parseDate(dateStr,
+                    new String[]{parsePattern.toString()});
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return date;
+    }
+
+    /**
+     * 返回系统当前时间(Date型)
+     *
+     * @return 系统当前时间
+     */
+    public static Date getCurrentDate() {
+        return new Date();
+    }
+
+    /**
+     * 日期计算,日加减
+     *
+     * @param date   初始日期
+     * @param amount 天数增量(负数为减)
+     * @return 计算后的日期
+     */
+    public static Date addDays(Date date, int amount) {
+        return org.apache.commons.lang.time.DateUtils.addDays(date, amount);
+    }
+
+    /**
+     * 日期计算,周加减
+     *
+     * @param date   初始日期
+     * @param amount 周数增量(负数为减)
+     * @return 计算后的日期
+     */
+    public static Date addWeeks(Date date, int amount) {
+        return org.apache.commons.lang.time.DateUtils.addWeeks(date, amount);
+    }
+
+    /**
+     * 日期计算,月加减
+     *
+     * @param date   初始日期
+     * @param amount 月数增量(负数为减)
+     * @return 计算后的日期
+     */
+    public static Date addMonths(Date date, int amount) {
+        return org.apache.commons.lang.time.DateUtils.addMonths(date, amount);
+    }
+
+    /**
+     * 日期计算,年加减
+     *
+     * @param date   初始日期
+     * @param amount 年数增量(负数为减)
+     * @return 计算后的日期
+     */
+    public static Date addYears(Date date, int amount) {
+        return org.apache.commons.lang.time.DateUtils.addYears(date, amount);
+    }
+
+    /**
+     * 日期计算,小时加减
+     *
+     * @param date   初始日期
+     * @param amount 小时增量(负数为减)
+     * @return 计算后的日期
+     */
+    public static Date addHours(Date date, int amount) {
+        return org.apache.commons.lang.time.DateUtils.addHours(date, amount);
+    }
+
+    /**
+     * 日期计算,分钟加减
+     *
+     * @param date   初始日期
+     * @param amount 分钟增量(负数为减)
+     * @return 计算后的日期
+     */
+    public static Date addMinutes(Date date, int amount) {
+        return org.apache.commons.lang.time.DateUtils.addMinutes(date, amount);
+    }
+
+    /**
+     * 日期计算,秒加减
+     *
+     * @param date   初始日期
+     * @param amount 秒增量(负数为减)
+     * @return 计算后的日期
+     */
+    public static Date addSeconds(Date date, int amount) {
+        return org.apache.commons.lang.time.DateUtils.addSeconds(date, amount);
+    }
+
+    /**
+     * 根据指定格式,返回日期时间字符串
+     *
+     * @param date    日期变量
+     * @param pattern 日期格式
+     * @return 日期时间字符串
+     */
+    public static String getDateStr(Date date, String pattern) {
+        DateFormat df = new SimpleDateFormat(pattern);
+        return df.format(date);
+    }
+
+    /**
+     * 输出时间String(默认格式)
+     *
+     * @param date 日期
+     * @return 默认格式化的日期
+     */
+    public static String getTimeStr(Date date) {
+        return getDateStr(date, DEFAULT_TIME_PATTERN);
+    }
+
+    /**
+     * 取指定日期所在月的第一天的日期
+     *
+     * @param date 指定的日期
+     * @return 指定日期所在月的第一天
+     */
+    public static Date getFirstDayOfMonth(Date date) {
+        Calendar cal = getCalendar(date);
+        cal.set(Calendar.DATE, 1);
+        return cal.getTime();
+    }
+
+    /**
+     * 取指定日期所在月的最后一天的日期
+     *
+     * @param date 指定的日期
+     * @return 指定日期所在月的最后一天
+     */
+    public static Date getLastDayOfMonth(Date date) {
+        Date nextMonth = addMonths(date, 1);
+        Date firstDayOfNextMonth = getFirstDayOfMonth(nextMonth);
+        return addDays(firstDayOfNextMonth, -1);
+    }
+
+    /**
+     * 取指定日期所在年的第一天的日期
+     *
+     * @param date 指定的日期
+     * @return 指定日期所在年的第一天
+     */
+    public static Date getFirstDayOfYear(Date date) {
+        Calendar cal = getCalendar(date);
+        cal.set(Calendar.DATE, 1);
+        cal.set(Calendar.MONTH, 0);
+        return cal.getTime();
+    }
+
+    /**
+     * 取指定日期所在年的最后一天的日期
+     *
+     * @param date 指定的日期
+     * @return 指定日期所在月的最后一天
+     */
+    public static Date getLastDayOfYear(Date date) {
+        Date nextMonth = addYears(date, 1);
+        Date firstDayOfNextYear = getFirstDayOfYear(nextMonth);
+        return addDays(firstDayOfNextYear, -1);
+    }
+
+    /**
+     * 取指定日期所在周的指定天的日期
+     *
+     * @param date     指定的日期
+     * @param day      指定的天(星期几)
+     * @param firstDay 一星期的起始天
+     * @return 指定周星期日的日期
+     */
+    public static Date getDayInWeek(Date date, int day, int firstDay) {
+        Calendar cal = getCalendar(date);
+        cal.setFirstDayOfWeek(firstDay);
+        cal.set(Calendar.DAY_OF_WEEK, day);
+        return cal.getTime();
+    }
+
+    /**
+     * 根据Date型的日期,取Calendar型的日期
+     *
+     * @param date Date型的日期
+     * @return Calendar型的日期
+     */
+    public static Calendar getCalendar(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        return cal;
+    }
+
+    /**
+     * 日期比较(精确到天),date1晚于date2
+     *
+     * @param date1 日期1
+     * @param date2 日期2
+     * @return date1晚于date2,返回true,否则返回false
+     */
+    public static boolean later(Date date1, Date date2) {
+        boolean result = false;
+        if (1 == compare(date1, date2, ACCURACY_DAY)) {
+            result = true;
+        }
+        return result;
+    }
+
+    /**
+     * 日期比较(精确到天),date1早于date2
+     *
+     * @param date1 日期1
+     * @param date2 日期2
+     * @return date1早于date2,返回true,否则返回false
+     */
+    public static boolean earlier(Date date1, Date date2) {
+        boolean result = false;
+        if (-1 == compare(date1, date2, ACCURACY_DAY)) {
+            result = true;
+        }
+        return result;
+    }
+
+    /**
+     * 日期比较(精确到天),date1等于date2
+     *
+     * @param date1 日期1
+     * @param date2 日期2
+     * @return date1等于date2,返回true,否则返回false
+     */
+    public static boolean equal(Date date1, Date date2) {
+        boolean result = false;
+        if (0 == compare(date1, date2, ACCURACY_DAY)) {
+            result = true;
+        }
+        return result;
+    }
+
+    /**
+     * 根据指定规则比较日期,date1晚于date2
+     *
+     * @param date1    日期1
+     * @param date2    日期2
+     * @param accuracy 日期精度
+     * @return date1晚于date2,返回true,否则返回false
+     */
+    public static boolean later(Date date1, Date date2, int accuracy) {
+        boolean result = false;
+        if (1 == compare(date1, date2, accuracy)) {
+            result = true;
+        }
+        return result;
+    }
+
+    /**
+     * 根据指定规则比较日期,date1早于date2
+     *
+     * @param date1    日期1
+     * @param date2    日期2
+     * @param accuracy 日期精度
+     * @return date1早于date2,返回true,否则返回false
+     */
+    public static boolean earlier(Date date1, Date date2, int accuracy) {
+        boolean result = false;
+        if (-1 == compare(date1, date2, accuracy)) {
+            result = true;
+        }
+        return result;
+    }
+
+    /**
+     * 根据指定规则比较日期,date1等于date2
+     *
+     * @param date1    日期1
+     * @param date2    日期2
+     * @param accuracy 日期精度
+     * @return date1等于date2,返回true,否则返回false
+     */
+    public static boolean equal(Date date1, Date date2, int accuracy) {
+        boolean result = false;
+        if (0 == compare(date1, date2, accuracy)) {
+            result = true;
+        }
+        return result;
+    }
+
+    /**
+     * 根据指定规则,比较日期
+     *
+     * @param date1    日期1
+     * @param date2    日期2
+     * @param accuracy 日期精度
+     * @return int型,date1晚,返回1;date1早,返回-1;相等,返回0
+     */
+    public static int compare(Date date1, Date date2, int accuracy) {
+        String pattern = DEFAULT_DATE_PATTERN;
+        switch (accuracy) {
+            case ACCURACY_YEAR:
+                pattern = ACCURACY_PATTERN_YEAR;
+                break;
+            case ACCURACY_MONTH:
+                pattern = ACCURACY_PATTERN_MONTH;
+                break;
+            case ACCURACY_DAY:
+                pattern = ACCURACY_PATTERN_DAY;
+                break;
+            case ACCURACY_HOUR:
+                pattern = ACCURACY_PATTERN_HOUR;
+                break;
+            case ACCURACY_MINUTE:
+                pattern = ACCURACY_PATTERN_MINUTE;
+                break;
+            case ACCURACY_SECOND:
+                pattern = ACCURACY_PATTERN_SECOND;
+                break;
+            default:
+                break;
+        }
+        Date formatedDate1 = transDateFormat(date1, pattern);
+        Date formatedDate2 = transDateFormat(date2, pattern);
+        return formatedDate1.compareTo(formatedDate2);
+    }
+
+    /**
+     * 根据指定规则,比较日期
+     *
+     * @param date1    日期1
+     * @param date2    日期2
+     * @param accuracy 日期精度
+     * @return int型,date1晚,返回1;date1早,返回-1;相等,返回0
+     * @throws ParseException
+     */
+    public static int compare(String date1, String date2, int accuracy) throws ParseException {
+        String pattern = DEFAULT_DATE_PATTERN;
+        switch (accuracy) {
+            case ACCURACY_YEAR:
+                pattern = ACCURACY_PATTERN_YEAR;
+                break;
+            case ACCURACY_MONTH:
+                pattern = ACCURACY_PATTERN_MONTH;
+                break;
+            case ACCURACY_DAY:
+                pattern = ACCURACY_PATTERN_DAY;
+                break;
+            case ACCURACY_HOUR:
+                pattern = ACCURACY_PATTERN_HOUR;
+                break;
+            case ACCURACY_MINUTE:
+                pattern = ACCURACY_PATTERN_MINUTE;
+                break;
+            case ACCURACY_SECOND:
+                pattern = ACCURACY_PATTERN_SECOND;
+                break;
+            default:
+                break;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE);
+        Date formatedDate1 = transDateFormat(sdf.parse(date1), pattern);
+        Date formatedDate2 = transDateFormat(sdf.parse(date2), pattern);
+        return formatedDate1.compareTo(formatedDate2);
+    }
+
+    /**
+     * 根据指定规则,转化日期,如只取年、取年月等
+     *
+     * @param date    待转化日期
+     * @param pattern 日期格式
+     * @return 转化后的日期
+     */
+    public static Date transDateFormat(Date date, String pattern) {
+        String dateStr = getDateStr(date, pattern);
+        return parseDate(dateStr, pattern);
+    }
+
+    /**
+     * 返回时定时间的年
+     *
+     * @param date 日期
+     * @return String型的年
+     */
+    public static String getYear(Date date) {
+        return getDateStr(date, SINGLE_YEAR);
+    }
+
+    /**
+     * 返回时定时间的月
+     *
+     * @param date 日期
+     * @return String型的月
+     */
+    public static String getMonth(Date date) {
+        return getDateStr(date, SINGLE_MONTH);
+    }
+
+    /**
+     * 返回时定时间的日
+     *
+     * @param date 日期
+     * @return String型的日
+     */
+    public static String getDay(Date date) {
+        return getDateStr(date, SINGLE_DAY);
+    }
+
+    /**
+     * 返回时定时间的小时
+     *
+     * @param date 日期
+     * @return String型的小时
+     */
+    public static String getHour(Date date) {
+        return getDateStr(date, SINGLE_HOUR);
+    }
+
+    /**
+     * 返回时定时间的分
+     *
+     * @param date 日期
+     * @return String型的分
+     */
+    public static String getMinute(Date date) {
+        return getDateStr(date, SINGLE_MINUTE);
+    }
+
+    /**
+     * 返回时定时间的秒
+     *
+     * @param date 日期
+     * @return String型的秒
+     */
+    public static String getSecond(Date date) {
+        return getDateStr(date, SINGLE_SECOND);
+    }
+
+    /**
+     * 将时间日期变量的年份变为指定年, 如果日期不存在,则向后一天,如20102月
+     *
+     * @param date   日期时间变量
+     * @param amount 指定年
+     * @return 修改后的日期变量
+     */
+    public static Date setYear(Date date, int amount) {
+        Calendar cal = getCalendar(date);
+        cal.set(Calendar.YEAR, amount);
+        return cal.getTime();
+    }
+
+    /**
+     * 将时间日期变量的月份变为指定月
+     *
+     * @param date   日期时间变量
+     * @param amount 指定月
+     * @return 修改后的日期变量
+     */
+    public static Date setMonth(Date date, int amount) {
+        Calendar cal = getCalendar(date);
+        cal.set(Calendar.MONTH, amount - 1);
+        return cal.getTime();
+    }
+
+    /**
+     * 将时间日期变量的年份变为指定日
+     *
+     * @param date   日期时间变量
+     * @param amount 指定日
+     * @return 修改后的日期变量
+     */
+    public static Date setDay(Date date, int amount) {
+        Calendar cal = getCalendar(date);
+        cal.set(Calendar.DAY_OF_MONTH, amount);
+        return cal.getTime();
+    }
+
+    /**
+     * 将时间日期变量的小时变为指定时
+     *
+     * @param date   日期时间变量
+     * @param amount 指定时
+     * @return 修改后的日期变量
+     */
+    public static Date setHour(Date date, int amount) {
+        Calendar cal = getCalendar(date);
+        cal.set(Calendar.HOUR_OF_DAY, amount);
+        return cal.getTime();
+    }
+
+    /**
+     * 将时间日期变量的分钟变为指定分
+     *
+     * @param date   日期时间变量
+     * @param amount 指定分
+     * @return 修改后的日期变量
+     */
+    public static Date setMinute(Date date, int amount) {
+        Calendar cal = getCalendar(date);
+        cal.set(Calendar.MINUTE, amount);
+        return cal.getTime();
+    }
+
+    /**
+     * 将时间日期变量的秒变为指定秒
+     *
+     * @param date   日期时间变量
+     * @param amount 指定秒
+     * @return 修改后的日期变量
+     */
+    public static Date setSecond(Date date, int amount) {
+        Calendar cal = getCalendar(date);
+        cal.set(Calendar.SECOND, amount);
+        return cal.getTime();
+    }
+
+    /**
+     * 根据制定单位,计算两个日期之间的天数差
+     *
+     * @param a 时间点1
+     * @param b 时间点2
+     * @return 时间差
+     */
+    public static int getDateDistance(Date a, Date b) {
+        return getDateDistance(a, b, ACCURACY_DAY);
+    }
+
+    /**
+     * 根据制定单位,计算两个日期之间的差
+     *
+     * @param a    时间点1
+     * @param b    时间点2
+     * @param unit 时间单位
+     * @return 时间差
+     */
+    public static int getDateDistance(Date a, Date b, int unit) {
+        int result = 0;
+        if (null != a && null != b) {
+            String pattern = null;
+            switch (unit) {
+                case ACCURACY_HOUR: // '\003'
+                    pattern = "yyyyMMddHH";
+                    break;
+                case ACCURACY_MINUTE: // '\002'
+                    pattern = "yyyyMMddHHmm";
+                    break;
+                case ACCURACY_SECOND: // '\001'
+                    pattern = "yyyyMMddHHmmss";
+                    break;
+                default:
+                    pattern = "yyyyMMdd";
+            }
+            Date startDate = transDateFormat(1 != a.compareTo(b) ? a : b,
+                    pattern);
+            Date endDate = transDateFormat(1 != a.compareTo(b) ? b : a, pattern);
+            if (1 <= unit && 4 >= unit) {
+                result = getDistanceByUnit(startDate, endDate, unit);
+                return result;
+            }
+            GregorianCalendar startCalendar = new GregorianCalendar();
+            startCalendar.setTime(startDate);
+            int startYears = startCalendar.get(Calendar.YEAR);
+            int startMonths = startCalendar.get(Calendar.MONTH);
+            int startDays = startCalendar.get(Calendar.DAY_OF_MONTH);
+
+            GregorianCalendar endCalendar = new GregorianCalendar();
+            endCalendar.setTime(endDate);
+            int endYears = endCalendar.get(Calendar.YEAR);
+            int endMonths = endCalendar.get(Calendar.MONTH);
+            int endDays = endCalendar.get(Calendar.DAY_OF_MONTH);
+
+            int yearBetween = endYears - startYears;
+            int monthBetween = endMonths - startMonths;
+            if (endDays < startDays
+                    && endDays != endCalendar.getActualMaximum(Calendar.DATE)) {
+                monthBetween--;
+            }
+            if (ACCURACY_YEAR == unit) {
+                if (monthBetween < 0) {
+                    yearBetween--;
+                }
+                result = yearBetween;
+            }
+            if (ACCURACY_MONTH == unit) {
+                result = (yearBetween * 12 + monthBetween);
+            }
+        }
+        return result;
+
+    }
+
+    /**
+     * 内部方法,计算时间点的差距
+     *
+     * @param startDate 起始时间
+     * @param endDate   终止时间
+     * @param unit      时间单位
+     * @return 时间差
+     */
+    public static int getDistanceByUnit(Date startDate, Date endDate, int unit) {
+        int result = 0;
+        long millisecondPerUnit = MILLISECONDS_PER_DAY;
+        switch (unit) {
+            case ACCURACY_HOUR:
+                millisecondPerUnit = MILLISECONDS_PER_HOUR;
+                break;
+            case ACCURACY_MINUTE:
+                millisecondPerUnit = MILLISECONDS_PER_MINUTE;
+                break;
+            case ACCURACY_SECOND:
+                millisecondPerUnit = MILLISECONDS_PER_SECOND;
+                break;
+            default:
+                break;
+        }
+        long start = startDate.getTime();
+        long end = endDate.getTime();
+        long distance = end - start;
+        result = Integer.valueOf((distance / millisecondPerUnit) + "");
+        return result;
+    }
+
+    /**
+     * 内部方法,计算时间点的差距toLong
+     *
+     * @param startDate 起始时间
+     * @param endDate   终止时间
+     * @param unit      时间单位
+     * @return 时间差
+     */
+    public static long getDistanceByUnit_toLong(Date startDate, Date endDate, int unit) {
+        long result = 0;
+        long millisecondPerUnit = MILLISECONDS_PER_DAY;
+        switch (unit) {
+            case ACCURACY_HOUR:
+                millisecondPerUnit = MILLISECONDS_PER_HOUR;
+                break;
+            case ACCURACY_MINUTE:
+                millisecondPerUnit = MILLISECONDS_PER_MINUTE;
+                break;
+            case ACCURACY_SECOND:
+                millisecondPerUnit = MILLISECONDS_PER_SECOND;
+                break;
+            default:
+                break;
+        }
+        long start = startDate.getTime();
+        long end = endDate.getTime();
+        long distance = end - start;
+        result = distance / millisecondPerUnit;
+        return result;
+    }
+
+
+    /**
+     * 返回指定日期是当年的第几周
+     *
+     * @param date 指定日期
+     * @return 周数(从1开始)
+     */
+    public static int getWeekOfYear(Date date) {
+        return getCalendar(date).get(Calendar.WEEK_OF_YEAR);
+    }
+
+    /**
+     * 获取指定日期是星期几
+     *
+     * @param date 指定日期
+     * @return 星期日--1; 星期一--2; 星期二--3; 星期三--4; 星期四--5; 星期五--6; 星期六--7;
+     */
+    public static int getWeekOfDate(Date date) {
+        return getCalendar(date).get(Calendar.DAY_OF_WEEK);
+    }
+
+    /**
+     * 判断指定年份日期的年份是否为闰年
+     *
+     * @param date 日期
+     * @return 闰年ture,非闰年false
+     */
+    public static boolean isLeapYear(Date date) {
+        int year = getCalendar(date).get(Calendar.YEAR);
+        return isLeapYear(year);
+    }
+
+    /**
+     * 判断指定年份日期的年份是否为闰年
+     *
+     * @param year 年份数字
+     * @return 闰年ture,非闰年false
+     */
+    public static boolean isLeapYear(int year) {
+        if ((year % 400) == 0) {
+            return true;
+        } else if ((year % 4) == 0) {
+            if ((year % 100) == 0) {
+                return false;
+            } else {
+                return true;
+            }
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 按照strFormat格式输出当前时间
+     *
+     * @param strFormat 格式
+     * @return 指定格式的当前系统日期
+     */
+    public static String getCurrentDate(String strFormat) {
+        return getDateStr(getCurrentDate(), strFormat);
+    }
+
+    /**
+     * 校验日期数据(校验输入值是否为指定的日期格式)
+     *
+     * @param strDate   要校验的日期
+     * @param strFormat 日期格式
+     * @return true/false (符合/不符合)
+     */
+    public static boolean checkDate(String strDate, String strFormat) {
+        Date date = null;
+        if ((strDate != null) && (strDate.trim().length() != 0)) {
+            DateFormat myDateFmt = new SimpleDateFormat(strFormat);
+            try {
+                date = myDateFmt.parse(strDate);
+
+                if (!strDate.equals(myDateFmt.format(date))) {
+                    date = null;
+                    return false;
+                }
+            } catch (ParseException e) {
+                date = null;
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * @param
+     * @return 格式为"yyyy-MM-dd HH:mm:ss"的时间
+     * @throws
+     * @Description:获取当期系统日期以特定格式显示
+     * @author baolf
+     * @date 2016-7-25
+     */
+    public static String getNowTime() {
+        Date now = new Date();
+        SimpleDateFormat sd = new SimpleDateFormat(DEFAULT_DATE);
+        String date = sd.format(now);
+        return date;
+    }
+
+    /**
+     * @param
+     * @return 格式为"yyyy-MM-dd HH:mm:ss"的时间
+     * @throws
+     * @Description:获取当期系统两小时后时间 以特定格式显示
+     * @author wwq
+     * @date 2018-08-13
+     */
+    public static String get2HoursLater() {
+        Date twoHours = new Date(System.currentTimeMillis() + 120 * 60 * 1000);
+        SimpleDateFormat sd = new SimpleDateFormat(DEFAULT_DATE);
+        String date = sd.format(twoHours);
+        return date;
+    }
+
+    /**
+     * @param
+     * @return 格式为"yyyy-MM-dd"的时间
+     * @throws
+     * @Description:获取当期系统日期以特定格式显示
+     * @author
+     * @date 2016-7-25
+     */
+    public static String getNowTime1() {
+        Date now = new Date();
+        SimpleDateFormat sd = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
+        String date = sd.format(now);
+        return date;
+    }
+
+    /**
+     * 自定义时间格式
+     *
+     * @param strFormat
+     * @return
+     */
+    public static String getNowTime(String strFormat) {
+        Date now = new Date();
+        SimpleDateFormat sd = new SimpleDateFormat(strFormat);
+        String date = sd.format(now);
+        return date;
+    }
+
+    /**
+     * 时间串,没有分割符
+     * 用于自动生成文件名用
+     *
+     * @return
+     */
+    public static synchronized String getFileNameNowTime() {
+        Date now = new Date();
+        SimpleDateFormat sd = new SimpleDateFormat(DEFAULT_FILE_DATE);
+        String date = sd.format(now);
+        return date;
+    }
+
+    /**
+     * 获得几位随机数(正数)
+     *
+     * @param num
+     * @return
+     */
+    public static String getRandom(int num) {
+        StringBuffer format = new StringBuffer("0.0");
+        for (int ii = 2; ii <= num; ii++) {
+            format.append("0");
+        }
+        DecimalFormat df = new DecimalFormat(format.toString());
+        return df.format(Math.random()).replace("0.", "");
+
+    }
+
+    public static String getReleaseBatch() {
+        Date now = new Date();
+        SimpleDateFormat sd = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
+        String date = sd.format(now);
+        date = date.replace("-", "");
+        return date;
+    }
+
+    //	public static void main(String[] args) {
+//	}
+    public static String getBeforeNowTime() {
+        long time = 1 * 60 * 1000 + 10000;//1分钟
+        Date now = new Date(new Date().getTime() - time);
+        SimpleDateFormat sd = new SimpleDateFormat(DEFAULT_DATE);
+        String date = sd.format(now);
+        return date;
+    }
+
+    /**
+     * 获取秒数  (1970-01-01 08:00:00)
+     *
+     * @param :
+     * @throws :
+     * @Description :
+     * @author :
+     */
+    public static int getDateInt(String date) {
+        return getDistanceByUnit(
+                parseDate("1970-01-01 08:00:00", DEFAULT_DATE),
+                parseDate(date, DEFAULT_DATE), 1);
+    }
+
+    /**
+     * 判断字符串是否不为空 空返回false 非空返回true
+     *
+     * @param sourceStr
+     * @return
+     */
+    public static boolean isNotEmpty(String sourceStr) {
+
+        if (sourceStr == null) {
+            return false;
+        }
+        if (sourceStr.trim().length() > 0) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 统计两个时间的时间差
+     * 相差几秒几毫秒
+     */
+    public static String getDistanceTime(String str1, String str2) {
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
+        Date one;
+        Date two;
+        long day = 0;//天数差
+        long hour = 0;//小时数差
+        long min = 0;//分钟数差
+        long second = 0;//秒数差
+        long diff = 0;//毫秒差
+        String result = null;
+        try {
+            final Calendar c = Calendar.getInstance();
+            c.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
+            one = df.parse(str1);
+            c.setTime(one);
+            two = df.parse(str2);
+            long time1 = one.getTime();
+            long time2 = two.getTime();
+            diff = time2 - time1;
+            day = diff / (24 * 60 * 60 * 1000);
+            hour = (diff / (60 * 60 * 1000) - day * 24);
+            min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
+            second = diff / 1000;
+            //System.out.println("day="+day+" hour="+hour+" min="+min+" ss="+second%60+" SSS="+diff%1000);
+            result = second % 60 + "秒" + diff % 1000 + "毫秒";
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return String.valueOf(diff);
+    }
+
+    /**
+     * 获取两个日期相差的月数
+     */
+    public static int getMonthDiff(Date d1, Date d2) {
+        Calendar c1 = Calendar.getInstance();
+        Calendar c2 = Calendar.getInstance();
+        c1.setTime(d1);
+        c2.setTime(d2);
+        int year1 = c1.get(Calendar.YEAR);
+        int year2 = c2.get(Calendar.YEAR);
+        int month1 = c1.get(Calendar.MONTH);
+        int month2 = c2.get(Calendar.MONTH);
+        int day1 = c1.get(Calendar.DAY_OF_MONTH);
+        int day2 = c2.get(Calendar.DAY_OF_MONTH);
+        // 获取年的差值
+        int yearInterval = year1 - year2;
+        // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数
+        if (month1 < month2 || month1 == month2 && day1 < day2) {
+            yearInterval--;
+        }
+        // 获取月数差值
+        int monthInterval = (month1 + 12) - month2;
+        if (day1 < day2) {
+            monthInterval--;
+        }
+        monthInterval %= 12;
+        int monthsDiff = Math.abs(yearInterval * 12 + monthInterval);
+        return monthsDiff;
+    }
+
+    public static void main(String[] args) throws ParseException {
+
+        int monthDiff = getMonthDiff(new Date(), new SimpleDateFormat("yyyy-MM-dd").parse("1991-05-16"));
+        System.out.println(monthDiff);
+        System.out.println(monthDiff / 12);
+
+    }
+
+    /*
+     * 将yyyyMMddHHmmss格式的数据装换成yyyy-MM-dd:HH:mm格式的数据
+     * */
+    public static String formatDate(String dateStr) throws NullPointerException {
+        //
+        StringBuffer dateBuffer = new StringBuffer();
+        return dateBuffer.append(dateStr.substring(0, 4)).append("-").append(dateStr.substring(4, 6)).append("-").append(dateStr.substring(6, 8))
+                .append(" ").append(dateStr.substring(8, 10)).append(":").append(dateStr.substring(10, 12)).append(":").append(dateStr.substring(12, 14)).toString();
+    }
+
+    /**
+     * 获取今天的开始时间,并格式化为yyyy-MM-dd HH:mm:ss
+     *
+     * @return
+     */
+    public static String getTodayBeginTime() {
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+
+        // 获取当天的开始时间(00:00:00)
+        LocalDateTime startOfDay = today.atStartOfDay();
+        ZonedDateTime zonedStartOfDay = startOfDay.atZone(ZoneId.systemDefault());
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String formattedStartOfDay = zonedStartOfDay.format(formatter);
+        System.out.println("当天的开始时间: " + formattedStartOfDay);
+        return formattedStartOfDay;
+    }
+
+    /**
+     * 获取当天的结束时间,并格式化为yyyy-MM-dd HH:mm:ss
+     *
+     * @return
+     */
+    public static String getTodayEndTime() {
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+        LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+        ZonedDateTime zonedEndOfDay = endOfDay.atZone(ZoneId.systemDefault());
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String formattedEndOfDay = zonedEndOfDay.format(formatter);
+        System.out.println("当天的结束时间: " + formattedEndOfDay);
+        return formattedEndOfDay;
+    }
+
+    /**
+     * 获得当前月第一天的时间起点,并格式化为yyyy-MM-dd HH:mm:ss
+     *
+     * @return
+     */
+    public static String getMonthBeginTime() {
+        LocalDate today = LocalDate.now();
+        // 获取当前年份和月份
+        YearMonth currentYearMonth = YearMonth.from(today);
+        // 获取当前月份的第一天
+        LocalDate firstDayOfMonth = currentYearMonth.atDay(1);
+        LocalDateTime startOfDay = firstDayOfMonth.atStartOfDay();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        return startOfDay.format(formatter);
+    }
+
+
+    /**
+     * 获得当前月最后一天的时间终点,并格式化为yyyy-MM-dd HH:mm:ss
+     *
+     * @return
+     */
+    public static String getMonthEndTime() {
+        LocalDate today = LocalDate.now();
+        // 获取当前年份和月份
+        YearMonth currentYearMonth = YearMonth.from(today);
+        // 获取当前月份的最后一天
+        LocalDate lastDayOfMonth = currentYearMonth.atEndOfMonth();
+        LocalDateTime endOfDay = lastDayOfMonth.atTime(LocalTime.of(23, 59, 59));
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        return endOfDay.format(formatter);
+    }
+
+    /**
+     * 获取当前季度的开始时间,并格式化为yyyy-MM-dd HH:mm:ss
+     */
+    public static String getQuarterBeginTime() {
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+
+        // 获取当前日期所在的季度
+        int quarter = (today.getMonthValue() - 1) / 3 + 1;
+        // 获取当前季度的第一天
+        LocalDate firstDayOfQuarter = getFirstDayOfQuarter(today, quarter);
+        // 设置时间为00:00:00
+        LocalDateTime startOfQuarter = firstDayOfQuarter.atStartOfDay();
+        // 定义日期时间格式器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 格式化日期时间
+        return startOfQuarter.format(formatter);
+    }
+
+    /**
+     * 获取当前季度的结束时间,并格式化为yyyy-MM-dd HH:mm:ss
+     *
+     * @return
+     */
+    public static String getQuarterEndTime() {
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+
+        // 获取当前日期所在的季度
+        int quarter = (today.getMonthValue() - 1) / 3 + 1;
+
+        // 获取当前季度的最后一天
+        LocalDate lastDayOfQuarter = getLastDayOfQuarter(today, quarter);
+
+        // 设置时间为 23:59:59
+        LocalDateTime endOfQuarter = lastDayOfQuarter.atTime(LocalTime.of(23, 59, 59));
+
+        // 定义日期时间格式器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+        // 格式化日期时间
+        return endOfQuarter.format(formatter);
+    }
+
+    /**
+     * 获取当前日期所在年份的开始时间,并格式化为yyyy-MM-dd HH:mm:ss
+     *
+     * @return
+     */
+    public static String getYearBeginTime() {
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+
+        // 获取当前年份的第一天
+        LocalDate firstDayOfYear = LocalDate.of(today.getYear(), 1, 1);
+
+        // 设置时间为00:00:00
+        LocalDateTime startOfYear = firstDayOfYear.atStartOfDay();
+
+        // 定义日期时间格式器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+        // 格式化日期时间
+        return startOfYear.format(formatter);
+    }
+
+    /**
+     * 获取当前日期所在年份的结束时间,并格式化为yyyy-MM-dd HH:mm:ss
+     *
+     * @return
+     */
+    public static String getYearEndTime() {
+        //获取当前日期
+        LocalDate today = LocalDate.now();
+
+        //获取当前年份的最后一天
+        LocalDate endDayOfYear = LocalDate.of(today.getYear(), 12, 31);
+
+        // 设置时间为23:59:59
+        LocalDateTime endOfYear = endDayOfYear.atTime(LocalTime.of(23, 59, 59));
+
+        // 定义日期时间格式器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+        // 格式化日期时间
+        return endOfYear.format(formatter);
+    }
+
+
+    private static LocalDate getFirstDayOfQuarter(LocalDate date, int quarter) {
+        Month firstMonthOfQuarter;
+        switch (quarter) {
+            case 1:
+                firstMonthOfQuarter = Month.JANUARY;
+                break;
+            case 2:
+                firstMonthOfQuarter = Month.APRIL;
+                break;
+            case 3:
+                firstMonthOfQuarter = Month.JULY;
+                break;
+            case 4:
+                firstMonthOfQuarter = Month.OCTOBER;
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid quarter: " + quarter);
+        }
+        return LocalDate.of(date.getYear(), firstMonthOfQuarter, 1);
+    }
+
+    private static LocalDate getLastDayOfQuarter(LocalDate date, int quarter) {
+        Month lastMonthOfQuarter;
+        switch (quarter) {
+            case 1:
+                lastMonthOfQuarter = Month.MARCH;
+                break;
+            case 2:
+                lastMonthOfQuarter = Month.JUNE;
+                break;
+            case 3:
+                lastMonthOfQuarter = Month.SEPTEMBER;
+                break;
+            case 4:
+                lastMonthOfQuarter = Month.DECEMBER;
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid quarter: " + quarter);
+        }
+        return LocalDate.of(date.getYear(), lastMonthOfQuarter, lastMonthOfQuarter.maxLength());
+    }
+
+
+}