luojun 1 год назад
Родитель
Сommit
34f59f2817

+ 33 - 26
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeSetServiceImpl.java

@@ -276,8 +276,8 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         for (Long oid :
                 orgIds) {
             List<SysWorkTimeSet> sysWorkTimeSets = baseMapper.selectList(new LambdaQueryWrapper<SysWorkTimeSet>().eq(SysWorkTimeSet::getOrgId, oid).eq(SysWorkTimeSet::getEffectiveDate, request.getEffectiveDate()));
-
-            if (sysWorkTimeSets.size()>0){
+//如果id为空表示是新增,需要判断是否存在相同机构相同时间的模板
+            if (request.getId() == null && sysWorkTimeSets.size() > 0) {
                 return error("机构'" + orgService.getById(oid).getName() + "'已存在选择时间的作息模板");
             }
         }
@@ -292,6 +292,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
             SysWorkTimeSet set = null;
             SysOrg org = null;
             List<SysWorkTimeSetDayofweek> dayOfWeeks = new ArrayList<>();
+            Set<Long> workTimeSetIds = new HashSet<>();
             for (Long orgId : orgIds) {
                 if (request.getId() != null) {
                     set = sysWorkTimeSetMapper.selectById(request.getId());
@@ -328,9 +329,10 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
                 dayOfWeeks.addAll(tmp);
                 set.setDayOfWeeks(dayOfWeeks);
                 sets.add(set);
+                workTimeSetIds.add(id);
             }
-
-            // workTimeSetDayOfWeekRepository.deleteByWorkTimeSetIds(oldWorkTimeSetIds);
+            //清除可能存在的旧作息数据
+            sysWorkTimeSetDayofweekMapper.delete(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().in(SysWorkTimeSetDayofweek::getWorkTimeSetId, workTimeSetIds));
             for (SysWorkTimeSetDayofweek s :
                     dayOfWeeks) {
                 sysWorkTimeSetDayofweekMapper.insert(s);
@@ -419,7 +421,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
                             Date effectiveDateNext = dateList.get(index + 1);
                             //取出workTimeEditDtoListAll中ymd_date在EffectiveDate和effectiveDateNext之间的数据
                             List<SysWorkTime> workTimeEditDtoList = workTimeEditDtoListAll.stream().filter(f -> f.getDate().getTime() >= effectiveDate.getTime() && f.getDate().getTime() < effectiveDateNext.getTime()).collect(Collectors.toList());
-                            List<Date> remDates=workTimeEditDtoList.stream().map(SysWorkTime::getYmdDate).collect(Collectors.toList());
+                            List<Date> remDates = workTimeEditDtoList.stream().map(SysWorkTime::getYmdDate).collect(Collectors.toList());
                             workTimeService.remove(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).in(SysWorkTime::getYmdDate, remDates).eq(SysWorkTime::getIsManual, 0));
                             batchnew(orgId, workTimeEditDtoList, list);
                         } else {
@@ -464,8 +466,10 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
             return workTime;
         }, true);
 
-
-               List<SysWorkTime> exit = workTimeService.getBaseMapper().selectList(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).ge(SysWorkTime::getYmdDate, workTimeList.get(0).getDate()).eq(SysWorkTime::getIsManual, 1));
+        //获取当前时间以后的手动配置的作息
+        List<SysWorkTime> exit = workTimeService.getBaseMapper().selectList(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).ge(SysWorkTime::getYmdDate, workTimeList.get(0).getDate()).eq(SysWorkTime::getIsManual, 1));
+        //删除当前时间以后的模板生成的作息
+        sysWorkTimeMapper.delete(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getOrgId, orgId).ge(SysWorkTime::getYmdDate, workTimeList.get(0).getDate()).eq(SysWorkTime::getIsManual, 0));
         //去掉workTimeList中orgId和ymd相同的数据
         List<SysWorkTime> list1 = workTimeList.stream().filter(s -> {
             return list.stream().noneMatch(f -> f.getOrgId().equals(s.getOrgId()) && f.getYmdDate().equals(s.getYmd().getDate()));
@@ -496,7 +500,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
                 }
             }
         }
-        list1=list1.stream().distinct().collect(Collectors.toList());
+        list1 = list1.stream().distinct().collect(Collectors.toList());
         workTimeService.saveOrUpdateBatch(list1);
 
         return workTimeList;
@@ -558,6 +562,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
     public int deleteSysWorkTimeSetById(Long id) {
         return sysWorkTimeSetMapper.deleteById(id);
     }
+
     /**
      * 生成下个月的作息
      */
@@ -582,8 +587,8 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         calendar.set(Calendar.MONTH, month);
         calendar.set(Calendar.YEAR, year);
         System.out.println("============================ work_time_job 1================== : " + calendar.getTime());
-        List<SysWorkTimeSet> workTimes = this.list(new LambdaQueryWrapper<SysWorkTimeSet>().eq(SysWorkTimeSet::getYear,year));
-        Map<Long,List<SysWorkTimeSet>> group= workTimes.stream()
+        List<SysWorkTimeSet> workTimes = this.list(new LambdaQueryWrapper<SysWorkTimeSet>().eq(SysWorkTimeSet::getYear, year));
+        Map<Long, List<SysWorkTimeSet>> group = workTimes.stream()
                 .sorted(Comparator.comparing(SysWorkTimeSet::getEffectiveDate).reversed())
                 .collect(Collectors.groupingBy(SysWorkTimeSet::getOrgId));
 
