|
|
@@ -28,6 +28,7 @@ import com.xunmei.system.util.StreamHelper;
|
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.xunmei.system.service.ISysOrgService;
|
|
|
|
|
|
@@ -132,10 +133,10 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
sysWorkTimeSet.setOrgId(null);
|
|
|
//添加in条件
|
|
|
query.in("t.org_id", ids);
|
|
|
- }else{
|
|
|
- query.eq("t.org_id",sysWorkTimeSet.getOrgId());
|
|
|
+ } else {
|
|
|
+ query.eq("t.org_id", sysWorkTimeSet.getOrgId());
|
|
|
}
|
|
|
- if(sysWorkTimeSet.getOrgType()!=null){
|
|
|
+ if (sysWorkTimeSet.getOrgType() != null) {
|
|
|
query.eq("o.type", sysWorkTimeSet.getOrgType());
|
|
|
}
|
|
|
query.orderByDesc
|
|
|
@@ -280,93 +281,104 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
* 2)定时任务在每年11月15日自动生成下一年的作息。
|
|
|
* 3)修改作息模版后,自动修改生效日期后的已生成的作息
|
|
|
* 4)以最新修改为准,包括模版和app单日修改
|
|
|
+ *
|
|
|
* @param request
|
|
|
* @return
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public AjaxResult add(SysWorkTimeSet request) {
|
|
|
- if(ObjectUtil.isNull(request.getEffectiveDate())){
|
|
|
+ if (ObjectUtil.isNull(request.getEffectiveDate())) {
|
|
|
return error("作息模板的生效日期不能为空");
|
|
|
}
|
|
|
|
|
|
- if(DateUtil.endOfDay(DateTime.now()).after(request.getEffectiveDate()))
|
|
|
- {
|
|
|
+ if (DateUtil.endOfDay(DateTime.now()).after(request.getEffectiveDate())) {
|
|
|
return error("作息模板的生效日期必须大于今天");
|
|
|
}
|
|
|
|
|
|
- if(CollectionUtils.isEmpty(request.getOrgIds()))
|
|
|
- {
|
|
|
+ if (CollectionUtils.isEmpty(request.getOrgIds())) {
|
|
|
return error("作息模板机构不能为空");
|
|
|
}
|
|
|
|
|
|
List<Long> orgIds = request.getOrgIds();
|
|
|
|
|
|
- for (Long oid : orgIds) {
|
|
|
+ /* for (Long oid : orgIds) {
|
|
|
List<SysWorkTimeSet> sysWorkTimeSets = baseMapper.selectList(new LambdaQueryWrapper<SysWorkTimeSet>().eq(SysWorkTimeSet::getOrgId, oid));
|
|
|
//如果id为空表示是新增,需要判断是否存在相同机构相同时间的模板
|
|
|
if (request.getId() == null && sysWorkTimeSets.size() > 0) {
|
|
|
return error("机构'" + orgService.getById(oid).getName() + "'已存在作息模板,一个机构只允许同时存在一个作息模板");
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
// int year = Calendar.getInstance().get(Calendar.YEAR);
|
|
|
int year = new DateHelper(request.getEffectiveDate()).getYear();
|
|
|
|
|
|
// if (CollectionUtils.isNotEmpty(orgIds)) {
|
|
|
- List<SysWorkTimeSet> sets = new ArrayList<>();
|
|
|
- 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());
|
|
|
- } else {
|
|
|
- set = new SysWorkTimeSet();
|
|
|
- org = orgService.selectSysOrgById(orgId);
|
|
|
- }
|
|
|
- BeanHelper.copyProperties(set, request);
|
|
|
- set.setOrgId(orgId);
|
|
|
- set.setYear((long) year);
|
|
|
- set.setDayOfWeeks(new ArrayList<>());
|
|
|
- if (set.getId() == null) {
|
|
|
- if (org != null) {
|
|
|
- set.setOrgName(org.getShortName());
|
|
|
- }
|
|
|
- set.setCreateTime(new Date());
|
|
|
- set.setCreateBy(SecurityUtils.getUsername());
|
|
|
- sysWorkTimeSetMapper.insert(set);
|
|
|
+ List<SysWorkTimeSet> sets = new ArrayList<>();
|
|
|
+ SysWorkTimeSet set = null;
|
|
|
+ SysOrg org = null;
|
|
|
+ List<SysWorkTimeSetDayofweek> dayOfWeeks = new ArrayList<>();
|
|
|
+ Set<Long> workTimeSetIds = new HashSet<>();
|
|
|
+ for (Long orgId : orgIds) {
|
|
|
+
|
|
|
+ QueryWrapper<SysWorkTimeSet> qw = new QueryWrapper<>();
|
|
|
+ qw.lambda().eq(SysWorkTimeSet::getOrgId, orgId);
|
|
|
+ SysWorkTimeSet sysWorkTimeSet = sysWorkTimeSetMapper.selectList(qw).get(0);
|
|
|
+ if(sysWorkTimeSet != null){
|
|
|
+ set = sysWorkTimeSet;
|
|
|
+ }else{
|
|
|
+ set = new SysWorkTimeSet();
|
|
|
+ org = orgService.selectSysOrgById(orgId);
|
|
|
+ }
|
|
|
|
|
|
- } else {
|
|
|
- set.setUpdateTime(new Date());
|
|
|
- set.setUpdateBy(SecurityUtils.getUsername());
|
|
|
- sysWorkTimeSetMapper.updateById(set);
|
|
|
+
|
|
|
+ /*if (request.getId() != null) {
|
|
|
+ set = sysWorkTimeSetMapper.selectById(request.getId());
|
|
|
+ } else {
|
|
|
+ set = new SysWorkTimeSet();
|
|
|
+ org = orgService.selectSysOrgById(orgId);
|
|
|
+ }*/
|
|
|
+ BeanHelper.copyProperties(set, request);
|
|
|
+ set.setOrgId(orgId);
|
|
|
+ set.setYear((long) year);
|
|
|
+ set.setDayOfWeeks(new ArrayList<>());
|
|
|
+ set.setUpdateTime(new Date());
|
|
|
+ set.setUpdateBy(SecurityUtils.getUsername());
|
|
|
+ if (set.getId() == null) {
|
|
|
+ if (org != null) {
|
|
|
+ set.setOrgName(org.getShortName());
|
|
|
}
|
|
|
+ set.setCreateTime(new Date());
|
|
|
+ set.setCreateBy(SecurityUtils.getUsername());
|
|
|
+ sysWorkTimeSetMapper.insert(set);
|
|
|
|
|
|
- Long id = set.getId();
|
|
|
-
|
|
|
- List<SysWorkTimeSetDayofweek> tmp = request.getDayOfWeeks().stream().map(w -> {
|
|
|
- SysWorkTimeSetDayofweek dw = new SysWorkTimeSetDayofweek();
|
|
|
- BeanUtils.copyProperties(w, dw);
|
|
|
- return dw;
|
|
|
- }).collect(Collectors.toList());
|
|
|
- tmp.forEach(w -> {
|
|
|
- w.setWorkTimeSetId(id);
|
|
|
- });
|
|
|
-
|
|
|
- dayOfWeeks.addAll(tmp);
|
|
|
- set.setDayOfWeeks(dayOfWeeks);
|
|
|
- sets.add(set);
|
|
|
- workTimeSetIds.add(id);
|
|
|
- }
|
|
|
- //清除可能存在的旧作息数据
|
|
|
- sysWorkTimeSetDayofweekMapper.delete(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().in(SysWorkTimeSetDayofweek::getWorkTimeSetId, workTimeSetIds));
|
|
|
- for (SysWorkTimeSetDayofweek s : dayOfWeeks) {
|
|
|
- sysWorkTimeSetDayofweekMapper.insert(s);
|
|
|
- }
|
|
|
- if (CollectionUtils.isNotEmpty(dayOfWeeks)) {
|
|
|
- changeOrgWorkTime(sets, request.getEffectiveDate(), orgIds);
|
|
|
+ } else {
|
|
|
+ sysWorkTimeSetMapper.updateById(set);
|
|
|
}
|
|
|
+
|
|
|
+ Long id = set.getId();
|
|
|
+
|
|
|
+ List<SysWorkTimeSetDayofweek> tmp = request.getDayOfWeeks().stream().map(w -> {
|
|
|
+ SysWorkTimeSetDayofweek dw = new SysWorkTimeSetDayofweek();
|
|
|
+ BeanUtils.copyProperties(w, dw);
|
|
|
+ return dw;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ tmp.forEach(w -> {
|
|
|
+ w.setWorkTimeSetId(id);
|
|
|
+ });
|
|
|
+
|
|
|
+ dayOfWeeks.addAll(tmp);
|
|
|
+ set.setDayOfWeeks(dayOfWeeks);
|
|
|
+ sets.add(set);
|
|
|
+ workTimeSetIds.add(id);
|
|
|
+ }
|
|
|
+ //清除可能存在的旧作息数据
|
|
|
+ sysWorkTimeSetDayofweekMapper.delete(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().in(SysWorkTimeSetDayofweek::getWorkTimeSetId, workTimeSetIds));
|
|
|
+ for (SysWorkTimeSetDayofweek s : dayOfWeeks) {
|
|
|
+ sysWorkTimeSetDayofweekMapper.insert(s);
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(dayOfWeeks)) {
|
|
|
+ changeOrgWorkTime(sets, request.getEffectiveDate(), orgIds);
|
|
|
+ }
|
|
|
// }
|
|
|
return success();
|
|
|
}
|
|
|
@@ -464,7 +476,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void changeOrgWorkTime(List<SysWorkTimeSet> sets,Date effectiveDate, List<Long> orgIds) {
|
|
|
+ private void changeOrgWorkTime(List<SysWorkTimeSet> sets, Date effectiveDate, List<Long> orgIds) {
|
|
|
//如果生效年份等于当前年份,那么就重新生成生效日期后当年以及下一年的作息时间
|
|
|
int effectiveYear = new DateHelper(effectiveDate).getYear();
|
|
|
int dateNowYear = new DateHelper(new Date()).getYear();
|
|
|
@@ -492,13 +504,13 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
for (SysWorkTimeSet workTime : sets) {
|
|
|
List<SysWorkTime> workTimeEditDtoList = new ArrayList<>();
|
|
|
for (DateTime time : dateTimeList) {
|
|
|
- Optional<SysWorkTimeSetDayofweek> dayOfWeekSetNew = workTime.getDayOfWeeks().stream().filter(w -> w.getDayOfWeek() == time.dayOfWeek() ).findFirst();
|
|
|
+ Optional<SysWorkTimeSetDayofweek> dayOfWeekSetNew = workTime.getDayOfWeeks().stream().filter(w -> w.getDayOfWeek() == time.dayOfWeek()).findFirst();
|
|
|
SysWorkTimeSetDayofweek dayOfWeekSet = dayOfWeekSetNew.orElse(null);
|
|
|
boolean isEnable = ObjectUtil.isNotNull(dayOfWeekSet) && ObjectUtil.isNotNull(dayOfWeekSet.getIsWorkday()) && dayOfWeekSet.getIsWorkday() > 0;
|
|
|
SysWorkTime dto = new SysWorkTime();
|
|
|
dto.setDate(time);
|
|
|
dto.setIsEnable(isEnable ? 1L : 0);
|
|
|
- dto.setIsDuty(ObjectUtil.isNotNull(dayOfWeekSet)?dayOfWeekSet.getIsDuty():null);
|
|
|
+ dto.setIsDuty(ObjectUtil.isNotNull(dayOfWeekSet) ? dayOfWeekSet.getIsDuty() : null);
|
|
|
|
|
|
if (ObjectUtil.isNull(dayOfWeekSet) || !(dayOfWeekSet.getIsWorkday() > 0)) {
|
|
|
Optional<SysWorkTimeSetDayofweek> firstWorkDay = workTime.getDayOfWeeks().stream().filter(f -> f.getIsWorkday() > 0).findFirst();
|
|
|
@@ -699,15 +711,16 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void generateNextYear() {
|
|
|
- List<DateTime> dateTimeList= getNextYearDateList();
|
|
|
+ List<DateTime> dateTimeList = getNextYearDateList();
|
|
|
generateWorkTime(dateTimeList);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取下一月生成作息的日期列表
|
|
|
+ *
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<DateTime> getNextMonthDateList(){
|
|
|
+ public List<DateTime> getNextMonthDateList() {
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
|
|
|
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
@@ -722,9 +735,10 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
|
|
|
/**
|
|
|
* 获取下一年生成作息的日期列表
|
|
|
+ *
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<DateTime> getNextYearDateList(){
|
|
|
+ public List<DateTime> getNextYearDateList() {
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
|
|
|
calendar.add(Calendar.YEAR, 1);
|
|
|
@@ -738,7 +752,6 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void generateWorkTime(int year, int month) {
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
@@ -824,7 +837,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
// list1 = workTimeEditDtos;
|
|
|
// }
|
|
|
list1 = workTimeEditDtos;
|
|
|
- batch(dayMap.getKey(),list1);
|
|
|
+ batch(dayMap.getKey(), list1);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -857,7 +870,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
dto.setDate(time);
|
|
|
dto.setOrgId(setMap.getKey());
|
|
|
dto.setIsEnable(isEnable ? 1L : 0L);
|
|
|
- dto.setIsDuty(ObjectUtil.isNotNull(dayOfWeekSet)?dayOfWeekSet.getIsDuty():null);
|
|
|
+ dto.setIsDuty(ObjectUtil.isNotNull(dayOfWeekSet) ? dayOfWeekSet.getIsDuty() : null);
|
|
|
if (ObjectUtil.isNull(dayOfWeekSet) || !(dayOfWeekSet.getIsWorkday() > 0)) {
|
|
|
Optional<SysWorkTimeSetDayofweek> firstWorkDay = set.getDayOfWeeks().stream().filter(f -> f.getIsWorkday() > 0).findFirst();
|
|
|
if (firstWorkDay.isPresent()) {
|
|
|
@@ -879,8 +892,8 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
|
|
|
Map<Long, List<SysWorkTime>> groupDay = workTimeEditDtoList.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
|
|
|
//自动生成时覆盖按日维护的的作息,谁后生成或者后修改谁生效, 删除下一年已有的作息
|
|
|
final LambdaQueryWrapper<SysWorkTime> sysWorkTimeLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
- sysWorkTimeLambdaQueryWrapper.ge(SysWorkTime::getYmdDate,dateTimeList.get(0).toString("yyyy-MM-dd"));
|
|
|
- sysWorkTimeLambdaQueryWrapper.le(SysWorkTime::getYmdDate,dateTimeList.get(dateTimeList.size()-1).toString("yyyy-MM-dd"));
|
|
|
+ sysWorkTimeLambdaQueryWrapper.ge(SysWorkTime::getYmdDate, dateTimeList.get(0).toString("yyyy-MM-dd"));
|
|
|
+ sysWorkTimeLambdaQueryWrapper.le(SysWorkTime::getYmdDate, dateTimeList.get(dateTimeList.size() - 1).toString("yyyy-MM-dd"));
|
|
|
sysWorkTimeMapper.delete(sysWorkTimeLambdaQueryWrapper);
|
|
|
|
|
|
for (Map.Entry<Long, List<SysWorkTime>> dayMap : groupDay.entrySet()) {
|