diff --git a/src/main/java/com/xdap/self_development/service/XdapDeptUsersService.java b/src/main/java/com/xdap/self_development/service/XdapDeptUsersService.java index 390e819..732e553 100644 --- a/src/main/java/com/xdap/self_development/service/XdapDeptUsersService.java +++ b/src/main/java/com/xdap/self_development/service/XdapDeptUsersService.java @@ -6,6 +6,7 @@ import com.xdap.api.moudle.user.pojo.XdapUsers; import com.xdap.self_development.domain.view.UserInfoView; import javax.validation.constraints.NotBlank; +import java.util.ArrayList; import java.util.List; /** @@ -34,4 +35,6 @@ public interface XdapDeptUsersService { XdapUsers selectUserByCode(String userCode); UserInfoView getUserInfo(@NotBlank(message = "用户不能为空") String userId); + // 通过用户ID批量查询用户 + List selectUserByIds(List userIds); } diff --git a/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java index 6e2876c..29978f5 100644 --- a/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java @@ -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.column.LongestMatchColumnWidthStyleStrategy; 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.xdap.api.moudle.user.pojo.XdapUsers; 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 lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.IndexedColors; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -502,10 +505,6 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { */ @Override public Map> selectValueByMoreParam(EngineParamDetailRequest request) { - List engineParamDetailDTOS = new ArrayList<>(); - List paramDetails = new ArrayList<>(); - - // 获取当前机型 DataEntryEngineModelPojo model = bd.getBusinessDatabase() .eq("id", request.getEngineModelID()) .doQueryFirst(DataEntryEngineModelPojo.class); @@ -513,102 +512,119 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { throw new CommonException("机型不存在,请检查"); } - // 根据条件过滤查询 - for (String subsystemType : request.getSubsystemParts()) { - if (subsystemType.split("-").length != 2) { + List subsystemParts = request.getSubsystemParts(); + if (CollectionUtils.isEmpty(subsystemParts)) { + return new LinkedHashMap<>(); + } + + List subsystemList = new ArrayList<>(); + List partsList = new ArrayList<>(); + for (String item : subsystemParts) { + String[] split = item.split("-"); + if (split.length != 2) { throw new CommonException("查询条件异常,需子系统-零部件名称,若零部件为空则传入“/”"); } - String subsystem = subsystemType.split("-")[0]; - String type = subsystemType.split("-")[1]; - //若传入填写人则查询填写人需要填写的参数 - if (ObjectUtils.isNotEmpty(request.getFilledById())) { - List pojoList = bd.getBusinessDatabase() - .eq("last_updated_by", request.getFilledById()) - .eq("engine_model_id", model.getId()) - .eq("subsystem_name", subsystem) - .eq("parts_name", type) - .eq("major_version", model.getVersionNumber()) - .eq("parameter_source", "数据平台手工录入") - .doQuery(EngineParamDetailPojo.class); - if (pojoList.isEmpty()) { - paramDetails.addAll( - bd.getBusinessDatabase() - .eq("filled_by", request.getFilledById()) - .eq("engine_model_id", model.getId()) - .eq("subsystem_name", subsystem) - .eq("parts_name", type) - .eq("major_version", model.getVersionNumber()) - .eq("parameter_source", "数据平台手工录入") - .doQuery(EngineParamDetailPojo.class) - ); - } else { - paramDetails.addAll(pojoList); - } - } else if (ObjectUtils.isNotEmpty(request.getResponsiblePersonId())) { - //若传入责任人则查询责任人需要分发的参数 - 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)); - } + subsystemList.add(split[0]); + partsList.add(split[1]); } - // 构建返回 - for (EngineParamDetailPojo detail : paramDetails) { - EngineParamDetailDTO engineParamDetailDTO = new EngineParamDetailDTO(); - BeanUtils.copyProperties(detail, engineParamDetailDTO); + MpaasQuery mpaasQuery = bd.getBusinessDatabase() + .conjuctionAnd() + .and() + .eq("engine_model_id", model.getId()) + .in("subsystem_name", subsystemList) + .in("parts_name", partsList) + .eq("parameter_source", "数据平台手工录入"); - engineParamDetailDTO.setFilledBy(null); - engineParamDetailDTO.setFiller(null); - engineParamDetailDTO.setResPerson(null); - engineParamDetailDTO.setResPersonId(null); - engineParamDetailDTO.setIsDistributedFilled(0); - engineParamDetailDTO.setIsDistributedRes(0); + // 版本号处理 + Integer version = ObjectUtils.defaultIfNull(request.getParameterVersion(), model.getVersionNumber()); + mpaasQuery.eq("major_version", version); - 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())) { - ParameterPojo parameter = bd.getBusinessDatabase() - .eq("id", detail.getParameterId()) - .doQueryFirst(ParameterPojo.class); - engineParamDetailDTO.setUnit(parameter.getUnit()); - } - - engineParamDetailDTO.setId(detail.getId()); - engineParamDetailDTO.setApprovalId(detail.getApprovalId()); - engineParamDetailDTOS.add(engineParamDetailDTO); + // 按填写人/责任人 动态拼接条件 + String filledById = request.getFilledById(); + String responsiblePersonId = request.getResponsiblePersonId(); + if (StringUtils.isNotEmpty(filledById)) { + mpaasQuery.conjuctionAnd() + .or() + .eq("last_updated_by", filledById) + .eq("filled_by", filledById); + } else if (StringUtils.isNotEmpty(responsiblePersonId)) { + mpaasQuery + .conjuctionAnd() + .and() + .eq("responsible_person_id", responsiblePersonId); } - // 排序返回 - List detailDTOList = engineParamDetailDTOS.stream() + // 查询所有参数详情 + List paramDetails = mpaasQuery.doQuery(EngineParamDetailPojo.class); + if (CollectionUtils.isEmpty(paramDetails)) { + return new LinkedHashMap<>(); + } + + // 批量查询 + Set paramIds = paramDetails.stream() + .map(EngineParamDetailPojo::getParameterId) + .filter(ObjectUtils::isNotEmpty) + .collect(Collectors.toSet()); + Map paramIdToUnitMap = new HashMap<>(); + if (!CollectionUtils.isEmpty(paramIds)) { + List parameters = bd.getBusinessDatabase() + .in("id", paramIds) + .doQuery(ParameterPojo.class); + paramIdToUnitMap = parameters.stream() + .collect(Collectors.toMap(ParameterPojo::getId, ParameterPojo::getUnit, (v1, v2) -> v1)); + } + + // 5.2 批量提取用户ID → 批量查用户信息 + Set 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 userIdToUserMap = new HashMap<>(); + if (!CollectionUtils.isEmpty(userIds)) { + List users = xdapDeptUsersService.selectUserByIds(new ArrayList<>(userIds)); + userIdToUserMap = users.stream() + .collect(Collectors.toMap(XdapUsers::getId, u -> u, (v1, v2) -> v1)); + } + + // 转换 + Map finalUserIdToUserMap = userIdToUserMap; + Map finalParamIdToUnitMap = paramIdToUnitMap; + List 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 .comparing(EngineParamDetailDTO::getSubsystemName, Collator.getInstance(Locale.CHINA)) .thenComparing(EngineParamDetailDTO::getParameterName, Collator.getInstance(Locale.CHINA)) diff --git a/src/main/java/com/xdap/self_development/service/impl/XdapDeptUsersServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/XdapDeptUsersServiceImpl.java index ee8f8be..6f3fb98 100644 --- a/src/main/java/com/xdap/self_development/service/impl/XdapDeptUsersServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/XdapDeptUsersServiceImpl.java @@ -230,4 +230,16 @@ public class XdapDeptUsersServiceImpl implements XdapDeptUsersService { userInfoView.setDepartments(deptNames); return userInfoView; } + + @Override + public List selectUserByIds(List userIds) { + List users = bd.getSystemDatabase() + .in("id", userIds) + .doQuery(XdapUsers.class); + if (users.isEmpty()) { + return Collections.emptyList(); + } else { + return users; + } + } }