@@ -604,25 +609,26 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         List<SysWorkTime> workTimeEditDtoList = new ArrayList<>();
         for (DateTime time : dateTimeList) {
             Date date1 = time.toJdkDate();
-            System.out.println("date1:"+date1);
+            System.out.println("date1:" + date1);
             //for(Long orgId:group.keySet()) {
-            for(Map.Entry<Long,List<SysWorkTimeSet>> setMap:group.entrySet()){
-                Optional<SysWorkTimeSet> ws=   setMap.getValue().stream().filter(w->date1.after(w.getEffectiveDate())||DateUtil.isSameDay(date1,w.getEffectiveDate())).findFirst();
-                if(!ws.isPresent()){
+            for (Map.Entry<Long, List<SysWorkTimeSet>> setMap : group.entrySet()) {
+                Optional<SysWorkTimeSet> ws = setMap.getValue().stream().filter(w -> date1.after(w.getEffectiveDate()) || DateUtil.isSameDay(date1, w.getEffectiveDate())).findFirst();
+                if (!ws.isPresent()) {
                     continue;
                 }
-                SysWorkTimeSet set=ws.get();
+                SysWorkTimeSet set = ws.get();
                 List<SysWorkTimeSetDayofweek> temp = this.sysWorkTimeSetDayofweekMapper.selectList(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().eq(SysWorkTimeSetDayofweek::getWorkTimeSetId, set.getId()));
                 set.setDayOfWeeks(temp);
                 Long i = (long) time.dayOfWeek();
-                SysWorkTimeSetDayofweek dayOfWeekSet = temp.stream().filter(e->e.getDayOfWeek().equals(i)).findFirst().orElse(null);;
-                boolean isEnable = ObjectUtil.isNotNull(dayOfWeekSet) && dayOfWeekSet.getIsWorkday()>0;
+                SysWorkTimeSetDayofweek dayOfWeekSet = temp.stream().filter(e -> e.getDayOfWeek().equals(i)).findFirst().orElse(null);
+                ;
+                boolean isEnable = ObjectUtil.isNotNull(dayOfWeekSet) && dayOfWeekSet.getIsWorkday() > 0;
                 SysWorkTime dto = new SysWorkTime();
                 dto.setDate(time);
                 dto.setOrgId(setMap.getKey());
-                dto.setIsEnable(isEnable?1L:0L);
-                if (ObjectUtil.isNull(dayOfWeekSet) || !(dayOfWeekSet.getIsWorkday()>0)) {
-                    Optional<SysWorkTimeSetDayofweek> firstWorkDay = set.getDayOfWeeks().stream().filter(f -> f.getIsWorkday()>0).findFirst();
+                dto.setIsEnable(isEnable ? 1L : 0L);
+                if (ObjectUtil.isNull(dayOfWeekSet) || !(dayOfWeekSet.getIsWorkday() > 0)) {
+                    Optional<SysWorkTimeSetDayofweek> firstWorkDay = set.getDayOfWeeks().stream().filter(f -> f.getIsWorkday() > 0).findFirst();
                     if (firstWorkDay.isPresent()) {
                         dayOfWeekSet = firstWorkDay.orElseGet(SysWorkTimeSetDayofweek::new);
                     }
@@ -639,21 +645,21 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
             }
         }
 
-        Map<Long,List<SysWorkTime>> groupDay= workTimeEditDtoList.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
+        Map<Long, List<SysWorkTime>> groupDay = workTimeEditDtoList.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
         //获取所有机构下个月的按日配置的作息
         List<SysWorkTime> list = new ArrayList<>();
-        list = this.sysWorkTimeMapper.selectList(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getIsManual,1L).likeRight(SysWorkTime::getYmdDate,DateUtil.format(start, "yyyy-MM")));
+        list = this.sysWorkTimeMapper.selectList(new LambdaQueryWrapper<SysWorkTime>().eq(SysWorkTime::getIsManual, 1L).likeRight(SysWorkTime::getYmdDate, DateUtil.format(start, "yyyy-MM")));
         /*for(Long orgId:groupDay.keySet()){*/
-        for(Map.Entry<Long,List<SysWorkTime>> dayMap:groupDay.entrySet()){
+        for (Map.Entry<Long, List<SysWorkTime>> dayMap : groupDay.entrySet()) {
             List<SysWorkTime> workTimeEditDtos = dayMap.getValue();//groupDay.get(orgId);
             List<SysWorkTime> workTimeNewVos = list.stream().filter(w -> w.getOrgId().equals(dayMap.getKey())).collect(Collectors.toList());
             //去掉workTimeEditDtos中机构与日期在workTimeNewVos中存在的数据
             List<SysWorkTime> list1 = null;
-            if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(workTimeNewVos)){
+            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(workTimeNewVos)) {
                 list1 = workTimeEditDtos.stream().filter(s -> {
                     return workTimeNewVos.stream().noneMatch(f -> f.getOrgId().equals(s.getOrgId()) && f.getYmdDate().equals(s.getDate()));
                 }).collect(Collectors.toList());
-            }else{
+            } else {
                 list1 = workTimeEditDtos;
             }
 
@@ -661,6 +667,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         }
 
     }
+
     /**
      * @param orgId
      * @param month
@@ -691,7 +698,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
             BeanHelper.copyProperties(workTime, workTimeEditDto);
             workTime.setIsManual(0L);
             workTime.setIsEnable(workTimeEditDto.getIsEnable());
-            if(!(workTimeEditDto.getIsEnable()>0)){
+            if (!(workTimeEditDto.getIsEnable() > 0)) {
                 workTime.setWorkTime(null);
                 workTime.setWorkOffTime(null);
                 workTime.setOpenTime(null);