feat(qms-pdi): 添加任务概要和发货前检测项详情接口

- 在QmsPdiInspectionResultsController新增summary接口,返回任务基本信息和检测项数量统计
- 在QmsPdiInspectionResultsController新增deliveryDetail接口,返回发货前检测项详情及图片URL列表
- QmsPdiInspectionResultsControllerService新增summary方法,聚合任务概要数据及统计检测项数量
- QmsPdiInspectionResultsControllerService新增deliveryDetail方法,查询发货前检测项并解析图片URL
- 移除QmsPdiTaskRecordController及其Service中重复的summary和deliveryDetail相关代码
- 相关实体和服务接口注入调整,增强代码结构及职责分离
This commit is contained in:
funny 2026-05-07 10:06:04 +08:00
parent 07dabfa9ad
commit 15149edb4d
4 changed files with 140 additions and 125 deletions

View File

@ -13,9 +13,11 @@ import com.nflg.wms.repository.entity.QmsPdiInspectionResults;
import com.nflg.wms.common.pojo.vo.QmsPdiInspectionResultsPageVO; import com.nflg.wms.common.pojo.vo.QmsPdiInspectionResultsPageVO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskListVO; import com.nflg.wms.common.pojo.vo.QmsPdiTaskListVO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDetailVO; import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDetailVO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordSummaryVO;
import com.nflg.wms.starter.BaseController; import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -83,4 +85,22 @@ public class QmsPdiInspectionResultsController extends BaseController {
@Valid @RequestBody QmsPdiTaskRecordStatusItemDetailQO request) { @Valid @RequestBody QmsPdiTaskRecordStatusItemDetailQO request) {
return ApiResult.success(inspectionResultsControllerService.detail(request)); return ApiResult.success(inspectionResultsControllerService.detail(request));
} }
/**
* 任务概要基本信息 + 各类检测项数量统计
*/
@GetMapping("summary")
public ApiResult<QmsPdiTaskRecordSummaryVO> summary(
@NotNull(message = "任务ID不能为空") @RequestParam Long id) {
return ApiResult.success(inspectionResultsControllerService.summary(id));
}
/**
* 发货前检测项详情inspectionItemType=2图片直接返回URL列表
*/
@GetMapping("deliveryDetail")
public ApiResult<List<QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO>> deliveryDetail(
@NotNull(message = "任务ID不能为空") @RequestParam Long id) {
return ApiResult.success(inspectionResultsControllerService.deliveryDetail(id));
}
} }

View File

@ -10,7 +10,6 @@ import com.nflg.wms.common.pojo.qo.QmsPdiTaskRecordTransferQO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDefectPageVO; import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDefectPageVO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDetailVO; import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDetailVO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordPageVO; import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordPageVO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordSummaryVO;
import com.nflg.wms.starter.BaseController; import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@ -82,22 +81,4 @@ public class QmsPdiTaskRecordController extends BaseController {
@NotNull(message = "检测记录ID不能为空") @RequestParam Long id) { @NotNull(message = "检测记录ID不能为空") @RequestParam Long id) {
return ApiResult.success(taskRecordControllerService.getInspectionImages(id)); return ApiResult.success(taskRecordControllerService.getInspectionImages(id));
} }
/**
* 任务概要基本信息 + 各类检测项数量统计
*/
@GetMapping("summary")
public ApiResult<QmsPdiTaskRecordSummaryVO> summary(
@NotNull(message = "任务ID不能为空") @RequestParam Long id) {
return ApiResult.success(taskRecordControllerService.summary(id));
}
/**
* 发货前检测项详情inspectionItemType=2图片直接返回URL列表
*/
@GetMapping("deliveryDetail")
public ApiResult<List<QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO>> deliveryDetail(
@NotNull(message = "任务ID不能为空") @RequestParam Long id) {
return ApiResult.success(taskRecordControllerService.deliveryDetail(id));
}
} }

View File

