selectValueByMoreParam查询优化

This commit is contained in:
zjh 2026-04-21 17:24:31 +08:00
parent 786c75e991
commit cbb7c5476d
3 changed files with 111 additions and 117 deletions

View File

@ -6,8 +6,8 @@ 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;
import java.util.Set;
/** /**
* <p> * <p>
@ -36,5 +36,5 @@ public interface XdapDeptUsersService {
UserInfoView getUserInfo(@NotBlank(message = "用户不能为空") String userId); UserInfoView getUserInfo(@NotBlank(message = "用户不能为空") String userId);
// 通过用户ID批量查询用户 // 通过用户ID批量查询用户
List<XdapUsers> selectUserByIds(List<String> userIds); List<XdapUsers> selectUserByIds(Set<String> userIds);
} }

View File

@ -9,7 +9,6 @@ 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.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;
@ -31,7 +30,6 @@ 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;
@ -101,8 +99,8 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
List<ParameterPojo> parameters = selectParamByIsUserId(allParameters, userId); List<ParameterPojo> parameters = selectParamByIsUserId(allParameters, userId);
List<TemplatePojo> templates = bd.getBusinessDatabase() List<TemplatePojo> templates = bd.getBusinessDatabase()
.eq("status", "COMPLETE") .eq("status", "COMPLETE")
.doQuery(TemplatePojo.class); .doQuery(TemplatePojo.class);
if (ObjectUtils.isEmpty(templates)) { if (ObjectUtils.isEmpty(templates)) {
throw new CommonException("未找到未找到已发布的参数模板"); throw new CommonException("未找到未找到已发布的参数模板");
} }
@ -383,13 +381,13 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
try { try {
EasyExcel.read( EasyExcel.read(
file.getInputStream(), file.getInputStream(),
EngineParamDetailExcel.class, EngineParamDetailExcel.class,
new EngineParamDetailListener( new EngineParamDetailListener(
bd, bd,
modelPojo, modelPojo,
userId userId
) )
).build().readAll(); ).build().readAll();
} catch (IOException e) { } catch (IOException e) {
log.error("导入失败IO异常"); log.error("导入失败IO异常");
} catch (RuntimeException e) { } catch (RuntimeException e) {
@ -505,6 +503,10 @@ 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);
@ -512,119 +514,110 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
throw new CommonException("机型不存在,请检查"); throw new CommonException("机型不存在,请检查");
} }
List<String> subsystemParts = request.getSubsystemParts(); // 根据条件过滤查询
if (CollectionUtils.isEmpty(subsystemParts)) { Set<String> subsystemSet = new HashSet<>();
return new LinkedHashMap<>(); Set<String> typeSet = new HashSet<>();
} request.getSubsystemParts().forEach(subsystemType -> {
if (subsystemType.split("-").length != 2) {
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("查询条件异常,需子系统-零部件名称,若零部件为空则传入“/”");
} }
subsystemList.add(split[0]); String subsystem = subsystemType.split("-")[0];
partsList.add(split[1]); String type = subsystemType.split("-")[1];
} subsystemSet.add(subsystem);
typeSet.add(type);
});
MpaasQuery mpaasQuery = bd.getBusinessDatabase() MpaasQuery query = bd.getBusinessDatabase()
.conjuctionAnd()
.and()
.eq("engine_model_id", model.getId()) .eq("engine_model_id", model.getId())
.in("subsystem_name", subsystemList) .in("subsystem_name", subsystemSet)
.in("parts_name", partsList) .in("parts_name", typeSet)
.eq("parameter_source", "数据平台手工录入"); .eq("parameter_source", "数据平台手工录入");
// 版本号处理 //若传入填写人则查询填写人需要填写的参数
Integer version = ObjectUtils.defaultIfNull(request.getParameterVersion(), model.getVersionNumber()); if (ObjectUtils.isNotEmpty(request.getFilledById())) {
mpaasQuery.eq("major_version", version); query.eq("last_updated_by", request.getFilledById());
query.eq("major_version", model.getVersionNumber());
// 按填写人/责任人 动态拼接条件 } else if (ObjectUtils.isNotEmpty(request.getResponsiblePersonId())) {
String filledById = request.getFilledById(); //若传入责任人则查询责任人需要分发的参数
String responsiblePersonId = request.getResponsiblePersonId(); query.eq("responsible_person_id", request.getResponsiblePersonId());
if (StringUtils.isNotEmpty(filledById)) { query.eq("major_version", model.getVersionNumber());
mpaasQuery.conjuctionAnd() } else {
.or() Integer version = model.getVersionNumber();
.eq("last_updated_by", filledById) if (request.getParameterVersion() != null) {
.eq("filled_by", filledById); version = request.getParameterVersion();
} else if (StringUtils.isNotEmpty(responsiblePersonId)) { }
mpaasQuery query.eq("major_version", version);
.conjuctionAnd()
.and()
.eq("responsible_person_id", responsiblePersonId);
} }
// 查询所有参数详情 List<EngineParamDetailPojo> pojoList = query.doQuery(EngineParamDetailPojo.class);
List<EngineParamDetailPojo> paramDetails = mpaasQuery.doQuery(EngineParamDetailPojo.class);
if (CollectionUtils.isEmpty(paramDetails)) { if (ObjectUtils.isNotEmpty(request.getFilledById()) && pojoList.isEmpty()) {
return new LinkedHashMap<>(); query.eq("filled_by", request.getFilledById());
query.eq("major_version", model.getVersionNumber());
paramDetails.addAll(query.doQuery(EngineParamDetailPojo.class));
} else {
paramDetails.addAll(pojoList);
} }
// 批量查询 Set<String> userList = new HashSet<>();
Set<String> paramIds = paramDetails.stream() Set<String> parameterList = new HashSet<>();
.map(EngineParamDetailPojo::getParameterId) paramDetails.forEach(item -> {
.filter(ObjectUtils::isNotEmpty) if (ObjectUtils.isNotEmpty(item.getFilledBy())) {
.collect(Collectors.toSet()); userList.add(item.getFilledBy());
Map<String, String> paramIdToUnitMap = new HashMap<>(); }
if (!CollectionUtils.isEmpty(paramIds)) { if (ObjectUtils.isNotEmpty(item.getResponsiblePersonId())) {
List<ParameterPojo> parameters = bd.getBusinessDatabase() userList.add(item.getResponsiblePersonId());
.in("id", paramIds) }
.doQuery(ParameterPojo.class); parameterList.add(item.getParameterId());
paramIdToUnitMap = parameters.stream()
.collect(Collectors.toMap(ParameterPojo::getId, ParameterPojo::getUnit, (v1, v2) -> v1));
}
// 5.2 批量提取用户ID 批量查用户信息
Set<String> userIds = new HashSet<>();
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(userList);
List<XdapUsers> users = xdapDeptUsersService.selectUserByIds(new ArrayList<>(userIds)); Map<String, XdapUsers> usersMap = users.stream()
userIdToUserMap = users.stream() .collect(Collectors.toMap(XdapUsers::getId, user -> user));
.collect(Collectors.toMap(XdapUsers::getId, u -> u, (v1, v2) -> v1)); List<ParameterPojo> parameterPojos = bd.getBusinessDatabase()
.in("id", parameterList)
.doQuery(ParameterPojo.class);
Map<String, ParameterPojo> parameterPojoMap = parameterPojos.stream()
.collect(Collectors.toMap(ParameterPojo::getId, parameterPojo -> parameterPojo));
// 构建返回
for (EngineParamDetailPojo detail : paramDetails) {
EngineParamDetailDTO engineParamDetailDTO = new EngineParamDetailDTO();
BeanUtils.copyProperties(detail, engineParamDetailDTO);
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 = usersMap.getOrDefault(detail.getFilledBy(), null);
engineParamDetailDTO.setFiller(filler);
engineParamDetailDTO.setFilledBy(ObjectUtils.isEmpty(filler) ? "" : filler.getUsername());
engineParamDetailDTO.setIsDistributedFilled(1);
}
if (ObjectUtils.isNotEmpty(detail.getResponsiblePersonId())) {
XdapUsers responsiblePerson = usersMap.getOrDefault(detail.getResponsiblePersonId(), null);
engineParamDetailDTO.setResPerson(responsiblePerson);
engineParamDetailDTO.setResPersonId(ObjectUtils.isEmpty(responsiblePerson) ? "" : responsiblePerson.getUsername());
engineParamDetailDTO.setIsDistributedRes(1);
}
engineParamDetailDTO.setUnit(null);
if (ObjectUtils.isNotEmpty(detail.getParameterId())) {
ParameterPojo parameter = parameterPojoMap.getOrDefault(detail.getParameterId(), null);
engineParamDetailDTO.setUnit(ObjectUtils.isEmpty(parameter) ? "" : parameter.getUnit());
}
engineParamDetailDTO.setId(detail.getId());
engineParamDetailDTO.setApprovalId(detail.getApprovalId());
engineParamDetailDTOS.add(engineParamDetailDTO);
} }
// 转换 // 排序返回
Map<String, XdapUsers> finalUserIdToUserMap = userIdToUserMap; List<EngineParamDetailDTO> detailDTOList = engineParamDetailDTOS.stream()
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))
@ -868,8 +861,8 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
public List<ParameterPojo> selectAllByNewVersion() { public List<ParameterPojo> selectAllByNewVersion() {
//读取已通过审核的版本COMPLETE(已完成) //读取已通过审核的版本COMPLETE(已完成)
List<TemplatePojo> templates = bd.getBusinessDatabase() List<TemplatePojo> templates = bd.getBusinessDatabase()
.eq("status", "COMPLETE") .eq("status", "COMPLETE")
.doQuery(TemplatePojo.class); .doQuery(TemplatePojo.class);
if (ObjectUtils.isEmpty(templates)) { if (ObjectUtils.isEmpty(templates)) {
throw new CommonException("未找到未找到已发布的参数模板"); throw new CommonException("未找到未找到已发布的参数模板");
} }
@ -880,7 +873,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
.collect(Collectors.toList()); .collect(Collectors.toList());
List<TemplateAndParameterPojo> templateAndParameters = bd.getBusinessDatabase() List<TemplateAndParameterPojo> templateAndParameters = bd.getBusinessDatabase()
.in("template_id", templateIds) .in("template_id", templateIds)
.doQuery(TemplateAndParameterPojo.class); .doQuery(TemplateAndParameterPojo.class);
List<String> pIds = templateAndParameters.stream() List<String> pIds = templateAndParameters.stream()
.map(TemplateAndParameterPojo::getParameterId) .map(TemplateAndParameterPojo::getParameterId)
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@ -17,6 +17,7 @@ import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -232,7 +233,7 @@ public class XdapDeptUsersServiceImpl implements XdapDeptUsersService {
} }
@Override @Override
public List<XdapUsers> selectUserByIds(List<String> userIds) { public List<XdapUsers> selectUserByIds(Set<String> userIds) {
List<XdapUsers> users = bd.getSystemDatabase() List<XdapUsers> users = bd.getSystemDatabase()
.in("id", userIds) .in("id", userIds)
.doQuery(XdapUsers.class); .doQuery(XdapUsers.class);