查询优化,待验证
This commit is contained in:
parent
16075acd60
commit
786c75e991
@ -6,6 +6,7 @@ import com.xdap.api.moudle.user.pojo.XdapUsers;
|
|||||||
import com.xdap.self_development.domain.view.UserInfoView;
|
import com.xdap.self_development.domain.view.UserInfoView;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,4 +35,6 @@ public interface XdapDeptUsersService {
|
|||||||
XdapUsers selectUserByCode(String userCode);
|
XdapUsers selectUserByCode(String userCode);
|
||||||
|
|
||||||
UserInfoView getUserInfo(@NotBlank(message = "用户不能为空") String userId);
|
UserInfoView getUserInfo(@NotBlank(message = "用户不能为空") String userId);
|
||||||
|
// 通过用户ID批量查询用户
|
||||||
|
List<XdapUsers> selectUserByIds(List<String> userIds);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,8 @@ import com.alibaba.excel.write.metadata.style.WriteFont;
|
|||||||
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
||||||
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
|
||||||
|
import com.definesys.mpaas.query.MpaasQuery;
|
||||||
import com.definesys.mpaas.query.MpaasQueryFactory;
|
import com.definesys.mpaas.query.MpaasQueryFactory;
|
||||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||||
import com.xdap.self_development.common.BusinessDatabase;
|
import com.xdap.self_development.common.BusinessDatabase;
|
||||||
@ -29,6 +31,7 @@ import com.xdap.self_development.listener.EngineParamDetailListener;
|
|||||||
import com.xdap.self_development.service.*;
|
import com.xdap.self_development.service.*;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -502,10 +505,6 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Map<String, List<EngineParamDetailDTO>> selectValueByMoreParam(EngineParamDetailRequest request) {
|
public Map<String, List<EngineParamDetailDTO>> selectValueByMoreParam(EngineParamDetailRequest request) {
|
||||||
List<EngineParamDetailDTO> engineParamDetailDTOS = new ArrayList<>();
|
|
||||||
List<EngineParamDetailPojo> paramDetails = new ArrayList<>();
|
|
||||||
|
|
||||||
// 获取当前机型
|
|
||||||
DataEntryEngineModelPojo model = bd.getBusinessDatabase()
|
DataEntryEngineModelPojo model = bd.getBusinessDatabase()
|
||||||
.eq("id", request.getEngineModelID())
|
.eq("id", request.getEngineModelID())
|
||||||
.doQueryFirst(DataEntryEngineModelPojo.class);
|
.doQueryFirst(DataEntryEngineModelPojo.class);
|
||||||
@ -513,102 +512,119 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
|||||||
throw new CommonException("机型不存在,请检查");
|
throw new CommonException("机型不存在,请检查");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据条件过滤查询
|
List<String> subsystemParts = request.getSubsystemParts();
|
||||||
for (String subsystemType : request.getSubsystemParts()) {
|
if (CollectionUtils.isEmpty(subsystemParts)) {
|
||||||
if (subsystemType.split("-").length != 2) {
|
return new LinkedHashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> subsystemList = new ArrayList<>();
|
||||||
|
List<String> partsList = new ArrayList<>();
|
||||||
|
for (String item : subsystemParts) {
|
||||||
|
String[] split = item.split("-");
|
||||||
|
if (split.length != 2) {
|
||||||
throw new CommonException("查询条件异常,需子系统-零部件名称,若零部件为空则传入“/”");
|
throw new CommonException("查询条件异常,需子系统-零部件名称,若零部件为空则传入“/”");
|
||||||
}
|
}
|
||||||
String subsystem = subsystemType.split("-")[0];
|
subsystemList.add(split[0]);
|
||||||
String type = subsystemType.split("-")[1];
|
partsList.add(split[1]);
|
||||||
//若传入填写人则查询填写人需要填写的参数
|
}
|
||||||
if (ObjectUtils.isNotEmpty(request.getFilledById())) {
|
|
||||||
List<EngineParamDetailPojo> pojoList = bd.getBusinessDatabase()
|
MpaasQuery mpaasQuery = bd.getBusinessDatabase()
|
||||||
.eq("last_updated_by", request.getFilledById())
|
.conjuctionAnd()
|
||||||
|
.and()
|
||||||
.eq("engine_model_id", model.getId())
|
.eq("engine_model_id", model.getId())
|
||||||
.eq("subsystem_name", subsystem)
|
.in("subsystem_name", subsystemList)
|
||||||
.eq("parts_name", type)
|
.in("parts_name", partsList)
|
||||||
.eq("major_version", model.getVersionNumber())
|
.eq("parameter_source", "数据平台手工录入");
|
||||||
.eq("parameter_source", "数据平台手工录入")
|
|
||||||
.doQuery(EngineParamDetailPojo.class);
|
// 版本号处理
|
||||||
if (pojoList.isEmpty()) {
|
Integer version = ObjectUtils.defaultIfNull(request.getParameterVersion(), model.getVersionNumber());
|
||||||
paramDetails.addAll(
|
mpaasQuery.eq("major_version", version);
|
||||||
bd.getBusinessDatabase()
|
|
||||||
.eq("filled_by", request.getFilledById())
|
// 按填写人/责任人 动态拼接条件
|
||||||
.eq("engine_model_id", model.getId())
|
String filledById = request.getFilledById();
|
||||||
.eq("subsystem_name", subsystem)
|
String responsiblePersonId = request.getResponsiblePersonId();
|
||||||
.eq("parts_name", type)
|
if (StringUtils.isNotEmpty(filledById)) {
|
||||||
.eq("major_version", model.getVersionNumber())
|
mpaasQuery.conjuctionAnd()
|
||||||
.eq("parameter_source", "数据平台手工录入")
|
.or()
|
||||||
.doQuery(EngineParamDetailPojo.class)
|
.eq("last_updated_by", filledById)
|
||||||
);
|
.eq("filled_by", filledById);
|
||||||
} else {
|
} else if (StringUtils.isNotEmpty(responsiblePersonId)) {
|
||||||
paramDetails.addAll(pojoList);
|
mpaasQuery
|
||||||
}
|
.conjuctionAnd()
|
||||||
} else if (ObjectUtils.isNotEmpty(request.getResponsiblePersonId())) {
|
.and()
|
||||||
//若传入责任人则查询责任人需要分发的参数
|
.eq("responsible_person_id", responsiblePersonId);
|
||||||
paramDetails.addAll(bd.getBusinessDatabase()
|
|
||||||
.eq("engine_model_id", model.getId())
|
|
||||||
.eq("responsible_person_id", request.getResponsiblePersonId())
|
|
||||||
.eq("subsystem_name", subsystem)
|
|
||||||
.eq("parts_name", type)
|
|
||||||
.eq("major_version", model.getVersionNumber())
|
|
||||||
.eq("parameter_source", "数据平台手工录入")
|
|
||||||
.doQuery(EngineParamDetailPojo.class));
|
|
||||||
} else {
|
|
||||||
Integer version = model.getVersionNumber();
|
|
||||||
if (request.getParameterVersion() != null) {
|
|
||||||
version = request.getParameterVersion();
|
|
||||||
}
|
|
||||||
paramDetails.addAll(bd.getBusinessDatabase()
|
|
||||||
.eq("engine_model_id", model.getId())
|
|
||||||
.eq("subsystem_name", subsystem)
|
|
||||||
.eq("parts_name", type)
|
|
||||||
.eq("major_version", version)
|
|
||||||
.eq("parameter_source", "数据平台手工录入")
|
|
||||||
.doQuery(EngineParamDetailPojo.class));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构建返回
|
// 查询所有参数详情
|
||||||
for (EngineParamDetailPojo detail : paramDetails) {
|
List<EngineParamDetailPojo> paramDetails = mpaasQuery.doQuery(EngineParamDetailPojo.class);
|
||||||
EngineParamDetailDTO engineParamDetailDTO = new EngineParamDetailDTO();
|
if (CollectionUtils.isEmpty(paramDetails)) {
|
||||||
BeanUtils.copyProperties(detail, engineParamDetailDTO);
|
return new LinkedHashMap<>();
|
||||||
|
|
||||||
engineParamDetailDTO.setFilledBy(null);
|
|
||||||
engineParamDetailDTO.setFiller(null);
|
|
||||||
engineParamDetailDTO.setResPerson(null);
|
|
||||||
engineParamDetailDTO.setResPersonId(null);
|
|
||||||
engineParamDetailDTO.setIsDistributedFilled(0);
|
|
||||||
engineParamDetailDTO.setIsDistributedRes(0);
|
|
||||||
|
|
||||||
if (ObjectUtils.isNotEmpty(detail.getFilledBy())) {
|
|
||||||
XdapUsers filler = xdapDeptUsersService.selectUserByID(detail.getFilledBy());
|
|
||||||
engineParamDetailDTO.setFiller(filler);
|
|
||||||
engineParamDetailDTO.setFilledBy(ObjectUtils.isEmpty(filler) ? "" : filler.getUsername());
|
|
||||||
engineParamDetailDTO.setIsDistributedFilled(1);
|
|
||||||
}
|
|
||||||
if (ObjectUtils.isNotEmpty(detail.getResponsiblePersonId())) {
|
|
||||||
XdapUsers responsiblePerson = xdapDeptUsersService.selectUserByID(detail.getResponsiblePersonId());
|
|
||||||
engineParamDetailDTO.setResPerson(responsiblePerson);
|
|
||||||
engineParamDetailDTO.setResPersonId(ObjectUtils.isEmpty(responsiblePerson) ? "" : responsiblePerson.getUsername());
|
|
||||||
engineParamDetailDTO.setIsDistributedRes(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
engineParamDetailDTO.setUnit(null);
|
// 批量查询
|
||||||
if (ObjectUtils.isNotEmpty(detail.getParameterId())) {
|
Set<String> paramIds = paramDetails.stream()
|
||||||
ParameterPojo parameter = bd.getBusinessDatabase()
|
.map(EngineParamDetailPojo::getParameterId)
|
||||||
.eq("id", detail.getParameterId())
|
.filter(ObjectUtils::isNotEmpty)
|
||||||
.doQueryFirst(ParameterPojo.class);
|
.collect(Collectors.toSet());
|
||||||
engineParamDetailDTO.setUnit(parameter.getUnit());
|
Map<String, String> paramIdToUnitMap = new HashMap<>();
|
||||||
|
if (!CollectionUtils.isEmpty(paramIds)) {
|
||||||
|
List<ParameterPojo> parameters = bd.getBusinessDatabase()
|
||||||
|
.in("id", paramIds)
|
||||||
|
.doQuery(ParameterPojo.class);
|
||||||
|
paramIdToUnitMap = parameters.stream()
|
||||||
|
.collect(Collectors.toMap(ParameterPojo::getId, ParameterPojo::getUnit, (v1, v2) -> v1));
|
||||||
}
|
}
|
||||||
|
|
||||||
engineParamDetailDTO.setId(detail.getId());
|
// 5.2 批量提取用户ID → 批量查用户信息
|
||||||
engineParamDetailDTO.setApprovalId(detail.getApprovalId());
|
Set<String> userIds = new HashSet<>();
|
||||||
engineParamDetailDTOS.add(engineParamDetailDTO);
|
paramDetails.forEach(pojo -> {
|
||||||
|
if (StringUtils.isNotEmpty(pojo.getFilledBy())) userIds.add(pojo.getFilledBy());
|
||||||
|
if (StringUtils.isNotEmpty(pojo.getResponsiblePersonId())) userIds.add(pojo.getResponsiblePersonId());
|
||||||
|
});
|
||||||
|
Map<String, XdapUsers> userIdToUserMap = new HashMap<>();
|
||||||
|
if (!CollectionUtils.isEmpty(userIds)) {
|
||||||
|
List<XdapUsers> users = xdapDeptUsersService.selectUserByIds(new ArrayList<>(userIds));
|
||||||
|
userIdToUserMap = users.stream()
|
||||||
|
.collect(Collectors.toMap(XdapUsers::getId, u -> u, (v1, v2) -> v1));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序返回
|
// 转换
|
||||||
List<EngineParamDetailDTO> detailDTOList = engineParamDetailDTOS.stream()
|
Map<String, XdapUsers> finalUserIdToUserMap = userIdToUserMap;
|
||||||
|
Map<String, String> finalParamIdToUnitMap = paramIdToUnitMap;
|
||||||
|
List<EngineParamDetailDTO> detailDTOList = paramDetails.stream().map(detail -> {
|
||||||
|
EngineParamDetailDTO dto = new EngineParamDetailDTO();
|
||||||
|
BeanUtils.copyProperties(detail, dto);
|
||||||
|
dto.setFilledBy(null);
|
||||||
|
dto.setFiller(null);
|
||||||
|
dto.setResPerson(null);
|
||||||
|
dto.setResPersonId(null);
|
||||||
|
dto.setIsDistributedFilled(0);
|
||||||
|
dto.setIsDistributedRes(0);
|
||||||
|
dto.setUnit(null);
|
||||||
|
String filledBy = detail.getFilledBy();
|
||||||
|
if (StringUtils.isNotEmpty(filledBy)) {
|
||||||
|
XdapUsers filler = finalUserIdToUserMap.get(filledBy);
|
||||||
|
dto.setFiller(filler);
|
||||||
|
dto.setFilledBy(filler == null ? "" : filler.getUsername());
|
||||||
|
dto.setIsDistributedFilled(1);
|
||||||
|
}
|
||||||
|
String resId = detail.getResponsiblePersonId();
|
||||||
|
if (StringUtils.isNotEmpty(resId)) {
|
||||||
|
XdapUsers resPerson = finalUserIdToUserMap.get(resId);
|
||||||
|
dto.setResPerson(resPerson);
|
||||||
|
dto.setResPersonId(resPerson == null ? "" : resPerson.getUsername());
|
||||||
|
dto.setIsDistributedRes(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
String paramId = detail.getParameterId();
|
||||||
|
if (ObjectUtils.isNotEmpty(paramId)) {
|
||||||
|
dto.setUnit(finalParamIdToUnitMap.get(paramId));
|
||||||
|
}
|
||||||
|
|
||||||
|
dto.setId(detail.getId());
|
||||||
|
dto.setApprovalId(detail.getApprovalId());
|
||||||
|
return dto;
|
||||||
|
})
|
||||||
.sorted(Comparator
|
.sorted(Comparator
|
||||||
.comparing(EngineParamDetailDTO::getSubsystemName, Collator.getInstance(Locale.CHINA))
|
.comparing(EngineParamDetailDTO::getSubsystemName, Collator.getInstance(Locale.CHINA))
|
||||||
.thenComparing(EngineParamDetailDTO::getParameterName, Collator.getInstance(Locale.CHINA))
|
.thenComparing(EngineParamDetailDTO::getParameterName, Collator.getInstance(Locale.CHINA))
|
||||||
|
|||||||
@ -230,4 +230,16 @@ public class XdapDeptUsersServiceImpl implements XdapDeptUsersService {
|
|||||||
userInfoView.setDepartments(deptNames);
|
userInfoView.setDepartments(deptNames);
|
||||||
return userInfoView;
|
return userInfoView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<XdapUsers> selectUserByIds(List<String> userIds) {
|
||||||
|
List<XdapUsers> users = bd.getSystemDatabase()
|
||||||
|
.in("id", userIds)
|
||||||
|
.doQuery(XdapUsers.class);
|
||||||
|
if (users.isEmpty()) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
} else {
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user