feat(qms-pdi): 添加任务概要和发货前检测项详情接口
- 在QmsPdiInspectionResultsController新增summary接口,返回任务基本信息和检测项数量统计 - 在QmsPdiInspectionResultsController新增deliveryDetail接口,返回发货前检测项详情及图片URL列表 - QmsPdiInspectionResultsControllerService新增summary方法,聚合任务概要数据及统计检测项数量 - QmsPdiInspectionResultsControllerService新增deliveryDetail方法,查询发货前检测项并解析图片URL - 移除QmsPdiTaskRecordController及其Service中重复的summary和deliveryDetail相关代码 - 相关实体和服务接口注入调整,增强代码结构及职责分离
This commit is contained in:
parent
07dabfa9ad
commit
15149edb4d
|
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue