AlgScheduleCreateRequestDTO.java 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.usky.ai.dto;
  2. import com.fasterxml.jackson.annotation.JsonProperty;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import java.util.List;
  6. @Data
  7. @NoArgsConstructor
  8. public class AlgScheduleCreateRequestDTO {
  9. @JsonProperty("BoardId")
  10. private String boardId;
  11. @JsonProperty("Event")
  12. private String event = "/alg_schedule_create";
  13. @JsonProperty("name")
  14. private String name;
  15. @JsonProperty("summary")
  16. private String summary;
  17. @JsonProperty("timePeriods")
  18. private List<TimePeriod> timePeriods;
  19. @JsonProperty("value")
  20. private String value;
  21. public void convertTimePeriodsToBinary() {
  22. StringBuilder binaryValue = new StringBuilder();
  23. for (int i = 0; i < 336; i++) {
  24. binaryValue.append("0");
  25. }
  26. for (TimePeriod period : timePeriods) {
  27. processTimePeriod(binaryValue, period);
  28. }
  29. this.value = binaryValue.toString();
  30. }
  31. private void processTimePeriod(StringBuilder binaryValue, TimePeriod period) {
  32. // 将 dayOfWeek 转换为从 0 开始的索引
  33. int startDay = period.getDayOfWeek() - 1;
  34. int endDay = startDay; // 默认结束天数与开始天数相同
  35. if (period.getToDayOfWeek() != null) {
  36. endDay = period.getToDayOfWeek() - 1; // 如果有结束天数,也转换为从 0 开始的索引
  37. }
  38. // 计算开始和结束时间的分钟数
  39. int startMinutes = Integer.parseInt(period.getStartTime().substring(0, 2)) * 60 + Integer.parseInt(period.getStartTime().substring(3));
  40. int endMinutes = Integer.parseInt(period.getEndTime().substring(0, 2)) * 60 + Integer.parseInt(period.getEndTime().substring(3));
  41. // 计算开始和结束时间的索引
  42. int startIdx = (startDay * 48) + (startMinutes / 30);
  43. int endIdx = (endDay * 48) + (endMinutes / 30);
  44. // 填充时间段
  45. for (int i = startIdx; i < endIdx; i++) {
  46. binaryValue.setCharAt(i, '1');
  47. }
  48. }
  49. @Data
  50. @NoArgsConstructor
  51. public static class TimePeriod {
  52. @JsonProperty("dayOfWeek")
  53. private int dayOfWeek; // 0-6 表示周日到周六
  54. @JsonProperty("toDayOfWeek")
  55. private Integer toDayOfWeek; // 可选,表示连续的结束星期几
  56. @JsonProperty("startTime")
  57. private String startTime; // 格式为 "HH:mm"
  58. @JsonProperty("endTime")
  59. private String endTime; // 格式为 "HH:mm"
  60. }
  61. }