Commit 239ee0b9 by 刘鑫

refactor(时间片容量): 重构避免强制写入时增加重复时间段

1 parent d96a04a1
...@@ -8,4 +8,5 @@ import java.util.List; ...@@ -8,4 +8,5 @@ import java.util.List;
public interface EngineerSliceUsedCapacityDao extends JpaRepository<CapacityEngineerSliceUsedEntity, Long> { public interface EngineerSliceUsedCapacityDao extends JpaRepository<CapacityEngineerSliceUsedEntity, Long> {
List<CapacityEngineerSliceUsedEntity> findByWorkdayAndEngineerCode(String workDay, String engineerCode); List<CapacityEngineerSliceUsedEntity> findByWorkdayAndEngineerCode(String workDay, String engineerCode);
List<CapacityEngineerSliceUsedEntity> deleteByWorkdayAndEngineerCode(String workDay, String engineerCode);
} }
...@@ -8,7 +8,6 @@ import com.dituhui.pea.order.dao.CapacityEngineerCalendarDao; ...@@ -8,7 +8,6 @@ import com.dituhui.pea.order.dao.CapacityEngineerCalendarDao;
import com.dituhui.pea.order.dao.CapacityEngineerStatDao; import com.dituhui.pea.order.dao.CapacityEngineerStatDao;
import com.dituhui.pea.order.dao.EngineerBusinessDao; import com.dituhui.pea.order.dao.EngineerBusinessDao;
import com.dituhui.pea.order.dao.EngineerInfoDao; import com.dituhui.pea.order.dao.EngineerInfoDao;
import com.dituhui.pea.order.dao.EngineerSliceUsedCapacityDao;
import com.dituhui.pea.order.dao.TimeSliceDao; import com.dituhui.pea.order.dao.TimeSliceDao;
import com.dituhui.pea.order.entity.CapacityEngineerCalendarEntity; import com.dituhui.pea.order.entity.CapacityEngineerCalendarEntity;
import com.dituhui.pea.order.entity.CapacityEngineerSliceUsedEntity; import com.dituhui.pea.order.entity.CapacityEngineerSliceUsedEntity;
...@@ -16,6 +15,7 @@ import com.dituhui.pea.order.entity.CapacityEngineerStatEntity; ...@@ -16,6 +15,7 @@ import com.dituhui.pea.order.entity.CapacityEngineerStatEntity;
import com.dituhui.pea.order.entity.EngineerBusinessEntity; import com.dituhui.pea.order.entity.EngineerBusinessEntity;
import com.dituhui.pea.order.entity.EngineerInfoEntity; import com.dituhui.pea.order.entity.EngineerInfoEntity;
import com.dituhui.pea.order.entity.TimeSliceEntity; import com.dituhui.pea.order.entity.TimeSliceEntity;
import com.dituhui.pea.order.service.EngineerSliceUsedCapacityService;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -29,8 +29,11 @@ import java.time.LocalDate; ...@@ -29,8 +29,11 @@ import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -58,7 +61,7 @@ public class InitEngineerCapacityScheduler { ...@@ -58,7 +61,7 @@ public class InitEngineerCapacityScheduler {
@Autowired @Autowired
private TimeSliceDao timeSliceDao; private TimeSliceDao timeSliceDao;
@Autowired @Autowired
private EngineerSliceUsedCapacityDao engineerSliceUsedCapacityDao; private EngineerSliceUsedCapacityService EngineerSliceUsedCapacityService;
private boolean verifyCalendar(List<CapacityEngineerCalendarEntity> configs) { private boolean verifyCalendar(List<CapacityEngineerCalendarEntity> configs) {
// 检查多条请假配置是否有交叉行为; configs已经根据startTime排序 // 检查多条请假配置是否有交叉行为; configs已经根据startTime排序
...@@ -101,7 +104,7 @@ public class InitEngineerCapacityScheduler { ...@@ -101,7 +104,7 @@ public class InitEngineerCapacityScheduler {
private void initOneEngineerSlice(String date, String engineerCode, List<CapacityEngineerCalendarEntity> configs, private void initOneEngineerSlice(String date, String engineerCode, List<CapacityEngineerCalendarEntity> configs,
List<TimeSliceEntity> commonTimeSliceList) { List<TimeSliceEntity> commonTimeSliceList) {
//查询时间片容量 //查询时间片容量
List<CapacityEngineerSliceUsedEntity> engineerTimeSlice = engineerSliceUsedCapacityDao.findByWorkdayAndEngineerCode(date, engineerCode); List<CapacityEngineerSliceUsedEntity> engineerTimeSlice = EngineerSliceUsedCapacityService.findByWorkdayAndEngineerCode(date, engineerCode);
if (!CollectionUtil.isEmpty(engineerTimeSlice) && !rewriteForce) { if (!CollectionUtil.isEmpty(engineerTimeSlice) && !rewriteForce) {
log.warn("工程师:{}存在日期:{}时间切片记录, 无需初始化", engineerCode, date); log.warn("工程师:{}存在日期:{}时间切片记录, 无需初始化", engineerCode, date);
return; return;
...@@ -116,7 +119,11 @@ public class InitEngineerCapacityScheduler { ...@@ -116,7 +119,11 @@ public class InitEngineerCapacityScheduler {
ArrayList<CapacityEngineerSliceUsedEntity> resultList = new ArrayList<>(timeCorridor.size()); ArrayList<CapacityEngineerSliceUsedEntity> resultList = new ArrayList<>(timeCorridor.size());
for (TimeSliceEntity timeSlice : timeCorridor) { for (TimeSliceEntity timeSlice : timeCorridor) {
CapacityEngineerSliceUsedEntity r = new CapacityEngineerSliceUsedEntity(); final Long id = timeSlice.getId();
Optional<CapacityEngineerSliceUsedEntity> sliceUsedEntity = Optional.ofNullable(engineerTimeSlice).orElse(Collections.emptyList())
.stream()
.filter(t -> Objects.equals(t.getTimmeSlice().getId(), id)).findFirst();
CapacityEngineerSliceUsedEntity r = sliceUsedEntity.orElseGet(CapacityEngineerSliceUsedEntity::new);
r.setTimmeSlice(timeSlice); r.setTimmeSlice(timeSlice);
r.setEngineerCode(engineerCode); r.setEngineerCode(engineerCode);
r.setWorkday(date); r.setWorkday(date);
...@@ -153,7 +160,7 @@ public class InitEngineerCapacityScheduler { ...@@ -153,7 +160,7 @@ public class InitEngineerCapacityScheduler {
resultList.add(r); resultList.add(r);
} }
engineerSliceUsedCapacityDao.saveAll(resultList); EngineerSliceUsedCapacityService.saveAll(resultList);
} }
......
package com.dituhui.pea.order.service;
import com.dituhui.pea.order.entity.CapacityEngineerSliceUsedEntity;
import java.util.Collection;
import java.util.List;
public interface EngineerSliceUsedCapacityService {
List<CapacityEngineerSliceUsedEntity> findByWorkdayAndEngineerCode(String workDay, String engineerCode);
List<CapacityEngineerSliceUsedEntity> deleteByWorkdayAndEngineerCode(String workDay, String engineerCode);
List<CapacityEngineerSliceUsedEntity> saveAll(Collection<CapacityEngineerSliceUsedEntity> collection);
}
package com.dituhui.pea.order.service.impl;
import com.dituhui.pea.order.dao.EngineerSliceUsedCapacityDao;
import com.dituhui.pea.order.entity.CapacityEngineerSliceUsedEntity;
import com.dituhui.pea.order.service.EngineerSliceUsedCapacityService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.Collection;
import java.util.List;
@Service
@AllArgsConstructor
public class EngineerSliceUsedCapacityServiceImpl implements EngineerSliceUsedCapacityService {
private final EngineerSliceUsedCapacityDao engineerSliceUsedCapacityDao;
@Override
@Transactional
public List<CapacityEngineerSliceUsedEntity> findByWorkdayAndEngineerCode(String workDay, String engineerCode) {
return engineerSliceUsedCapacityDao.findByWorkdayAndEngineerCode(workDay, engineerCode);
}
@Override
@Transactional
public List<CapacityEngineerSliceUsedEntity> deleteByWorkdayAndEngineerCode(String workDay, String engineerCode) {
return engineerSliceUsedCapacityDao.deleteByWorkdayAndEngineerCode(workDay, engineerCode);
}
@Override
@Transactional
public List<CapacityEngineerSliceUsedEntity> saveAll(Collection<CapacityEngineerSliceUsedEntity> collection) {
return engineerSliceUsedCapacityDao.saveAll(collection);
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!