@ -13,9 +13,14 @@ import com.nflg.wms.common.pojo.qo.QmsPdiTaskRecordStatusItemDetailQO;
import com.nflg.wms.common.pojo.vo.QmsPdiInspectionResultsPageVO; import com.nflg.wms.common.pojo.vo.QmsPdiInspectionResultsPageVO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskListVO; import com.nflg.wms.common.pojo.vo.QmsPdiTaskListVO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDetailVO; import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordDetailVO;
import com.nflg.wms.common.pojo.vo.QmsPdiTaskRecordSummaryVO;
import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.QmsPdiDetectionRules;
import com.nflg.wms.repository.entity.QmsPdiDetectionRulesDeliveryItem;
import com.nflg.wms.repository.entity.QmsPdiInspectionResults; import com.nflg.wms.repository.entity.QmsPdiInspectionResults;
import com.nflg.wms.repository.entity.QmsPdiTaskRecord; import com.nflg.wms.repository.entity.QmsPdiTaskRecord;
import com.nflg.wms.repository.service.IQmsPdiDetectionRulesDeliveryItemService;
import com.nflg.wms.repository.service.IQmsPdiDetectionRulesService;
import com.nflg.wms.repository.service.IQmsPdiInspectionResultsService; import com.nflg.wms.repository.service.IQmsPdiInspectionResultsService;
import com.nflg.wms.repository.service.IQmsPdiTaskRecordService; import com.nflg.wms.repository.service.IQmsPdiTaskRecordService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -23,9 +28,12 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -40,6 +48,12 @@ public class QmsPdiInspectionResultsControllerService {
@Resource @Resource
private IQmsPdiTaskRecordService taskRecordService; private IQmsPdiTaskRecordService taskRecordService;
@Resource
private IQmsPdiDetectionRulesService detectionRulesService;
@Resource
private IQmsPdiDetectionRulesDeliveryItemService deliveryItemService;
@Resource @Resource
private QmsPdiTaskRecordControllerService taskRecordControllerService; private QmsPdiTaskRecordControllerService taskRecordControllerService;
@ -267,4 +281,110 @@ public class QmsPdiInspectionResultsControllerService {
public List<QmsPdiTaskRecordDetailVO.StatusItemVO> detail(QmsPdiTaskRecordStatusItemDetailQO request) { public List<QmsPdiTaskRecordDetailVO.StatusItemVO> detail(QmsPdiTaskRecordStatusItemDetailQO request) {
return taskRecordControllerService.statusItemList(request.getId(), request.getInspectionItemType()); return taskRecordControllerService.statusItemList(request.getId(), request.getInspectionItemType());
} }
// ========================= 任务概要 =========================
/**
* 查询任务概要信息基本信息 + 各类检测项数量统计
*/
public QmsPdiTaskRecordSummaryVO summary(Long taskId) {
QmsPdiTaskRecord task = taskRecordService.getById(taskId);
if (task == null) {
throw new NflgException(STATE.BusinessError, "任务记录不存在");
}
QmsPdiTaskRecordSummaryVO vo = new QmsPdiTaskRecordSummaryVO();
vo.setTaskNo(task.getTaskNo());
vo.setDeviceNo(task.getDeviceNo());
vo.setOrderNo(task.getOrderNo());
vo.setRequiredCompletionTime(task.getRequiredCompletionTime());
// 查询检测规则获取机型编号和检测版本
if (task.getDetectionRulesId() != null) {
QmsPdiDetectionRules rules = detectionRulesService.getById(task.getDetectionRulesId());
if (rules != null) {
vo.setMachineNo(rules.getMachineNo());
vo.setInspectionVersion(rules.getInspectionVersion());
}
}
// qms_pdi_inspection_results inspection_item_type 分组统计
List<QmsPdiInspectionResults> results = inspectionResultsService.lambdaQuery()
.eq(QmsPdiInspectionResults::getTaskId, taskId)
.list();
int staticCount = 0;
int dynamicCount = 0;
int specialCount = 0;
for (QmsPdiInspectionResults r : results) {
if (r.getInspectionItemType() == null) continue;
switch (r.getInspectionItemType()) {
case 0 -> staticCount++;
case 1 -> dynamicCount++;
case 3 -> specialCount++;
}
}
vo.setStaticItemCount(staticCount);
vo.setDynamicItemCount(dynamicCount);
vo.setSpecialItemCount(specialCount);
return vo;
}
// ========================= 发货前检测项详情 =========================
/**
* 查询发货前检测项inspectionItemType=2图片直接返回URL列表
*/
public List<QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO> deliveryDetail(Long taskId) {
// 查询该任务下所有 type=2 的记录
List<QmsPdiInspectionResults> results = inspectionResultsService.lambdaQuery()
.eq(QmsPdiInspectionResults::getTaskId, taskId)
.eq(QmsPdiInspectionResults::getInspectionItemType, 2)
.list();
if (results.isEmpty()) {
return List.of();
}
// 批量查 delivery_item 获取 checklist
Set<Long> deliveryItemIds = results.stream()
.map(QmsPdiInspectionResults::getInspectionItemId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Map<Long, QmsPdiDetectionRulesDeliveryItem> deliveryItemMap = Map.of();
if (!deliveryItemIds.isEmpty()) {
List<QmsPdiDetectionRulesDeliveryItem> deliveryItems = deliveryItemService.listByIds(deliveryItemIds);
deliveryItemMap = deliveryItems.stream()
.collect(Collectors.toMap(QmsPdiDetectionRulesDeliveryItem::getId, di -> di, (a, b) -> a));
}
// 构建返回列表
Map<Long, QmsPdiDetectionRulesDeliveryItem> finalMap = deliveryItemMap;
List<QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO> detailList = new ArrayList<>();
for (QmsPdiInspectionResults r : results) {
QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO vo = new QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO();
vo.setDeliveryItemId(r.getInspectionItemId());
// checklist delivery_item 获取
QmsPdiDetectionRulesDeliveryItem di = finalMap.get(r.getInspectionItemId());
if (di != null) {
vo.setChecklist(di.getChecklist());
}
// inspectionItemImage 按逗号拆分直接返回URL列表
String imageStr = r.getInspectionItemImage();
if (imageStr != null && !imageStr.isEmpty()) {
vo.setInspectionItemImage(Arrays.stream(imageStr.split(","))
.map(String::trim)
.filter(s -> !s.isEmpty())
.collect(Collectors.toList()));
} else {
vo.setInspectionItemImage(List.of());
}
detailList.add(vo);
}
return detailList;
}
} }

View File

@ -322,110 +322,4 @@ public class QmsPdiTaskRecordControllerService {
} }
return convertImageIdsToVO(result.getInspectionItemImage()); return convertImageIdsToVO(result.getInspectionItemImage());
} }
// ========================= 发货前检测项详情 =========================
/**
* 查询发货前检测项inspectionItemType=2图片直接返回URL列表
*/
public List<QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO> deliveryDetail(Long taskId) {
// 查询该任务下所有 type=2 的记录
List<QmsPdiInspectionResults> results = inspectionResultsService.lambdaQuery()
.eq(QmsPdiInspectionResults::getTaskId, taskId)
.eq(QmsPdiInspectionResults::getInspectionItemType, 2)
.list();
if (results.isEmpty()) {
return List.of();
}
// 批量查 delivery_item 获取 checklist
Set<Long> deliveryItemIds = results.stream()
.map(QmsPdiInspectionResults::getInspectionItemId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Map<Long, QmsPdiDetectionRulesDeliveryItem> deliveryItemMap = Map.of();
if (!deliveryItemIds.isEmpty()) {
List<QmsPdiDetectionRulesDeliveryItem> deliveryItems = deliveryItemService.listByIds(deliveryItemIds);
deliveryItemMap = deliveryItems.stream()
.collect(Collectors.toMap(QmsPdiDetectionRulesDeliveryItem::getId, di -> di, (a, b) -> a));
}
// 构建返回列表
Map<Long, QmsPdiDetectionRulesDeliveryItem> finalMap = deliveryItemMap;
List<QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO> detailList = new ArrayList<>();
for (QmsPdiInspectionResults r : results) {
QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO vo = new QmsPdiTaskRecordDetailVO.DeliveryItemDetailVO();
vo.setDeliveryItemId(r.getInspectionItemId());
// checklist delivery_item 获取
QmsPdiDetectionRulesDeliveryItem di = finalMap.get(r.getInspectionItemId());
if (di != null) {
vo.setChecklist(di.getChecklist());
}
// inspectionItemImage 按逗号拆分直接返回URL列表
String imageStr = r.getInspectionItemImage();
if (imageStr != null && !imageStr.isEmpty()) {
vo.setInspectionItemImage(Arrays.stream(imageStr.split(","))
.map(String::trim)
.filter(s -> !s.isEmpty())
.collect(Collectors.toList()));
} else {
vo.setInspectionItemImage(List.of());
}
detailList.add(vo);
}
return detailList;
}
// ========================= 任务概要 =========================
/**
* 查询任务概要信息基本信息 + 各类检测项数量统计
*/
public QmsPdiTaskRecordSummaryVO summary(Long taskId) {
QmsPdiTaskRecord task = taskRecordService.getById(taskId);
if (task == null) {
throw new NflgException(STATE.BusinessError, "任务记录不存在");
}
QmsPdiTaskRecordSummaryVO vo = new QmsPdiTaskRecordSummaryVO();
vo.setTaskNo(task.getTaskNo());
vo.setDeviceNo(task.getDeviceNo());
vo.setOrderNo(task.getOrderNo());
vo.setRequiredCompletionTime(task.getRequiredCompletionTime());
// 查询检测规则获取机型编号和检测版本
if (task.getDetectionRulesId() != null) {
QmsPdiDetectionRules rules = detectionRulesService.getById(task.getDetectionRulesId());
if (rules != null) {
vo.setMachineNo(rules.getMachineNo());
vo.setInspectionVersion(rules.getInspectionVersion());
}
}
// qms_pdi_inspection_results inspection_item_type 分组统计
List<QmsPdiInspectionResults> results = inspectionResultsService.lambdaQuery()
.eq(QmsPdiInspectionResults::getTaskId, taskId)
.list();
int staticCount = 0;
int dynamicCount = 0;
int specialCount = 0;
for (QmsPdiInspectionResults r : results) {
if (r.getInspectionItemType() == null) continue;
switch (r.getInspectionItemType()) {
case 0 -> staticCount++;
case 1 -> dynamicCount++;
case 3 -> specialCount++;
}
}
vo.setStaticItemCount(staticCount);
vo.setDynamicItemCount(dynamicCount);
vo.setSpecialItemCount(specialCount);
return vo;
}
} }