feat(inspection): 新增来料检验任务记录及子项详情查询接口

- 新增接口以查询指定任务ID的来料检验任务检验记录,包含记录项和检验数据
- 新增接口以查询指定检验记录ID的检验记录子项列表,包含样本数据详情
- 引入相关VO类用于返回结构化的检验记录、检验项及检验数据
- 查询过程中关联检验标准项内容及检验标准项,丰富返回的数据内容
- 实现数据分组与映射,保证接口返回数据完整且结构清晰
- QmsIncomingInspectionTaskController增加对应REST接口支持前端调用
This commit is contained in:
曹鹏飞 2026-04-25 10:13:10 +08:00
parent 8acd4fa0ff
commit 818db2cc57
6 changed files with 465 additions and 8 deletions

View File

@ -6,6 +6,8 @@ import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskCheckDetailVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskCountVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskRecordItemDetailVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskRecordVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskVO;
import com.nflg.wms.repository.entity.QmsIncomingInspectionTaskRecord;
import com.nflg.wms.starter.BaseController;
@ -42,6 +44,14 @@ public class QmsIncomingInspectionTaskController extends BaseController {
return ApiResult.success(incomingInspectionTaskControllerService.getDetail(id));
}
// /**
// * 查询来料检验任务检验记录含检验项和检验数据
// */
// @GetMapping("records")
// public ApiResult<List<QmsIncomingInspectionTaskRecordVO>> getInspectionRecords(@RequestParam Long taskId) {
// return ApiResult.success(incomingInspectionTaskControllerService.getInspectionRecords(taskId));
// }
/**
* 转办
*/
@ -51,6 +61,22 @@ public class QmsIncomingInspectionTaskController extends BaseController {
return ApiResult.success();
}
/**
* 查询来料检测任务记录
*/
@GetMapping("records")
public ApiResult<List<QmsIncomingInspectionTaskRecord>> getRecords(@RequestParam Long taskId){
return ApiResult.success(incomingInspectionTaskControllerService.getRecords(taskId));
}
/**
* 查询来料检验任务检验记录子项列表含样本列表
*/
@GetMapping("record-items")
public ApiResult<List<QmsIncomingInspectionTaskRecordItemDetailVO>> getRecordItems(@RequestParam Long recordId){
return ApiResult.success(incomingInspectionTaskControllerService.getInspectionRecordItems(recordId));
}
/**
* 查询当前登录用户的待检验任务列表
*/
@ -67,14 +93,6 @@ public class QmsIncomingInspectionTaskController extends BaseController {
return ApiResult.success(incomingInspectionTaskControllerService.countByCurrentUser());
}
/**
* 查询来料检测任务记录
*/
@GetMapping("pad/records")
public ApiResult<List<QmsIncomingInspectionTaskRecord>> getRecords(@RequestParam Long taskId){
return ApiResult.success(incomingInspectionTaskControllerService.getRecords(taskId));
}
/**
* 查询待检测项
*/
@ -113,4 +131,5 @@ public class QmsIncomingInspectionTaskController extends BaseController {
return ApiResult.success();
}
}

View File

