diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIncomingInspectionTaskController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIncomingInspectionTaskController.java index 11f9b930..51282c22 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIncomingInspectionTaskController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsIncomingInspectionTaskController.java @@ -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> 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> getRecords(@RequestParam Long taskId){ + return ApiResult.success(incomingInspectionTaskControllerService.getRecords(taskId)); + } + + /** + * 查询来料检验任务检验记录子项列表(含样本列表) + */ + @GetMapping("record-items") + public ApiResult> 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> getRecords(@RequestParam Long taskId){ - return ApiResult.success(incomingInspectionTaskControllerService.getRecords(taskId)); - } - /** * 查询待检测项 */ @@ -113,4 +131,5 @@ public class QmsIncomingInspectionTaskController extends BaseController { return ApiResult.success(); } + } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java index 2ad3e4e0..600cbd39 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/IncomingInspectionTaskControllerService.java @@ -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 getInspectionRecords(Long taskId) { + // 1. 查询该任务下所有检验记录 + List records = incomingInspectionTaskRecordService.lambdaQuery() + .eq(QmsIncomingInspectionTaskRecord::getTaskId, taskId) + .list(); + + if (CollectionUtil.isEmpty(records)) { + return List.of(); + } + + // 2. 收集所有记录ID + List recordIds = records.stream() + .map(QmsIncomingInspectionTaskRecord::getId) + .toList(); + + // 3. 查询所有记录下的检验项 + List allItems = incomingInspectionTaskRecordItemService.lambdaQuery() + .in(QmsIncomingInspectionTaskRecordItem::getRecordId, recordIds) + .list(); + + // 4. 收集所有检验项ID,并构建 recordId -> items 映射 + Map> recordItemMap = allItems.stream() + .collect(Collectors.groupingBy(QmsIncomingInspectionTaskRecordItem::getRecordId)); + + // 5. 查询检验标准项内容(获取检测项名称、标准等信息) + List contentIds = allItems.stream() + .map(QmsIncomingInspectionTaskRecordItem::getInspectionStandardItemContentId) + .filter(Objects::nonNull) + .distinct() + .toList(); + Map contentMap = Map.of(); + if (!contentIds.isEmpty()) { + contentMap = inspectionStandardItemContentService.lambdaQuery() + .in(QmsInspectionStandardItemContent::getId, contentIds) + .list() + .stream() + .collect(Collectors.toMap(QmsInspectionStandardItemContent::getId, Function.identity())); + } + + // 6. 查询所有检验项下的检验数据 + List itemIds = allItems.stream() + .map(QmsIncomingInspectionTaskRecordItem::getId) + .toList(); + Map> itemDataMap = Map.of(); + if (!itemIds.isEmpty()) { + itemDataMap = incomingInspectionTaskRecordItemDataService.lambdaQuery() + .in(QmsIncomingInspectionTaskRecordItemData::getItemId, itemIds) + .list() + .stream() + .collect(Collectors.groupingBy(QmsIncomingInspectionTaskRecordItemData::getItemId)); + } + + // 7. 组装返回VO + Map finalContentMap = contentMap; + Map> 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 items = recordItemMap.getOrDefault(record.getId(), List.of()); + List 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 datas = finalItemDataMap.getOrDefault(item.getId(), List.of()); + List 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 getInspectionRecordItems(Long recordId) { + // 1. 查询该记录下的所有检验项 + List items = incomingInspectionTaskRecordItemService.lambdaQuery() + .eq(QmsIncomingInspectionTaskRecordItem::getRecordId, recordId) + .list(); + + if (CollectionUtil.isEmpty(items)) { + return List.of(); + } + + // 2. 收集所有检验标准项内容ID,查询检验标准项内容(获取检测项名称、标准等信息) + List contentIds = items.stream() + .map(QmsIncomingInspectionTaskRecordItem::getInspectionStandardItemContentId) + .filter(Objects::nonNull) + .distinct() + .toList(); + Map 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 standardItemIds = contentMap.values().stream() + .map(QmsInspectionStandardItemContent::getInspectionStandardItemId) + .filter(Objects::nonNull) + .distinct() + .toList(); + Map standardItemMap = Map.of(); + if (!standardItemIds.isEmpty()) { + standardItemMap = inspectionStandardItemService.lambdaQuery() + .in(QmsInspectionStandardItem::getId, standardItemIds) + .list() + .stream() + .collect(Collectors.toMap(QmsInspectionStandardItem::getId, Function.identity())); + } + + // 4. 查询所有检验项下的检验数据(样本) + List itemIds = items.stream() + .map(QmsIncomingInspectionTaskRecordItem::getId) + .toList(); + Map> itemDataMap = Map.of(); + if (!itemIds.isEmpty()) { + itemDataMap = incomingInspectionTaskRecordItemDataService.lambdaQuery() + .in(QmsIncomingInspectionTaskRecordItemData::getItemId, itemIds) + .list() + .stream() + .collect(Collectors.groupingBy(QmsIncomingInspectionTaskRecordItemData::getItemId)); + } + + // 5. 组装返回VO + Map finalContentMap = contentMap; + Map finalStandardItemMap = standardItemMap; + Map> 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 datas = finalItemDataMap.getOrDefault(item.getId(), List.of()); + List 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(); + } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordItemDataVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordItemDataVO.java new file mode 100644 index 00000000..ddb41e68 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordItemDataVO.java @@ -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 images; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordItemDetailVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordItemDetailVO.java new file mode 100644 index 00000000..2d26e8b5 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordItemDetailVO.java @@ -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 datas; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordItemVO.java new file mode 100644 index 00000000..89a74aad --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordItemVO.java @@ -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 datas; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordVO.java new file mode 100644 index 00000000..c6fe1fab --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsIncomingInspectionTaskRecordVO.java @@ -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 items; +}