PDI部件管理优化
This commit is contained in:
parent
71a55b7534
commit
d9da88e351
|
|
@ -10,6 +10,7 @@ import com.nflg.wms.common.pojo.qo.QmsPdiTaskRecordTransferQO;
|
|||
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDefectPageVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDetailVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordPageVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordStatusItemGroupVO;
|
||||
import com.nflg.wms.starter.BaseController;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
|
|
@ -65,10 +66,10 @@ public class QmsPdiTaskRecordController extends BaseController {
|
|||
}
|
||||
|
||||
/**
|
||||
* 静态/动态/特殊检测项详情(分页)
|
||||
* 静态/动态/特殊检测项详情(分页,按部件分组)
|
||||
*/
|
||||
@PostMapping("statusItemDetail")
|
||||
public ApiResult<PageData<QmsPdiTaskRecordDetailVO.StatusItemVO>> statusItemDetail(
|
||||
public ApiResult<PageData<QmsPdiTaskRecordStatusItemGroupVO>> statusItemDetail(
|
||||
@Valid @RequestBody QmsPdiTaskRecordStatusItemDetailQO request) {
|
||||
return ApiResult.success(taskRecordControllerService.statusItemDetail(request));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,25 +71,33 @@ public class QmsPdiStatusItemControllerService {
|
|||
throw new NflgException(STATE.BusinessError, "静态/动态检测项的部件描述不能为空");
|
||||
}
|
||||
|
||||
// 状态为0或1时,部件状态不能为空
|
||||
if ((Objects.equals(request.getStatus(), 0) || Objects.equals(request.getStatus(), 1))
|
||||
&& request.getComponentStatus() == null) {
|
||||
throw new NflgException(STATE.BusinessError, "静态/动态检测项的部件状态不能为空");
|
||||
}
|
||||
|
||||
String operator = UserUtil.getUserName();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
Long componentsId = null;
|
||||
|
||||
// 处理部件
|
||||
if (StrUtil.isNotBlank(request.getComponentsDes())) {
|
||||
// 检查部件是否已存在
|
||||
// 检查部件是否已存在(按检测规则ID + 名称 + 状态查询)
|
||||
QmsPdiComponentAnagement existingComponent = componentAnagementService.lambdaQuery()
|
||||
.eq(QmsPdiComponentAnagement::getComponentName, request.getComponentsDes())
|
||||
.eq(QmsPdiComponentAnagement::getDetectionRulesId, request.getDetectionRulesId())
|
||||
.eq(QmsPdiComponentAnagement::getStatus, request.getComponentStatus())
|
||||
.one();
|
||||
|
||||
if (existingComponent != null) {
|
||||
// 部件已存在,直接使用
|
||||
componentsId = existingComponent.getId();
|
||||
} else {
|
||||
// 新部件,插入到部件表
|
||||
// 新部件,插入到部件表(sort按检测规则ID + 状态独立计算)
|
||||
Integer maxComponentSort = componentAnagementService.lambdaQuery()
|
||||
.eq(QmsPdiComponentAnagement::getDetectionRulesId, request.getDetectionRulesId())
|
||||
.eq(QmsPdiComponentAnagement::getStatus, request.getComponentStatus())
|
||||
.orderByDesc(QmsPdiComponentAnagement::getSort)
|
||||
.last("LIMIT 1")
|
||||
.oneOpt()
|
||||
|
|
@ -99,6 +107,7 @@ public class QmsPdiStatusItemControllerService {
|
|||
QmsPdiComponentAnagement component = new QmsPdiComponentAnagement();
|
||||
component.setComponentName(request.getComponentsDes());
|
||||
component.setDetectionRulesId(request.getDetectionRulesId());
|
||||
component.setStatus(request.getComponentStatus());
|
||||
component.setSort(maxComponentSort + 1);
|
||||
component.setCreateBy(operator);
|
||||
component.setCreateTime(now);
|
||||
|
|
@ -314,9 +323,10 @@ public class QmsPdiStatusItemControllerService {
|
|||
String operator = UserUtil.getUserName();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
// 查询部件表最大sort
|
||||
// 查询部件表最大sort(按检测规则ID + 状态独立计算)
|
||||
Integer maxComponentSort = componentAnagementService.lambdaQuery()
|
||||
.eq(QmsPdiComponentAnagement::getDetectionRulesId, detectionRulesId)
|
||||
.eq(QmsPdiComponentAnagement::getStatus, status)
|
||||
.orderByDesc(QmsPdiComponentAnagement::getSort)
|
||||
.last("LIMIT 1")
|
||||
.oneOpt()
|
||||
|
|
@ -347,6 +357,7 @@ public class QmsPdiStatusItemControllerService {
|
|||
QmsPdiComponentAnagement component = new QmsPdiComponentAnagement();
|
||||
component.setComponentName(componentName);
|
||||
component.setDetectionRulesId(detectionRulesId);
|
||||
component.setStatus(status != null ? status.shortValue() : null);
|
||||
component.setSort(currentComponentSort);
|
||||
component.setCreateBy(operator);
|
||||
component.setCreateTime(now);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import com.nflg.wms.common.pojo.qo.QmsPdiTaskRecordTransferQO;
|
|||
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDetailVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDefectPageVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordPageVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordStatusItemGroupVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordSummaryVO;
|
||||
import com.nflg.wms.common.util.UserUtil;
|
||||
import com.nflg.wms.repository.entity.QmsPdiComponentAnagement;
|
||||
|
|
@ -34,6 +35,8 @@ import org.springframework.stereotype.Service;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
|
@ -136,7 +139,7 @@ public class QmsPdiTaskRecordControllerService {
|
|||
/**
|
||||
* 查询静态/动态/特殊检测项详情(分页,按类型查询)
|
||||
*/
|
||||
public PageData<QmsPdiTaskRecordDetailVO.StatusItemVO> statusItemDetail(QmsPdiTaskRecordStatusItemDetailQO request) {
|
||||
public PageData<QmsPdiTaskRecordStatusItemGroupVO> statusItemDetail(QmsPdiTaskRecordStatusItemDetailQO request) {
|
||||
QmsPdiTaskRecord record = taskRecordService.getById(request.getId());
|
||||
if (Objects.isNull(record)) {
|
||||
throw new NflgException(STATE.BusinessError, "检测任务记录不存在");
|
||||
|
|
@ -146,18 +149,18 @@ public class QmsPdiTaskRecordControllerService {
|
|||
}
|
||||
|
||||
/**
|
||||
* 构建静态/动态/特殊检测项分页数据
|
||||
* 构建静态/动态/特殊检测项分页数据(按部件分组)
|
||||
*/
|
||||
private PageData<QmsPdiTaskRecordDetailVO.StatusItemVO> buildStatusItemPage(
|
||||
private PageData<QmsPdiTaskRecordStatusItemGroupVO> buildStatusItemPage(
|
||||
Long taskId, int itemType, int pageNum, int pageSize) {
|
||||
Page<QmsPdiInspectionResults> resultPage = inspectionResultsService.lambdaQuery()
|
||||
// 查询全部检测项(不分页,因为要按部件分组后再分页)
|
||||
List<QmsPdiInspectionResults> allRecords = inspectionResultsService.lambdaQuery()
|
||||
.eq(QmsPdiInspectionResults::getTaskId, taskId)
|
||||
.eq(QmsPdiInspectionResults::getInspectionItemType, itemType)
|
||||
.page(new Page<>(pageNum, pageSize));
|
||||
.list();
|
||||
|
||||
List<QmsPdiInspectionResults> records = resultPage.getRecords();
|
||||
if (records.isEmpty()) {
|
||||
PageData<QmsPdiTaskRecordDetailVO.StatusItemVO> pd = new PageData<>();
|
||||
if (allRecords.isEmpty()) {
|
||||
PageData<QmsPdiTaskRecordStatusItemGroupVO> pd = new PageData<>();
|
||||
pd.setPage(pageNum);
|
||||
pd.setPageSize(pageSize);
|
||||
pd.setItems(List.of());
|
||||
|
|
@ -166,7 +169,7 @@ public class QmsPdiTaskRecordControllerService {
|
|||
}
|
||||
|
||||
// 批量查关联的 status_item
|
||||
Set<Long> statusItemIds = records.stream()
|
||||
Set<Long> statusItemIds = allRecords.stream()
|
||||
.map(QmsPdiInspectionResults::getInspectionItemId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
|
|
@ -190,17 +193,31 @@ public class QmsPdiTaskRecordControllerService {
|
|||
.collect(Collectors.toMap(FileUploadRecord::getId, FileUploadRecord::getUrl, (a, b) -> a));
|
||||
}
|
||||
|
||||
// 映射
|
||||
// 收集所有部件ID,批量查询部件名称
|
||||
Set<Long> componentIds = statusItemMap.values().stream()
|
||||
.map(QmsPdiDetectionRulesStatusItem::getComponentsId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
Map<Long, QmsPdiComponentAnagement> componentMap = Map.of();
|
||||
if (!componentIds.isEmpty()) {
|
||||
List<QmsPdiComponentAnagement> components = componentAnagementService.listByIds(componentIds);
|
||||
componentMap = components.stream()
|
||||
.collect(Collectors.toMap(QmsPdiComponentAnagement::getId, c -> c, (a, b) -> a));
|
||||
}
|
||||
|
||||
// 映射成 StatusItemVO 列表
|
||||
Map<Long, QmsPdiDetectionRulesStatusItem> finalStatusMap = statusItemMap;
|
||||
Map<Long, String> finalImageUrlMap = imageUrlMap;
|
||||
List<QmsPdiTaskRecordDetailVO.StatusItemVO> voList = records.stream().map(r -> {
|
||||
Map<Long, QmsPdiComponentAnagement> finalComponentMap = componentMap;
|
||||
|
||||
List<QmsPdiTaskRecordDetailVO.StatusItemVO> voList = allRecords.stream().map(r -> {
|
||||
QmsPdiTaskRecordDetailVO.StatusItemVO vo = new QmsPdiTaskRecordDetailVO.StatusItemVO();
|
||||
vo.setId(r.getId());
|
||||
QmsPdiDetectionRulesStatusItem si = finalStatusMap.get(r.getInspectionItemId());
|
||||
if (si != null) {
|
||||
// 通过componentsId查询部件名称
|
||||
// 设置部件信息
|
||||
if (si.getComponentsId() != null) {
|
||||
QmsPdiComponentAnagement component = componentAnagementService.getById(si.getComponentsId());
|
||||
QmsPdiComponentAnagement component = finalComponentMap.get(si.getComponentsId());
|
||||
if (component != null) {
|
||||
vo.setComponentsDes(component.getComponentName());
|
||||
}
|
||||
|
|
@ -219,7 +236,6 @@ public class QmsPdiTaskRecordControllerService {
|
|||
}
|
||||
vo.setInspectionImage(inspectionImageUrl);
|
||||
}
|
||||
// 现场图已经是List<FileDetailVO>,无需转换(在下一步处理)
|
||||
vo.setInspectionItemImage(convertImageIdsToVO(r.getInspectionItemImage()));
|
||||
vo.setInspectionBy(r.getInspectionBy());
|
||||
vo.setInspectionTime(r.getInspectionTime());
|
||||
|
|
@ -228,11 +244,55 @@ public class QmsPdiTaskRecordControllerService {
|
|||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
PageData<QmsPdiTaskRecordDetailVO.StatusItemVO> pd = new PageData<>();
|
||||
// 按部件分组(componentsDes 相同的放一组,null 为特殊类型无部件)
|
||||
Map<String, List<QmsPdiTaskRecordDetailVO.StatusItemVO>> groupedByComponent = new LinkedHashMap<>();
|
||||
Map<String, Long> componentNameToId = new HashMap<>();
|
||||
|
||||
for (int i = 0; i < allRecords.size(); i++) {
|
||||
QmsPdiInspectionResults r = allRecords.get(i);
|
||||
QmsPdiTaskRecordDetailVO.StatusItemVO vo = voList.get(i);
|
||||
QmsPdiDetectionRulesStatusItem si = finalStatusMap.get(r.getInspectionItemId());
|
||||
|
||||
Long compId = (si != null) ? si.getComponentsId() : null;
|
||||
String compName = vo.getComponentsDes(); // 可能是 null
|
||||
|
||||
// 用部件ID作为分组 key(null 表示无部件)
|
||||
String groupKey = compId != null ? String.valueOf(compId) : "__null__";
|
||||
|
||||
groupedByComponent.computeIfAbsent(groupKey, k -> new ArrayList<>()).add(vo);
|
||||
if (compId != null && compName != null) {
|
||||
componentNameToId.putIfAbsent(groupKey, compId);
|
||||
}
|
||||
}
|
||||
|
||||
// 转成分组 VO 列表
|
||||
List<QmsPdiTaskRecordStatusItemGroupVO> groupList = new ArrayList<>();
|
||||
for (Map.Entry<String, List<QmsPdiTaskRecordDetailVO.StatusItemVO>> entry : groupedByComponent.entrySet()) {
|
||||
QmsPdiTaskRecordStatusItemGroupVO groupVO = new QmsPdiTaskRecordStatusItemGroupVO();
|
||||
String key = entry.getKey();
|
||||
if (!"__null__".equals(key)) {
|
||||
Long compId = componentNameToId.get(key);
|
||||
groupVO.setComponentsId(compId);
|
||||
QmsPdiComponentAnagement comp = finalComponentMap.get(compId);
|
||||
groupVO.setComponentName(comp != null ? comp.getComponentName() : null);
|
||||
}
|
||||
groupVO.setItems(entry.getValue());
|
||||
groupList.add(groupVO);
|
||||
}
|
||||
|
||||
// 对分组后的列表进行分页
|
||||
int total = groupList.size();
|
||||
int fromIndex = (pageNum - 1) * pageSize;
|
||||
int toIndex = Math.min(fromIndex + pageSize, total);
|
||||
List<QmsPdiTaskRecordStatusItemGroupVO> pagedList = (fromIndex >= total)
|
||||
? List.of()
|
||||
: groupList.subList(fromIndex, toIndex);
|
||||
|
||||
PageData<QmsPdiTaskRecordStatusItemGroupVO> pd = new PageData<>();
|
||||
pd.setPage(pageNum);
|
||||
pd.setPageSize(pageSize);
|
||||
pd.setItems(voList);
|
||||
pd.setTotal((int) resultPage.getTotal());
|
||||
pd.setItems(pagedList);
|
||||
pd.setTotal(total);
|
||||
return pd;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,11 @@ public class QmsPdiStatusItemAddQO {
|
|||
*/
|
||||
private String componentsDes;
|
||||
|
||||
/**
|
||||
* 部件状态:0为静态,1为动态(当status为0或1时需要传)
|
||||
*/
|
||||
private Short componentStatus;
|
||||
|
||||
/**
|
||||
* 检查核实内容(必传)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
package com.nflg.wms.common.pojo.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* PDI任务详情检测项分页返回VO(按部件分组)
|
||||
*/
|
||||
@Data
|
||||
public class QmsPdiTaskRecordStatusItemGroupVO {
|
||||
|
||||
/**
|
||||
* 部件ID(特殊类型无部件时为null)
|
||||
*/
|
||||
private Long componentsId;
|
||||
|
||||
/**
|
||||
* 部件名称(特殊类型无部件时为null)
|
||||
*/
|
||||
private String componentName;
|
||||
|
||||
/**
|
||||
* 该部件下的检测项列表
|
||||
*/
|
||||
private List<QmsPdiTaskRecordDetailVO.StatusItemVO> items;
|
||||
}
|
||||
|
|
@ -41,6 +41,11 @@ public class QmsPdiComponentAnagement implements Serializable {
|
|||
*/
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 状态:0为静态,1为动态
|
||||
*/
|
||||
private Short status;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue