Commit 0fe86cab by 刘鑫

refactor(容量): 小队容量查询具体实现

1 parent 2f5eaebd
......@@ -55,6 +55,24 @@ public interface EngineerInfoDao extends JpaRepository<EngineerInfoEntity, Integ
Set<EngineerInfoEntity> listByBrandAndTypeAndSkillAndGroupId(@Param("brand") String brand, @Param("productType") String productType,
@Param("skill") String skill, @Param("groupId") String groupId);
/**
* 根据技能、产品、产品类型 工作队获取分站下用户对应技能的技术员
*
* @param brand 产品
* @param productType 产品类型
* @param skill 技能
* @param teamId 工作队ID
* @return 工程师信息
*/
@Query(value = "SELECT ei.* FROM skill_info si LEFT JOIN skill_group sg ON sg.skill_group_code =si.skill_group_code \n" +
" LEFT JOIN engineer_skill_group esg ON sg.skill_group_code = esg.skill_group_code \n" +
" LEFT JOIN engineer_info ei ON esg.engineer_code = ei.engineer_code\n" +
" LEFT JOIN org_team_engineer ote ON ote.engineer_code = ei.engineer_code \n" +
" WHERE si.brand = :brand AND si.type= :productType AND si.skill = :skill \n" +
" AND ote.team_id = :teamId ", nativeQuery = true)
Set<EngineerInfoEntity> listByBrandAndTypeAndSkillAndTeamId(@Param("brand") String brand, @Param("productType") String productType,
@Param("skill") String skill, @Param("teamId") String teamId);
@Query(value = "SELECT ei.* from engineer_info ei left join engineer_skill_group esg on ei.engineer_code = esg.engineer_code " +
"left join skill_info si on si.skill_group_code = esg.skill_group_code left join map_layer_customize mlc on mlc.layer_id = si.layer_id " +
......
......@@ -9,7 +9,6 @@ import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
......
......@@ -170,13 +170,14 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
for (TimeSliceEntity targetTimeSlice : typeTimeSlice) {
final LocalTime targetStartTime = LocalTime.parse(targetTimeSlice.getStart(), DateUtil.TIME_FORMATTER);
final LocalTime targetEndTime = LocalTime.parse(targetTimeSlice.getEnd(), DateUtil.TIME_FORMATTER);
CapacityQueryDTO.Segment segment = caculateTargetTimeSlice(totalTakeTime, targetTimeSlice, engineerTimeSlice, targetStartTime, targetEndTime, date);
CapacityQueryDTO.Segment segment = caculateTargetTimeSlice(totalTakeTime, targetTimeSlice.getName(),
engineerTimeSlice, targetStartTime, targetEndTime, date);
segments.add(segment);
}
return segments;
}
private static CapacityQueryDTO.Segment caculateTargetTimeSlice(int totalTakeTime, TimeSliceEntity targetTimeSlice,
private static CapacityQueryDTO.Segment caculateTargetTimeSlice(int totalTakeTime, String timeSliceName,
List<CapacityEngineerSliceUsedEntity> engineerTimeSlice, LocalTime targetStartTime,
LocalTime targetEndTime, LocalDate targetDate) {
List<CapacityEngineerSliceUsedEntity> collect = engineerTimeSlice.stream().filter(t -> {
......@@ -188,7 +189,7 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
}).collect(Collectors.toList());
CapacityQueryDTO.Segment segment = new CapacityQueryDTO.Segment();
segment.setName(targetTimeSlice.getName());
segment.setName(timeSliceName);
segment.setEndTime(DateUtil.toDate(LocalDateTime.of(targetDate, targetEndTime)));
segment.setBeginTime(DateUtil.toDate(LocalDateTime.of(targetDate, targetStartTime)));
if (!CollectionUtils.isEmpty(collect)) {
......@@ -210,13 +211,71 @@ public class CapacityQueryServiceImpl implements CapacityQueryService {
}
@Override
public CapacityQueryDTO.Segment queryCapacityByTeam(String teamId, List<CapacityQueryDTO.Service> services, LocalDate targetDate, LocalTime startTime, LocalTime endTime) {
return null;
public CapacityQueryDTO.Segment queryCapacityByTeam(String teamId, List<CapacityQueryDTO.Service> services,
LocalDate targetDate, LocalTime startTime, LocalTime endTime) {
List<SkillInfoEntity> querySkillGroup = new ArrayList<>();
Set<EngineerInfoEntity> allFulfillEngineer = Sets.newConcurrentHashSet();
for (CapacityQueryDTO.Service service : services) {
Set<EngineerInfoEntity> engineerInfoEntities = engineerInfoDao.listByBrandAndTypeAndSkillAndTeamId(service.getBrand(),
service.getProductType(), service.getServiceType(), teamId);
//查询对应的技能信息
SkillInfoEntity skillInfo = skillInfoDao.getByBrandAndTypeAndSkill(service.getBrand(),
service.getProductType(), service.getServiceType());
querySkillGroup.add(skillInfo);
allFulfillEngineer.addAll(engineerInfoEntities);
}
List<CapacityEngineerSliceUsedEntity> allEngineerTimeSlice = new ArrayList<>();
for (EngineerInfoEntity engineerInfo : allFulfillEngineer) {
List<CapacityEngineerSliceUsedEntity> engineerTimeSlice = engineerSliceUsedCapacityDao
.findByWorkdayAndEngineerCode(DateTimeUtil.formatDate(targetDate), engineerInfo.getEngineerCode());
allEngineerTimeSlice.addAll(engineerTimeSlice);
}
log.info("[matchCapacityData]【符合技能要求的工程师总数为:{} 个】", allFulfillEngineer.size());
//计算所有查询技能的所需耗时 (querySkillGroup)
final int totalTakeTime = querySkillGroup.stream()
.mapToInt(SkillInfoEntity::getTakeTime)
.sum();
return caculateTargetTimeSlice(totalTakeTime, "时间段", allEngineerTimeSlice, startTime, endTime, targetDate);
}
@Override
public CapacityQueryDTO.Segment queryCapacityByTeam(String teamId, List<CapacityQueryDTO.Service> services, LocalDate targetDate) {
return null;
List<SkillInfoEntity> querySkillGroup = new ArrayList<>();
Set<EngineerInfoEntity> allFulfillEngineer = Sets.newConcurrentHashSet();
for (CapacityQueryDTO.Service service : services) {
Set<EngineerInfoEntity> engineerInfoEntities = engineerInfoDao.listByBrandAndTypeAndSkillAndTeamId(service.getBrand(),
service.getProductType(), service.getServiceType(), teamId);
//查询对应的技能信息
SkillInfoEntity skillInfo = skillInfoDao.getByBrandAndTypeAndSkill(service.getBrand(),
service.getProductType(), service.getServiceType());
querySkillGroup.add(skillInfo);
allFulfillEngineer.addAll(engineerInfoEntities);
}
List<CapacityEngineerSliceUsedEntity> allEngineerTimeSlice = new ArrayList<>();
for (EngineerInfoEntity engineerInfo : allFulfillEngineer) {
List<CapacityEngineerSliceUsedEntity> engineerTimeSlice = engineerSliceUsedCapacityDao
.findByWorkdayAndEngineerCode(DateTimeUtil.formatDate(targetDate), engineerInfo.getEngineerCode());
allEngineerTimeSlice.addAll(engineerTimeSlice);
}
log.info("[matchCapacityData]【符合技能要求的工程师总数为:{} 个】", allFulfillEngineer.size());
//计算所有查询技能的所需耗时 (querySkillGroup)
final int totalTakeTime = querySkillGroup.stream()
.mapToInt(SkillInfoEntity::getTakeTime)
.sum();
//获取工作队信息
OrgTeamEntity team = orgTeamDao.getByTeamId(teamId);
String workOn = String.format("%s:00", team.getWorkOn());
String workOff = String.format("%s:00", team.getWorkOff());
LocalTime startTime = LocalTime.parse(workOn, DateUtil.TIME_FORMATTER);
LocalTime endTime = LocalTime.parse(workOff, DateUtil.TIME_FORMATTER);
return caculateTargetTimeSlice(totalTakeTime, "时间段", allEngineerTimeSlice, startTime, endTime, targetDate);
}
@Override
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!