|
|
@@ -43,6 +43,7 @@ import com.xunmei.common.core.utils.DateUtils;
|
|
|
import com.xunmei.common.core.web.domain.AjaxResult;
|
|
|
import com.xunmei.common.core.web.page.TableDataInfo;
|
|
|
import com.xunmei.common.security.utils.SecurityUtils;
|
|
|
+import com.xunmei.core.TaskCreatingServiceImplBase;
|
|
|
import com.xunmei.core.edu.mapper.*;
|
|
|
import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
|
|
|
import com.xunmei.core.edu.service.ICoreEduTrainingTaskToUserService;
|
|
|
@@ -454,105 +455,30 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 将当前周期开始结束时间,按频次拆分为多个时段。如果该时段歇业,则不包含该次,如返回次数1,3.
|
|
|
- *
|
|
|
- * @param frequency
|
|
|
- * @param start
|
|
|
- * @param end
|
|
|
- * @param workTimes,为null则认为全是营业
|
|
|
- * @return
|
|
|
- */
|
|
|
- private Map<Short, DateRange> splitTaskTime(Short frequency, CycleCommonEnum cycle, Date start, Date end, List<SysWorkTime> workTimes) {
|
|
|
- boolean sameDay = DateUtil.isSameDay(start, end); //一天内按半小时分,
|
|
|
-
|
|
|
- DateUnit dateUnit;
|
|
|
- DateField dateField;
|
|
|
- if (sameDay) {
|
|
|
- dateField = DateField.MINUTE;
|
|
|
- dateUnit = DateUnit.MINUTE;
|
|
|
- } else {
|
|
|
- dateField = DateField.DAY_OF_YEAR;
|
|
|
- dateUnit = DateUnit.DAY;
|
|
|
- }
|
|
|
- double diff = DateUtil.between(start, end, dateUnit);
|
|
|
- double seg = diff / frequency;
|
|
|
- if (sameDay) {
|
|
|
- seg = Math.round(seg / 30) * 30;
|
|
|
- } else {
|
|
|
- seg = Math.round(seg);
|
|
|
- if (cycle == CycleCommonEnum.DAILY && frequency == 3) {
|
|
|
- seg = 10;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- DateTime segStart = new DateTime(start);
|
|
|
-
|
|
|
- Map<Short, DateRange> r = new HashMap<>();
|
|
|
- for (short i = 1; i <= frequency; i++) {
|
|
|
- if (dateField == DateField.DAY_OF_YEAR) {
|
|
|
- segStart.setField(DateField.HOUR, 0)
|
|
|
- .setField(DateField.MINUTE, 0)
|
|
|
- .setField(DateField.SECOND, 0)
|
|
|
- .setField(DateField.MILLISECOND, 0);
|
|
|
- }
|
|
|
- DateTime nextStart = DateUtil.offset(segStart, dateField, (int) (seg));
|
|
|
- DateRange et = new DateRange();
|
|
|
- et.setStartTime(segStart);
|
|
|
- DateTime segEnd;
|
|
|
- if (i == frequency) {
|
|
|
- segEnd = new DateTime(end);
|
|
|
- } else {
|
|
|
- segEnd = nextStart;
|
|
|
-
|
|
|
- if (dateField == DateField.DAY_OF_YEAR) {
|
|
|
- segEnd = DateUtil.offset(nextStart, DateField.SECOND, -1);
|
|
|
- segEnd.setField(DateField.HOUR_OF_DAY, 23).setField(DateField.MINUTE, 59).setField(DateField.SECOND, 59);
|
|
|
- }
|
|
|
- if (segEnd.after(end)) {
|
|
|
- segEnd = new DateTime(end);
|
|
|
- }
|
|
|
- }
|
|
|
- segEnd.setField(DateField.MILLISECOND, 0);
|
|
|
- et.setEndTime(segEnd);
|
|
|
- segStart = nextStart;
|
|
|
-
|
|
|
- if (segEnd.before(new Date())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- if (workTimes == null || containCurrentCycle(workTimes, et.getStartTime(), et.getEndTime())) {
|
|
|
- r.put(i, et);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return r;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取作息日期与当前周期是否有交集
|
|
|
- *
|
|
|
- * @param workTimes
|
|
|
- * @param start
|
|
|
- * @param end
|
|
|
- * @return
|
|
|
- */
|
|
|
- private Boolean containCurrentCycle(List<SysWorkTime> workTimes, Date start, Date end) {
|
|
|
- if (start.after(end)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- Set<Long> timeValues = workTimes.stream().map(t -> t.getYmdDate().getTime()).collect(Collectors.toSet());
|
|
|
- while (true) {
|
|
|
- if (timeValues.contains(DateUtil.beginOfDay(start).getTime())) {
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- start = DateUtil.offset(start, DateField.DAY_OF_YEAR, 1);
|
|
|
- if (start.equals(end) || start.after(end)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+// /**
|
|
|
+// * 获取作息日期与当前周期是否有交集
|
|
|
+// *
|
|
|
+// * @param workTimes
|
|
|
+// * @param start
|
|
|
+// * @param end
|
|
|
+// * @return
|
|
|
+// */
|
|
|
+// private Boolean containCurrentCycle(List<SysWorkTime> workTimes, Date start, Date end) {
|
|
|
+// if (start.after(end)) {
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// Set<Long> timeValues = workTimes.stream().map(t -> t.getYmdDate().getTime()).collect(Collectors.toSet());
|
|
|
+// while (true) {
|
|
|
+// if (timeValues.contains(DateUtil.beginOfDay(start).getTime())) {
|
|
|
+// return true;
|
|
|
+// }
|
|
|
+//
|
|
|
+// start = DateUtil.offset(start, DateField.DAY_OF_YEAR, 1);
|
|
|
+// if (start.equals(end) || start.after(end)) {
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
|
|
|
private void saveTaskAndRoleData(CoreEduTrainingPlanDataVo plan, Date start, Date end, List<SysOrg> orgList, List<SysWorkTime> workTimeList) {
|
|
|
@@ -576,12 +502,12 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
|
|
|
Map<Short, DateRange> rangeMap;
|
|
|
if (OrgTypeEnum.YINGYE_WANGDIAN.getCode().equals(org.getType())) {
|
|
|
if (ObjectUtil.isNotEmpty(listMap.get(org.getId()))) {
|
|
|
- rangeMap = splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, listMap.get(org.getId()));
|
|
|
+ rangeMap = TaskCreatingServiceImplBase.splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, listMap.get(org.getId()));
|
|
|
} else {
|
|
|
continue;
|
|
|
}
|
|
|
} else {
|
|
|
- rangeMap = splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, null);
|
|
|
+ rangeMap = TaskCreatingServiceImplBase.splitTaskTime(plan.getExecTimes().shortValue(), EduTrainingPlanCycleEnum.toCommonEnum(plan.getPlanCycle()), start, end, null);
|
|
|
}
|
|
|
|
|
|
|