diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/holiday/controller/HolidayController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/holiday/controller/HolidayController.java index 27a32f5..e60b98f 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/holiday/controller/HolidayController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/holiday/controller/HolidayController.java @@ -22,10 +22,14 @@ import com.bonus.system.holiday.dao.WorkReportDao; import com.bonus.system.holiday.entity.HolidayBean; import com.bonus.system.holiday.service.HolidayService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; /** @@ -112,15 +116,23 @@ public class HolidayController extends BaseController { try { // 判断开始时间是否重复 List list = holidayDao.judgeRepeatStrat(o); - if(list.size()>0){ - return AjaxResult.error("当前提交的"+o.getLeaveType()+"开始日期与"+list.get(0).getType()+"存在冲突日期"+list.get(0).getLeaveStartDate()+"~"+list.get(0).getLeaveEndDate()); + String result = conflictOrNot(o,list,1); + if(StringUtils.isNotBlank(result)){ + return AjaxResult.error(result); } + /*if(list.size()>0){ + return AjaxResult.error("当前提交的"+o.getLeaveType()+"开始日期与"+list.get(0).getType()+"存在冲突日期"+list.get(0).getLeaveStartDate()+"~"+list.get(0).getLeaveEndDate()); + }*/ // 判断结束时间是否重复 List listEnd = holidayDao.judgeRepeatEnd(o); - if(listEnd.size()>0){ - return AjaxResult.error("当前提交的"+o.getLeaveType()+"结束日期与"+listEnd.get(0).getType()+"存在冲突日期"+list.get(0).getLeaveStartDate()+"~"+list.get(0).getLeaveEndDate()); + String result2 = conflictOrNot(o,listEnd,2); + if(StringUtils.isNotBlank(result2)){ + return AjaxResult.error(result2); } + /*if(listEnd.size()>0){ + return AjaxResult.error("当前提交的"+o.getLeaveType()+"结束日期与"+listEnd.get(0).getType()+"存在冲突日期"+list.get(0).getLeaveStartDate()+"~"+list.get(0).getLeaveEndDate()); + }*/ // 新增 int res = holidayService.insertHoliday(o); @@ -156,15 +168,23 @@ public class HolidayController extends BaseController { try { // 判断开始时间是否重复 List list = holidayDao.judgeRepeatStrat(o); - if(list.size()>0){ - return AjaxResult.error("当前提交的"+o.getLeaveType()+"开始日期与"+list.get(0).getType()+"存在冲突日期"+list.get(0).getLeaveStartDate()+"~"+list.get(0).getLeaveEndDate()); + String result = conflictOrNot(o,list,1); + if(StringUtils.isNotBlank(result)){ + return AjaxResult.error(result); } + /*if(list.size()>0){ + return AjaxResult.error("当前提交的"+o.getLeaveType()+"开始日期与"+list.get(0).getType()+"存在冲突日期"+list.get(0).getLeaveStartDate()+"~"+list.get(0).getLeaveEndDate()); + }*/ // 判断结束时间是否重复 List listEnd = holidayDao.judgeRepeatEnd(o); - if(listEnd.size()>0){ - return AjaxResult.error("当前提交的"+o.getLeaveType()+"结束日期与"+list.get(0).getType()+"存在冲突日期"+list.get(0).getLeaveStartDate()+"~"+list.get(0).getLeaveEndDate()); + String result2 = conflictOrNot(o,listEnd,2); + if(StringUtils.isNotBlank(result2)){ + return AjaxResult.error(result2); } + /*if(listEnd.size()>0){ + return AjaxResult.error("当前提交的"+o.getLeaveType()+"结束日期与"+list.get(0).getType()+"存在冲突日期"+list.get(0).getLeaveStartDate()+"~"+list.get(0).getLeaveEndDate()); + }*/ int res = holidayService.updateHoliday(o); return toAjax(res); @@ -174,6 +194,55 @@ public class HolidayController extends BaseController { return error("系统异常"); } + /** + * 判断日期是否冲突 + */ + public String conflictOrNot(HolidayBean o,List list,int type){ + if(CollectionUtils.isEmpty(list)){ + return null; + }else{ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + for (HolidayBean holidayBean : list) { + StringBuilder sb = new StringBuilder(); + StringBuilder sb2 = new StringBuilder(); + StringBuilder sb3 = new StringBuilder(); + String date = null,interval = null; + if(type == 1){ + date = holidayBean.getLeaveStartDate().format(formatter); + interval = o.getLeaveStartInterval(); + }else if(type == 2){ + date = holidayBean.getLeaveEndDate().format(formatter); + interval = o.getLeaveEndInterval(); + } + sb.append(date).append(interval); + String oldStartDate = holidayBean.getLeaveStartDate().format(formatter); + String oldEndDate = holidayBean.getLeaveEndDate().format(formatter); + sb2.append(oldStartDate).append(holidayBean.getLeaveStartInterval()); + sb3.append(oldEndDate).append(holidayBean.getLeaveEndInterval()); + // 校验数据是否冲突 + boolean inRange = isInRange(Long.parseLong(sb.toString()), Long.parseLong(sb2.toString()), Long.parseLong(sb3.toString())); + if(inRange && type == 1){ + return "当前提交的"+o.getLeaveType()+"开始日期与"+holidayBean.getType()+"存在冲突日期"+holidayBean.getLeaveStartDate()+"~"+holidayBean.getLeaveEndDate(); + }else if(inRange && type == 2){ + return "当前提交的"+o.getLeaveType()+"结束日期与"+holidayBean.getType()+"存在冲突日期"+holidayBean.getLeaveStartDate()+"~"+holidayBean.getLeaveEndDate(); + } + } + return null; + } + } + + /** + * 判断一个数值是否在指定区间范围内 + * + * @param number 要判断的数值 + * @param lowerBound 区间下限 + * @param upperBound 区间上限 + * @return 如果数值在区间内返回true,否则返回false + */ + public static boolean isInRange(Long number, Long lowerBound, Long upperBound) { + return number >= lowerBound && number <= upperBound; + } + /** * 删除请假单 */