@ -10,6 +10,10 @@ import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskCheckDetailVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskCheckItemVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskCountVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskRecordItemDataVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskRecordItemDetailVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskRecordItemVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskRecordVO;
import com.nflg.wms.common.pojo.vo.QmsIncomingInspectionTaskVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
@ -24,7 +28,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 来料检测任务 Controller 服务
@ -93,6 +100,9 @@ public class IncomingInspectionTaskControllerService {
@Resource
private IQmsCodeLetterMatrixService codeLetterMatrixService;
@Resource
private IQmsInspectionStandardItemContentService inspectionStandardItemContentService;
/**
* 来料检验申请对外接口
* 业务规则
@ -590,6 +600,116 @@ public class IncomingInspectionTaskControllerService {
.list();
}
/**
* 查询来料检验任务检验记录含检验项和检验数据
*/
public List<QmsIncomingInspectionTaskRecordVO> getInspectionRecords(Long taskId) {
// 1. 查询该任务下所有检验记录
List<QmsIncomingInspectionTaskRecord> records = incomingInspectionTaskRecordService.lambdaQuery()
.eq(QmsIncomingInspectionTaskRecord::getTaskId, taskId)
.list();
if (CollectionUtil.isEmpty(records)) {
return List.of();
}
// 2. 收集所有记录ID
List<Long> recordIds = records.stream()
.map(QmsIncomingInspectionTaskRecord::getId)
.toList();
// 3. 查询所有记录下的检验项
List<QmsIncomingInspectionTaskRecordItem> allItems = incomingInspectionTaskRecordItemService.lambdaQuery()
.in(QmsIncomingInspectionTaskRecordItem::getRecordId, recordIds)
.list();
// 4. 收集所有检验项ID并构建 recordId -> items 映射
Map<Long, List<QmsIncomingInspectionTaskRecordItem>> recordItemMap = allItems.stream()
.collect(Collectors.groupingBy(QmsIncomingInspectionTaskRecordItem::getRecordId));
// 5. 查询检验标准项内容获取检测项名称标准等信息
List<Long> contentIds = allItems.stream()
.map(QmsIncomingInspectionTaskRecordItem::getInspectionStandardItemContentId)
.filter(Objects::nonNull)
.distinct()
.toList();
Map<Long, QmsInspectionStandardItemContent> contentMap = Map.of();
if (!contentIds.isEmpty()) {
contentMap = inspectionStandardItemContentService.lambdaQuery()
.in(QmsInspectionStandardItemContent::getId, contentIds)
.list()
.stream()
.collect(Collectors.toMap(QmsInspectionStandardItemContent::getId, Function.identity()));
}
// 6. 查询所有检验项下的检验数据
List<Long> itemIds = allItems.stream()
.map(QmsIncomingInspectionTaskRecordItem::getId)
.toList();
Map<Long, List<QmsIncomingInspectionTaskRecordItemData>> itemDataMap = Map.of();
if (!itemIds.isEmpty()) {
itemDataMap = incomingInspectionTaskRecordItemDataService.lambdaQuery()
.in(QmsIncomingInspectionTaskRecordItemData::getItemId, itemIds)
.list()
.stream()
.collect(Collectors.groupingBy(QmsIncomingInspectionTaskRecordItemData::getItemId));
}
// 7. 组装返回VO
Map<Long, QmsInspectionStandardItemContent> finalContentMap = contentMap;
Map<Long, List<QmsIncomingInspectionTaskRecordItemData>> finalItemDataMap = itemDataMap;
return records.stream().map(record -> {
QmsIncomingInspectionTaskRecordVO vo = new QmsIncomingInspectionTaskRecordVO();
vo.setId(record.getId());
vo.setTaskId(record.getTaskId());
vo.setMaterialUniqueNo(record.getMaterialUniqueNo());
vo.setQualified(record.getQualified());
vo.setInspectionQty(record.getInspectionQty());
vo.setQualifiedQty(record.getQualifiedQty());
vo.setUnqualifiedQty(record.getUnqualifiedQty());
vo.setCreateUserId(record.getCreateUserId());
vo.setCreateUserName(record.getCreateUserName());
vo.setCreateTime(record.getCreateTime());
// 组装检验项
List<QmsIncomingInspectionTaskRecordItem> items = recordItemMap.getOrDefault(record.getId(), List.of());
List<QmsIncomingInspectionTaskRecordItemVO> itemVOs = items.stream().map(item -> {
QmsIncomingInspectionTaskRecordItemVO itemVO = new QmsIncomingInspectionTaskRecordItemVO();
itemVO.setId(item.getId());
itemVO.setRecordId(item.getRecordId());
itemVO.setInspectionStandardItemContentId(item.getInspectionStandardItemContentId());
itemVO.setRemark(item.getRemark());
// 填充检验标准项内容信息
QmsInspectionStandardItemContent content = finalContentMap.get(item.getInspectionStandardItemContentId());
if (content != null) {
itemVO.setName(content.getName());
itemVO.setTestStandard(content.getTestStandard());
itemVO.setJudgmentType(content.getJudgmentType());
}
// 组装检验数据
List<QmsIncomingInspectionTaskRecordItemData> datas = finalItemDataMap.getOrDefault(item.getId(), List.of());
List<QmsIncomingInspectionTaskRecordItemDataVO> dataVOs = datas.stream().map(data -> {
QmsIncomingInspectionTaskRecordItemDataVO dataVO = new QmsIncomingInspectionTaskRecordItemDataVO();
dataVO.setId(data.getId());
dataVO.setTaskId(data.getTaskId());
dataVO.setItemId(data.getItemId());
dataVO.setMeasuredValue(data.getMeasuredValue());
dataVO.setQualified(data.getQualified());
dataVO.setImages(StrUtil.isNotBlank(data.getImages())
? List.of(data.getImages().split(","))
: List.of());
return dataVO;
}).toList();
itemVO.setDatas(dataVOs);
return itemVO;
}).toList();
vo.setItems(itemVOs);
return vo;
}).toList();
}
public QmsIncomingInspectionTaskCheckDetailVO getItemsForCheck(@Valid QmsIncomingInspectionTaskTodoCheckItemsQO request) {
QmsIncomingInspectionTask task = incomingInspectionTaskService.getById(request.getTaskId());
VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
@ -779,4 +899,115 @@ public class IncomingInspectionTaskControllerService {
//TODO
}
}
/**
* 查询来料检验任务检验记录子项列表含样本列表
* @param recordId 检验记录ID
* @return 检验记录子项列表每个子项包含其下的样本数据
*/
public List<QmsIncomingInspectionTaskRecordItemDetailVO> getInspectionRecordItems(Long recordId) {
// 1. 查询该记录下的所有检验项
List<QmsIncomingInspectionTaskRecordItem> items = incomingInspectionTaskRecordItemService.lambdaQuery()
.eq(QmsIncomingInspectionTaskRecordItem::getRecordId, recordId)
.list();
if (CollectionUtil.isEmpty(items)) {
return List.of();
}
// 2. 收集所有检验标准项内容ID查询检验标准项内容获取检测项名称标准等信息
List<Long> contentIds = items.stream()
.map(QmsIncomingInspectionTaskRecordItem::getInspectionStandardItemContentId)
.filter(Objects::nonNull)
.distinct()
.toList();
Map<Long, QmsInspectionStandardItemContent> contentMap = Map.of();
if (!contentIds.isEmpty()) {
contentMap = inspectionStandardItemContentService.lambdaQuery()
.in(QmsInspectionStandardItemContent::getId, contentIds)
.list()
.stream()
.collect(Collectors.toMap(QmsInspectionStandardItemContent::getId, Function.identity()));
}
// 3. 收集所有检验标准项ID查询检验标准项获取检验标准项类型和名称
List<Long> standardItemIds = contentMap.values().stream()
.map(QmsInspectionStandardItemContent::getInspectionStandardItemId)
.filter(Objects::nonNull)
.distinct()
.toList();
Map<Long, QmsInspectionStandardItem> standardItemMap = Map.of();
if (!standardItemIds.isEmpty()) {
standardItemMap = inspectionStandardItemService.lambdaQuery()
.in(QmsInspectionStandardItem::getId, standardItemIds)
.list()
.stream()
.collect(Collectors.toMap(QmsInspectionStandardItem::getId, Function.identity()));
}
// 4. 查询所有检验项下的检验数据样本
List<Long> itemIds = items.stream()
.map(QmsIncomingInspectionTaskRecordItem::getId)
.toList();
Map<Long, List<QmsIncomingInspectionTaskRecordItemData>> itemDataMap = Map.of();
if (!itemIds.isEmpty()) {
itemDataMap = incomingInspectionTaskRecordItemDataService.lambdaQuery()
.in(QmsIncomingInspectionTaskRecordItemData::getItemId, itemIds)
.list()
.stream()
.collect(Collectors.groupingBy(QmsIncomingInspectionTaskRecordItemData::getItemId));
}
// 5. 组装返回VO
Map<Long, QmsInspectionStandardItemContent> finalContentMap = contentMap;
Map<Long, QmsInspectionStandardItem> finalStandardItemMap = standardItemMap;
Map<Long, List<QmsIncomingInspectionTaskRecordItemData>> finalItemDataMap = itemDataMap;
return items.stream().map(item -> {
QmsIncomingInspectionTaskRecordItemDetailVO vo = new QmsIncomingInspectionTaskRecordItemDetailVO();
vo.setId(item.getId());
vo.setRecordId(item.getRecordId());
vo.setInspectionStandardItemContentId(item.getInspectionStandardItemContentId());
vo.setRemark(item.getRemark());
// 填充检验标准项内容信息
QmsInspectionStandardItemContent content = finalContentMap.get(item.getInspectionStandardItemContentId());
if (content != null) {
vo.setTestStandard(content.getTestStandard());
vo.setJudgmentType(content.getJudgmentType());
// 根据检验标准项类型设置检测项名称
QmsInspectionStandardItem standardItem = finalStandardItemMap.get(content.getInspectionStandardItemId());
if (standardItem != null) {
// 检验标准项类型0-标准检测项1-尺寸检测项
if (standardItem.getItemType() != null && standardItem.getItemType() == 0) {
// 标准检测项使用检验标准项的名称
vo.setName(standardItem.getName());
} else {
// 尺寸检测项使用检验内容的名称
vo.setName(content.getName());
}
} else {
// 如果找不到检验标准项默认使用检验内容的名称
vo.setName(content.getName());
}
}
// 组装检验数据样本
List<QmsIncomingInspectionTaskRecordItemData> datas = finalItemDataMap.getOrDefault(item.getId(), List.of());
List<QmsIncomingInspectionTaskRecordItemDataVO> dataVOs = datas.stream().map(data -> {
QmsIncomingInspectionTaskRecordItemDataVO dataVO = new QmsIncomingInspectionTaskRecordItemDataVO();
dataVO.setId(data.getId());
dataVO.setTaskId(data.getTaskId());
dataVO.setItemId(data.getItemId());
dataVO.setMeasuredValue(data.getMeasuredValue());
dataVO.setQualified(data.getQualified());
dataVO.setImages(StrUtil.isNotBlank(data.getImages())
? List.of(data.getImages().split(","))
: List.of());
return dataVO;
}).toList();
vo.setDatas(dataVOs);
return vo;
}).toList();
}
}

