|  | @@ -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);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 |