From f401cf5a1963d60df815a97d213e6ab47b5f662e Mon Sep 17 00:00:00 2001 From: XaoLi717 <144221124+XaoLi717@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:21:14 +0800 Subject: [PATCH] =?UTF-8?q?getWorkDayAi=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/calendar/CalendarController.java | 6 + .../admin/calendar/vo/CalendarAiVO.java | 27 +++++ .../service/calendar/CalendarService.java | 2 + .../service/calendar/CalendarServiceImpl.java | 106 ++++++++++++++++++ 4 files changed, 141 insertions(+) create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/calendar/vo/CalendarAiVO.java diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/calendar/CalendarController.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/calendar/CalendarController.java index 54e85d3..ae5e5ae 100644 --- a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/calendar/CalendarController.java +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/calendar/CalendarController.java @@ -45,6 +45,12 @@ public class CalendarController { return success(calendarService.getWorkDay(WorkDayVO)); } + @GetMapping("/getWorkDayAi") + @Operation(summary = "获取时间段内工作天数") + public CommonResult getWorkDayAI(@Valid CalendarAiVO WorkDayAiVO) { + return success(calendarService.getWorkDayAi(WorkDayAiVO)); + } + @PostMapping("/create") @Operation(summary = "创建工作日历数据") @PreAuthorize("@ss.hasPermission('home:calendar:create')") diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/calendar/vo/CalendarAiVO.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/calendar/vo/CalendarAiVO.java new file mode 100644 index 0000000..14317be --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/calendar/vo/CalendarAiVO.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.home.controller.admin.calendar.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotEmpty; + +@Schema(description = "管理后台 - 工作日历数据分页 Ai VO") +@Data +@ToString(callSuper = true) +public class CalendarAiVO { +// startTime: "2024-12-09 09:00:00", +// endTime: "2024-12-09 18:00:00", + + @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "开始时间不能为空") + private String startTime; + + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "结束时间不能为空") + private String endTime; + +} diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/calendar/CalendarService.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/calendar/CalendarService.java index 1097859..658bc61 100644 --- a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/calendar/CalendarService.java +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/calendar/CalendarService.java @@ -60,4 +60,6 @@ public interface CalendarService { * @return */ BigDecimal getWorkDay(CalendarPageReqVO workDayVO); + + BigDecimal getWorkDayAi(CalendarAiVO workDayAiVO); } diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/calendar/CalendarServiceImpl.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/calendar/CalendarServiceImpl.java index 4d2ce11..213fb42 100644 --- a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/calendar/CalendarServiceImpl.java +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/calendar/CalendarServiceImpl.java @@ -161,6 +161,8 @@ public class CalendarServiceImpl implements CalendarService { // 获取开始结束时间 Integer sHour = workDayVO.getSHour(); Integer eHour = workDayVO.getEHour(); + System.out.println("sHour: " + sHour); + System.out.println("eHour: " + eHour); // 判断开始结束时间 if (sHour == null || eHour == null) { return null; @@ -168,6 +170,8 @@ public class CalendarServiceImpl implements CalendarService { // 获取开始日期结束日期传递的isWorkDay参数 String sDay = workDayVO.getDate()[0]; String eDay = workDayVO.getDate()[1]; + System.out.println("sDay: " + sDay); + System.out.println("eDay: " + eDay); Integer isWork = workDayVO.getIsWorkday(); // 设置开始时间vo判断开始天数是否为工作日 CalendarPageReqVO sWorkDayVO = new CalendarPageReqVO(); @@ -177,6 +181,7 @@ public class CalendarServiceImpl implements CalendarService { CalendarPageReqVO eWorkDayVO = new CalendarPageReqVO(); eWorkDayVO.setDate(new String[]{eDay, eDay}); eWorkDayVO.setIsWorkday(isWork); + System.out.println("workDayVO: " + workDayVO); // 获取开始结束工作日天数,获取时间段内工作日天数 Long sTotal = calendarMapper.selectPage(sWorkDayVO).getTotal(); Long eTotal = calendarMapper.selectPage(eWorkDayVO).getTotal(); @@ -235,4 +240,105 @@ public class CalendarServiceImpl implements CalendarService { return result; } + + + + @Override + public BigDecimal getWorkDayAi(CalendarAiVO workDayAiVO) { + // 储存判断后扣除天数 + float day = 0.0f; + int sWorkHour = 0; + int eWorkHour = 0; + // 储存返回天数 + BigDecimal result = null; + + DateTimeFormatter formatterYMDHMS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + DateTimeFormatter formatterYMD = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 使用 formatter 解析字符串为 LocalDateTime + LocalDateTime sDateTime = LocalDateTime.parse(workDayAiVO.getStartTime(), formatterYMDHMS); + LocalDateTime eDateTime = LocalDateTime.parse(workDayAiVO.getEndTime(), formatterYMDHMS); + + System.out.println("sDateTime: " + sDateTime); + System.out.println("eDateTime: " + eDateTime); + // 获取开始结束时间 + Integer sHour = sDateTime.getHour(); + Integer eHour = eDateTime.getHour(); + System.out.println("sHour: " + sHour); + System.out.println("eHour: " + eHour); + // 获取开始日期结束日期传递的isWorkDay参数 + String sDay = sDateTime.format(formatterYMD); + String eDay = eDateTime.format(formatterYMD); + System.out.println("sDay: " + sDay); + System.out.println("eDay: " + eDay); + // 设置开始时间vo判断开始天数是否为工作日 + CalendarPageReqVO sWorkDayVO = new CalendarPageReqVO(); + sWorkDayVO.setDate(new String[]{sDay, sDay}); + sWorkDayVO.setIsWorkday(1); + // 设置结束时间vo判断结束天数是否为工作日 + CalendarPageReqVO eWorkDayVO = new CalendarPageReqVO(); + eWorkDayVO.setDate(new String[]{eDay, eDay}); + eWorkDayVO.setIsWorkday(1); + // 时间段vo + CalendarPageReqVO workDayVO = new CalendarPageReqVO(); + workDayVO.setDate(new String[]{sDay, eDay}); + workDayVO.setIsWorkday(1); + workDayVO.setPageSize(1); + System.out.println("workDayVO: " + workDayVO); + // 获取开始结束工作日天数,获取时间段内工作日天数 + Long sTotal = calendarMapper.selectPage(sWorkDayVO).getTotal(); + Long eTotal = calendarMapper.selectPage(eWorkDayVO).getTotal(); + Long total = calendarMapper.selectPage(workDayVO).getTotal(); + // 判断总过天数不为0时才判断否则直接返回 + if (total >= 1) { + // 判断开始天为工作日时才判断 + if (sTotal > 0) { + // 开始日期的时间判断 + if (sHour < 8 ) { + day += 0f; + } else if (sHour <= 12) { + sWorkHour = 16 - sHour; + } else if (sHour < 17 ) { + sWorkHour = 17 - sHour; + } else { + day += 1f; + } + } + // 判断结束天为工作日时才判断 + if (eTotal > 0) { + // 结束日期的时间判断 + if (eHour <= 8 ) { + day += 1f; + } else if (eHour <= 12) { + eWorkHour = eHour - 8; + }else if (eHour <= 17 ) { + eWorkHour = eHour - 9; + } else { + day += 0f; + } + } + // 计算开始时间 + if (sWorkHour == 1) { + day += 1F; + } else if (sWorkHour >= 2&&sWorkHour <= 4) { + day += 0.5F; + } else if (sWorkHour > 4) { + day += 0F; + } + // 计算结束时间 + if (eWorkHour != 0 && eWorkHour <= 5) { + day += 0.5F; + } else if (eWorkHour > 5) { + day += 0F; + } + // 小时数相等时 + if (sHour.equals(eHour)) { + day = 1; + } + } + // 计算总工作日期,需要减去的对应天数 + result = BigDecimal.valueOf(total) + .subtract(BigDecimal.valueOf(day)) + .setScale(1, RoundingMode.HALF_UP); + return result; + } }