View File

@ -0,0 +1,40 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class QmsIncomingInspectionTaskRecordItemDataVO {
/**
* 记录项数据ID
*/
private Long id;
/**
* 来料检测任务ID
*/
private Long taskId;
/**
* 来料检测任务记录项ID
*/
private Long itemId;
/**
* 测量值
*/
private BigDecimal measuredValue;
/**
* 是否合格
*/
private Boolean qualified;
/**
* 图片列表
*/
private List<String> images;
}

View File

@ -0,0 +1,53 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.util.List;
/**
* 来料检验任务检验记录子项详情VO
* 包含检验记录子项及其下的样本列表
*/
@Data
public class QmsIncomingInspectionTaskRecordItemDetailVO {
/**
* 记录项ID
*/
private Long id;
/**
* 来料检测任务记录ID
*/
private Long recordId;
/**
* 检验标准项内容ID
*/
private Long inspectionStandardItemContentId;
/**
* 检测项名称
*/
private String name;
/**
* 检测标准
*/
private String testStandard;
/**
* 判定类型0直接判定1测量值
*/
private Integer judgmentType;
/**
* 备注
*/
private String remark;
/**
* 检测数据列表样本列表
*/
private List<QmsIncomingInspectionTaskRecordItemDataVO> datas;
}

View File

