Commit 79e41ac3 by 丁伟峰

技术员甘特图修改:

1、请求、响应报文定义在一个DTO中;
2、根据前端传递的组织结构和key进行查询过滤
1 parent 501b3971
......@@ -33,7 +33,7 @@ public class EngineerUtil {
@Autowired
private OrgGroupDao orgGroupDao;
public List<EngineerInfoEntity> getEngineesByLevel(String levelType, String levelValue) {
public List<EngineerInfoEntity> getEngineersByLevel(String levelType, String levelValue) {
List<EngineerInfoEntity> engineers = null;
List<String> groupIds = null;
switch (levelType) {
......@@ -61,11 +61,15 @@ public class EngineerUtil {
}
public Page<EngineerInfoEntity> findEngineersByKeyAndPage(List<String> engineerCodes, String key, Integer page, Integer size) {
public Page<EngineerInfoEntity> filterEngineersByKeyAndPage(List<String> engineerCodes, String key, Integer page, Integer size) {
Pageable pageable = PageRequest.of(page - 1, size);
return engineerInfoDao.findAllByEngineerCodeIn(engineerCodes, buildSpecification(key), pageable);
}
public List<EngineerInfoEntity> filterEngineersByKey(List<String> engineerCodes, String key) {
return engineerInfoDao.findAllByEngineerCodeIn(engineerCodes, buildSpecification(key));
}
private Specification<EngineerInfoEntity> buildSpecification(String keyword) {
return new Specification<EngineerInfoEntity>() {
......
......@@ -5,7 +5,7 @@ import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.dto.EngineerBusinessUpdateReqDTO;
import com.dituhui.pea.order.dto.EngineerCalendarDTO;
import com.dituhui.pea.order.dto.EngineerSkillUpdateReqDTO;
import com.dituhui.pea.order.dto.EngineersGanttReqDTO;
import com.dituhui.pea.order.dto.EngineersGanttDTO;
import com.dituhui.pea.order.service.EngineerCalendarService;
import com.dituhui.pea.order.service.EngineerGanttService;
import com.dituhui.pea.order.service.EngineerService;
......@@ -126,7 +126,7 @@ public class EngineerController {
}
@PostMapping("/engineer/schedule/gantt")
public Result<?> getEngineersGanttList(@Validated @RequestBody EngineersGanttReqDTO reqDTO) {
public Result<?> getEngineersGanttList(@Validated @RequestBody EngineersGanttDTO.Request reqDTO) {
log.info("getEngineersGanttList: {}", reqDTO);
Result<?> res = null;
try {
......
......@@ -21,6 +21,11 @@ public interface EngineerInfoDao extends JpaRepository<EngineerInfoEntity, Integ
List<EngineerInfoEntity> findByEngineerCodeIn(List<String> engineerCodes);
default List<EngineerInfoEntity> findAllByEngineerCodeIn(List<String> engineerCodes, Specification<EngineerInfoEntity> engineerInfoEntitySpecification) {
Specification<EngineerInfoEntity> spec = Specification.where(engineerCodeIn(engineerCodes)).and(engineerInfoEntitySpecification);
return findAll(spec);
}
default Page<EngineerInfoEntity> findAllByEngineerCodeIn(List<String> engineerCodes, Specification<EngineerInfoEntity> engineerInfoEntitySpecification, Pageable pageable) {
Specification<EngineerInfoEntity> spec = Specification.where(engineerCodeIn(engineerCodes)).and(engineerInfoEntitySpecification);
return findAll(spec, pageable);
......
package com.dituhui.pea.order.dto;
import com.dituhui.pea.order.config.OrderConfig;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
......@@ -11,12 +13,31 @@ import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.List;
@lombok.Data
@Accessors(chain = true)
public class EngineersGanttRespDTO {
private String date;
private List<?> engineers;
public class EngineersGanttDTO {
@lombok.Data
public static class Request {
// 2种模式:前端可以直接传入精确的engineerCodes,
// 或者是levelType/levelValue/brandIds/branchIds/groupIds/teamIds/key,后端查询匹配
private String levelType;
private String levelValue;
private Integer page = OrderConfig.DEFAULT_PAGE_INDEX;
private Integer size = OrderConfig.DEFAULT_PAGE_SIZE;
private String date;
private List<String> engineerCodes;
private List<String> branchIds;
private List<String> groupIds;
private List<String> teamIds;
private String key;
}
@lombok.Data
@Accessors(chain = true)
public static class Result {
private String date;
private List<?> engineers;
}
/**
* GanttChart
......
package com.dituhui.pea.order.dto;
import com.dituhui.pea.order.config.OrderConfig;
import java.util.List;
@lombok.Data
public class EngineersGanttReqDTO {
private String levelType;
private String levelValue;
private Integer page = OrderConfig.DEFAULT_PAGE_INDEX;
private Integer size = OrderConfig.DEFAULT_PAGE_SIZE;
private String date;
private List<String> engineerCodes;
}
package com.dituhui.pea.order.service;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.dto.EngineersGanttReqDTO;
import com.dituhui.pea.order.dto.EngineersGanttDTO;
public interface EngineerGanttService {
Result<?> getEngineersGanttList(EngineersGanttReqDTO ganttReqDTO);
Result<?> getEngineersGanttList(EngineersGanttDTO.Request ganttReqDTO);
}
package com.dituhui.pea.order.service;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.dto.EngineerCalendarDTO;
import com.dituhui.pea.order.dto.EngineersGanttReqDTO;
import java.util.List;
......
package com.dituhui.pea.order.service.impl;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.date.Week;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.common.DateUtil;
import com.dituhui.pea.order.common.EngineerUtil;
......@@ -51,10 +50,10 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService {
// 技术员日历,查询 capacity_engineer_calendar表,如果当日有各种事项,进行显示;否则显示正常上班;
List<EngineerCalendarDTO.Engineer> engineers = new ArrayList<>();
List<String> allCodes = engineerUtil.getEngineesByLevel(req.getLevelType(), req.getLevelValue()).stream()
List<String> allCodes = engineerUtil.getEngineersByLevel(req.getLevelType(), req.getLevelValue()).stream()
.map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList());
Page<EngineerInfoEntity> page = engineerUtil.findEngineersByKeyAndPage(allCodes, req.getKey(), req.getPage(), req.getSize());
Page<EngineerInfoEntity> page = engineerUtil.filterEngineersByKeyAndPage(allCodes, req.getKey(), req.getPage(), req.getSize());
String edate = LocalDate.parse(req.getDate()).plusDays(14).toString();
for (EngineerInfoEntity e : page.getContent()) {
......
package com.dituhui.pea.order.service.impl;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.common.EngineerUtil;
import com.dituhui.pea.order.dao.CapacityEngineerStatDao;
import com.dituhui.pea.order.dao.EngineerInfoDao;
import com.dituhui.pea.order.dao.OrderAppointmentDao;
import com.dituhui.pea.order.dao.OrderRequestDao;
import com.dituhui.pea.order.dto.EngineersGanttReqDTO;
import com.dituhui.pea.order.dto.EngineersGanttRespDTO;
import com.dituhui.pea.order.dto.EngineersGanttDTO;
import com.dituhui.pea.order.dto.LabelValueDTO;
import com.dituhui.pea.order.entity.CapacityEngineerStatEntity;
import com.dituhui.pea.order.entity.EngineerInfoEntity;
......@@ -18,10 +18,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
......@@ -41,23 +38,32 @@ public class EngineerGanttServiceImpl implements EngineerGanttService {
@Autowired
private OrderRequestDao orderRequestDao;
@Autowired
private EngineerUtil engineerUtil;
@Override
public Result<?> getEngineersGanttList(EngineersGanttReqDTO reqDTO) {
public Result<?> getEngineersGanttList(EngineersGanttDTO.Request reqDTO) {
// 按日期返回技术员们当天的服务甘特图,不需要翻页
log.info("getEngineersGanttList: {}", reqDTO);
List<OrderAppointmentEntity> orderAppointments = orderAppointmentDao.findByDateAndEngineerCodeIn(reqDTO.getDate(), reqDTO.getEngineerCodes());
List<String> engineerCodes = reqDTO.getEngineerCodes();
if (engineerCodes == null || engineerCodes.size() > 0) {
// 需要根据levelType/levelValue/brandIds/branchIds/groupIds/teamIds/key,后端查询匹配
engineerCodes = findEngineers(reqDTO.getLevelType(), reqDTO.getLevelValue(), reqDTO.getBranchIds(), reqDTO.getGroupIds(), reqDTO.getTeamIds(), reqDTO.getKey());
}
List<OrderAppointmentEntity> orderAppointments = orderAppointmentDao.findByDateAndEngineerCodeIn(reqDTO.getDate(), engineerCodes);
List<String> orderIds = orderAppointments.stream().map(OrderAppointmentEntity::getOrderId).collect(Collectors.toList());
Map<String, OrderRequestEntity> mapOrderRequest = getOrdersByOrderIds(orderIds);
HashMap<String, List<EngineersGanttRespDTO.Order>> mapEngineers = new HashMap<>();
HashMap<String, List<EngineersGanttDTO.Order>> mapEngineers = new HashMap<>();
for (OrderAppointmentEntity e : orderAppointments) {
log.info("===== order_id: [{}]", e.getOrderId());
EngineersGanttRespDTO.Order order = new EngineersGanttRespDTO.Order();
EngineersGanttDTO.Order order = new EngineersGanttDTO.Order();
// todo 需要根据订单时间和状态,采用expectXXXX或者actualXXXX
order.setStartTime(e.getExpectStartTime()).setEndTime(e.getExpectEndTime());
order.setOrderId(e.getOrderId()).setPreStatus(e.getPreStatus());
order.setTips(getOrderTips(e.getOrderId()));
order.setAppointmentStatus(mapOrderRequest.get(e.getOrderId()).getAppointmentStatus());
List<EngineersGanttRespDTO.Order> orders = null;
List<EngineersGanttDTO.Order> orders = null;
if (mapEngineers.containsKey(e.getEngineerCode())) {
orders = mapEngineers.get(e.getEngineerCode());
} else {
......@@ -67,10 +73,10 @@ public class EngineerGanttServiceImpl implements EngineerGanttService {
mapEngineers.put(e.getEngineerCode(), orders);
}
List<EngineersGanttRespDTO.GanttChart> engineers = new ArrayList<>();
for (String engineerCode : reqDTO.getEngineerCodes()) {
List<EngineersGanttDTO.GanttChart> engineers = new ArrayList<>();
for (String engineerCode : engineerCodes) {
EngineerInfoEntity engineerInfo = engineerInfoDao.getByEngineerCode(engineerCode);
EngineersGanttRespDTO.GanttChart engineer = new EngineersGanttRespDTO.GanttChart();
EngineersGanttDTO.GanttChart engineer = new EngineersGanttDTO.GanttChart();
engineer.setEngineerCode(engineerCode)
.setStartTime(String.format("%s 08:00", reqDTO.getDate()))
.setEndTime(String.format("%s 18:00", reqDTO.getDate()))
......@@ -90,10 +96,36 @@ public class EngineerGanttServiceImpl implements EngineerGanttService {
// engineer.setErrorTip(); todo
engineers.add(engineer);
}
EngineersGanttRespDTO data = new EngineersGanttRespDTO().setDate(reqDTO.getDate()).setEngineers(engineers);
return Result.success(data);
EngineersGanttDTO.Result res = new EngineersGanttDTO.Result();
res.setDate(reqDTO.getDate()).setEngineers(engineers);
return Result.success(res);
}
private List<String> findEngineers(String levelType, String levelValue, List<String> branchIds, List<String> groupIds, List<String> teamIds, String key) {
// brandIds, groupIds, teamIds, 以team -> group -> branch 为顺序判断,前者优先;
List<String> engineerCodes = new ArrayList<>();
if (teamIds != null && teamIds.size() > 0) {
for (String teamId : teamIds) {
engineerCodes.addAll(
engineerUtil.getEngineersByLevel("team", teamId).stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList()));
}
} else if (groupIds != null && groupIds.size() > 0) {
for (String groupId : groupIds) {
engineerCodes.addAll(
engineerUtil.getEngineersByLevel("group", groupId).stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList()));
}
} else if (branchIds != null && branchIds.size() > 0) {
for (String branchId : branchIds) {
engineerCodes.addAll(
engineerUtil.getEngineersByLevel("branch", branchId).stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList()));
}
} else {
engineerCodes.addAll(engineerUtil.getEngineersByLevel(levelType, levelValue).stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList()));
}
// 最后,还需要根据key进行过滤(需要结合数据库表)
engineerCodes = new ArrayList<>(new HashSet<>(engineerCodes));
return engineerUtil.filterEngineersByKey(engineerCodes, key).stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList());
}
public Map<String, OrderRequestEntity> getOrdersByOrderIds(List<String> orderIds) {
List<OrderRequestEntity> orders = orderRequestDao.findAllByOrderIdIn(orderIds);
......
......@@ -115,7 +115,7 @@ public class OrganizationServiceImpl implements OrganizationService {
@Override
public Result<?> getEngineersByLevel(String levelType, String levelValue) {
List<EngineerInfoEntity> engineers = engineerUtil.getEngineesByLevel(levelType, levelValue);
List<EngineerInfoEntity> engineers = engineerUtil.getEngineersByLevel(levelType, levelValue);
List<OrganizationEngineersDTO.Engineer> engineers1 = engineers.stream().map(entity -> {
return new OrganizationEngineersDTO.Engineer()
.setEngineerCode(entity.getEngineerCode())
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!