pdi查询检测项方法修改

This commit is contained in:
yf001217 2026-06-10 20:43:59 +08:00
parent f7942576b9
commit ef483e22a0
2 changed files with 46 additions and 12 deletions

View File

@ -51,6 +51,8 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class QmsPdiStatusItemControllerService {
private static final Integer SPECIAL_STATUS = 2;
private final IQmsPdiDetectionRulesStatusItemService statusItemService;
private final QmsPdiDetectionRulesStatusItemMapper statusItemMapper;
private final IQmsPdiDetectionRulesService pdiDetectionRulesService;
@ -76,7 +78,7 @@ public class QmsPdiStatusItemControllerService {
Long componentsId = null;
// 处理部件部件状态复用检测项的status
if (StrUtil.isNotBlank(request.getComponentsDes())) {
if (!isSpecialStatus(request.getStatus()) && StrUtil.isNotBlank(request.getComponentsDes())) {
// 检查部件是否已存在按检测规则ID + 名称 + 状态查询
QmsPdiComponentAnagement existingComponent = componentAnagementService.lambdaQuery()
.eq(QmsPdiComponentAnagement::getComponentName, request.getComponentsDes())
@ -112,13 +114,7 @@ public class QmsPdiStatusItemControllerService {
}
// 查询该部件下的最大sort值
Integer maxItemSort = statusItemService.lambdaQuery()
.eq(QmsPdiDetectionRulesStatusItem::getComponentsId, componentsId)
.orderByDesc(QmsPdiDetectionRulesStatusItem::getSort)
.last("LIMIT 1")
.oneOpt()
.map(QmsPdiDetectionRulesStatusItem::getSort)
.orElse(0);
Integer maxItemSort = getMaxItemSort(request.getDetectionRulesId(), request.getStatus(), componentsId);
// 插入检测项
QmsPdiDetectionRulesStatusItem entity = new QmsPdiDetectionRulesStatusItem()
@ -150,7 +146,9 @@ public class QmsPdiStatusItemControllerService {
.eq(QmsPdiDetectionRulesStatusItem::getId, request.getId())
.set(QmsPdiDetectionRulesStatusItem::getCreateBy, operator)
.set(QmsPdiDetectionRulesStatusItem::getCreateTime, LocalDateTime.now());
if (request.getComponentsId() != null) {
if (isSpecialStatus(existing.getStatus())) {
updateChain.set(QmsPdiDetectionRulesStatusItem::getComponentsId, null);
} else if (request.getComponentsId() != null) {
updateChain.set(QmsPdiDetectionRulesStatusItem::getComponentsId, request.getComponentsId());
}
if (StrUtil.isNotBlank(request.getInspectionContent())) {
@ -333,13 +331,16 @@ public class QmsPdiStatusItemControllerService {
Map<String, Long> componentNameToIdMap = new java.util.LinkedHashMap<>();
// 记录每个部件下的检测项数量
Map<Long, Integer> componentItemCountMap = new HashMap<>();
if (isSpecialStatus(status)) {
componentItemCountMap.put(null, getMaxItemSort(detectionRulesId, status, null));
}
// 按Excel顺序处理
for (QmsPdiStatusItemImportDTO dto : validData) {
Long componentsId;
// 处理部件
if (StrUtil.isNotBlank(dto.getComponentsDes())) {
if (!isSpecialStatus(status) && StrUtil.isNotBlank(dto.getComponentsDes())) {
if (componentNameToIdMap.containsKey(dto.getComponentsDes())) {
// 部件已存在直接使用
componentsId = componentNameToIdMap.get(dto.getComponentsDes());
@ -423,6 +424,16 @@ public class QmsPdiStatusItemControllerService {
return pd;
}
if (isSpecialStatus(request.getStatus())) {
QmsPdiStatusItemGroupVO groupVO = new QmsPdiStatusItemGroupVO();
groupVO.setDetectionRulesId(request.getDetectionRulesId());
groupVO.setComponentsId(null);
groupVO.setComponentName("特殊检测项");
groupVO.setSort(0);
groupVO.setItems(items.stream().map(this::toItemVO).collect(Collectors.toList()));
return pageGroups(request, List.of(groupVO));
}
// 2. 提取所有componentsId并去重
List<Long> componentIds = items.stream()
.map(QmsPdiDetectionRulesStatusItem::getComponentsId)
@ -461,7 +472,10 @@ public class QmsPdiStatusItemControllerService {
// 6. 按部件sort升序排序
voList.sort(Comparator.comparingInt(QmsPdiStatusItemGroupVO::getSort));
// 7. 分页按部件分页
return pageGroups(request, voList);
}
private PageData<QmsPdiStatusItemGroupVO> pageGroups(QmsPdiStatusItemSearchQO request, List<QmsPdiStatusItemGroupVO> voList) {
int total = voList.size();
int pageNum = request.getPage();
int pageSize = request.getPageSize();
@ -515,6 +529,26 @@ public class QmsPdiStatusItemControllerService {
return vo;
}
private boolean isSpecialStatus(Integer status) {
return Objects.equals(status, SPECIAL_STATUS);
}
private Integer getMaxItemSort(Long detectionRulesId, Integer status, Long componentsId) {
var query = statusItemService.lambdaQuery()
.eq(QmsPdiDetectionRulesStatusItem::getDetectionRulesId, detectionRulesId)
.eq(QmsPdiDetectionRulesStatusItem::getStatus, status);
if (Objects.isNull(componentsId)) {
query.isNull(QmsPdiDetectionRulesStatusItem::getComponentsId);
} else {
query.eq(QmsPdiDetectionRulesStatusItem::getComponentsId, componentsId);
}
return query.orderByDesc(QmsPdiDetectionRulesStatusItem::getSort)
.last("LIMIT 1")
.oneOpt()
.map(QmsPdiDetectionRulesStatusItem::getSort)
.orElse(0);
}
/**
* 若主表维护状态为未维护则更新为已维护
*/

View File

@ -5,7 +5,7 @@
<!-- 导出检测项 -->
<select id="listForExport" resultType="com.nflg.wms.common.pojo.dto.QmsPdiStatusItemExportDTO">
SELECT
c.component_name AS componentsId,
COALESCE(c.component_name, CASE WHEN s.status = 2 THEN '特殊检测项' ELSE '' END) AS componentsId,
s.inspection_content,
s.inspection_image,
CASE s.status WHEN 0 THEN '静态' WHEN 1 THEN '动态' WHEN 2 THEN '特殊' ELSE '' END AS status_name,