@ -0,0 +1,49 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.util.List;
@Data
public class QmsIncomingInspectionTaskRecordItemVO {
/**
* 记录项ID
*/
private Long id;
/**
* 来料检测任务记录ID
*/
private Long recordId;
/**
* 检验标准项内容ID
*/
private Long inspectionStandardItemContentId;
/**
* 检测项名称
*/
private String name;
/**
* 检测标准
*/
private String testStandard;
/**
* 判定类型0直接判定1测量值
*/
private Integer judgmentType;
/**
* 备注
*/
private String remark;
/**
* 检测数据列表
*/
private List<QmsIncomingInspectionTaskRecordItemDataVO> datas;
}

View File

@ -0,0 +1,65 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class QmsIncomingInspectionTaskRecordVO {
/**
* 检验记录ID
*/
private Long id;
/**
* 来料检测任务ID
*/
private Long taskId;
/**
* 物料唯一码
*/
private String materialUniqueNo;
/**
* 是否合格
*/
private Boolean qualified;
/**
* 样本数量
*/
private Integer inspectionQty;
/**
* 合格数量
*/
private Integer qualifiedQty;
/**
* 不合格数量
*/
private Integer unqualifiedQty;
/**
* 创建人ID
*/
private Long createUserId;
/**
* 创建人姓名
*/
private String createUserName;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 检验记录项列表
*/
private List<QmsIncomingInspectionTaskRecordItemVO> items;
}