From 6a691e498496d6b426eec7bab7e099e3e279a217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 14 Apr 2026 19:10:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(qmsInspectionStandard):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=A3=80=E9=AA=8C=E6=A0=87=E5=87=86=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=8F=8A=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E5=92=8C=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增QmsInspectionStandardController,包含分页查询、发布、启用禁用、暂存及详情查询接口 - 实现QmsInspectionStandardControllerService,支持检验标准详情查询及暂存功能 - 新增Mapper接口及XML,实现分页查询及详情查询的SQL支持 - 新增检测项及内容的增删改查及转换VO逻辑 - 新增质检物料相关Controller和Service,支持增删改查、导入导出及模板下载 - 质检物料添加物料类别校验及路径构建,导入时支持校验和批量处理 - 质检物料编辑支持多字段更新及校验,删除时限制规则已维护物料 - 引入事务管理,保证数据一致性 --- .../QmsInspectionStandardController.java | 24 ++ .../QmsInspectionStandardItemController.java | 35 ++ .../controller/QmsQcMaterialController.java | 18 + ...msInspectionStandardControllerService.java | 345 ++++++++++++++++++ ...spectionStandardItemControllerService.java | 70 ++++ .../QmsQcMaterialControllerService.java | 34 ++ .../pojo/qo/QmsInspectionStandardSaveQO.java | 136 +++++++ .../vo/QmsInspectionStandardDetailVO.java | 133 +++++++ .../QmsInspectionStandardItemContentVO.java | 67 ++++ .../pojo/vo/QmsInspectionStandardItemVO.java | 93 +++++ ...msInspectionStandardItemContentMapper.java | 10 + .../QmsInspectionStandardItemMapper.java | 10 + .../mapper/QmsInspectionStandardMapper.java | 6 + ...sInspectionStandardItemContentService.java | 10 + .../IQmsInspectionStandardItemService.java | 10 + ...pectionStandardItemContentServiceImpl.java | 15 + .../QmsInspectionStandardItemServiceImpl.java | 15 + .../mapper/QmsInspectionStandardMapper.xml | 39 ++ 18 files changed, 1070 insertions(+) create mode 100644 nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardItemController.java create mode 100644 nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardItemControllerService.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardSaveQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardDetailVO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardItemContentVO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardItemVO.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardItemContentMapper.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardItemMapper.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectionStandardItemContentService.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectionStandardItemService.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionStandardItemContentServiceImpl.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionStandardItemServiceImpl.java diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java index bcb4507f..2bb9d743 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java @@ -5,14 +5,20 @@ import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.qo.EnableQO; import com.nflg.wms.common.pojo.qo.IdsQO; +import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSaveQO; import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSearchQO; +import com.nflg.wms.common.pojo.vo.QmsInspectionStandardDetailVO; import com.nflg.wms.common.pojo.vo.QmsInspectionStandardVO; import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -20,6 +26,7 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequestMapping("/inspection-standard") +@Validated public class QmsInspectionStandardController extends BaseController { @Resource @@ -50,4 +57,21 @@ public class QmsInspectionStandardController extends BaseController { inspectionStandardControllerService.enable(request.getId(), request.getEnable()); return ApiResult.success(); } + + /** + * 暂存检验标准(检测项和检测项内容) + */ + @PostMapping("saveDraft") + public ApiResult saveDraft(@Valid @RequestBody QmsInspectionStandardSaveQO request) { + inspectionStandardControllerService.saveDraft(request); + return ApiResult.success(); + } + + /** + * 查询检验标准详情(包含检测项列表) + */ + @GetMapping("detail") + public ApiResult detail(@RequestParam @NotNull(message = "ID不能为空") Long id) { + return ApiResult.success(inspectionStandardControllerService.getDetail(id)); + } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardItemController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardItemController.java new file mode 100644 index 00000000..39f627c9 --- /dev/null +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardItemController.java @@ -0,0 +1,35 @@ +package com.nflg.qms.admin.controller; + +import com.nflg.qms.admin.service.QmsInspectionStandardItemControllerService; +import com.nflg.wms.common.pojo.ApiResult; +import com.nflg.wms.common.pojo.vo.QmsInspectionStandardItemContentVO; +import com.nflg.wms.starter.BaseController; +import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 检验标准项 + */ +@RestController +@RequestMapping("/inspection-standard-item") +@Validated +public class QmsInspectionStandardItemController extends BaseController { + + @Resource + private QmsInspectionStandardItemControllerService inspectionStandardItemControllerService; + + /** + * 根据检验标准项ID查询检验内容列表 + */ + @GetMapping("contents") + public ApiResult> contents(@RequestParam @NotNull(message = "检验标准项ID不能为空") Long itemId) { + return ApiResult.success(inspectionStandardItemControllerService.getItemContents(itemId)); + } +} diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQcMaterialController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQcMaterialController.java index ac2bb935..2789ddf9 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQcMaterialController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsQcMaterialController.java @@ -3,6 +3,8 @@ package com.nflg.qms.admin.controller; import com.nflg.qms.admin.service.QmsQcMaterialControllerService; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.dto.BomMaterialDTO; +import com.nflg.wms.common.pojo.qo.BomMaterialListQO; import com.nflg.wms.common.pojo.qo.QmsQcMaterialAddQO; import com.nflg.wms.common.pojo.qo.QmsQcMaterialSearchQO; import com.nflg.wms.common.pojo.qo.QmsQcMaterialUpdateQO; @@ -83,4 +85,20 @@ public class QmsQcMaterialController extends BaseController { public void exportSearch(HttpServletResponse response, @Valid @RequestBody QmsQcMaterialSearchQO request) throws IOException { qcMaterialControllerService.exportSearch(response, request); } + + /** + * 下载导入模板 + */ + @PostMapping("template") + public void template(HttpServletResponse response) throws IOException { + qcMaterialControllerService.exportTemplate(response); + } + + /** + * 搜索主物料系统物料信息 + */ + @PostMapping("searchBomMaterial") + public ApiResult> searchBomMaterial(@Valid @RequestBody BomMaterialListQO request){ + return ApiResult.success(qcMaterialControllerService.searchBomMaterial(request)); + } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java index 5cc173a0..3d50df76 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java @@ -2,16 +2,33 @@ package com.nflg.qms.admin.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSaveQO; import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSearchQO; +import com.nflg.wms.common.pojo.vo.QmsInspectionStandardDetailVO; +import com.nflg.wms.common.pojo.vo.QmsInspectionStandardItemContentVO; +import com.nflg.wms.common.pojo.vo.QmsInspectionStandardItemVO; import com.nflg.wms.common.pojo.vo.QmsInspectionStandardVO; +import com.nflg.wms.common.util.UserUtil; +import com.nflg.wms.repository.entity.QmsInspectionStandard; +import com.nflg.wms.repository.entity.QmsInspectionStandardItem; +import com.nflg.wms.repository.entity.QmsInspectionStandardItemContent; import com.nflg.wms.repository.mapper.QmsInspectionStandardMapper; import com.nflg.wms.repository.service.IQmsInspectionStandardService; +import com.nflg.wms.repository.service.IQmsInspectionStandardItemContentService; +import com.nflg.wms.repository.service.IQmsInspectionStandardItemService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; /** * 检验标准业务逻辑 @@ -26,6 +43,12 @@ public class QmsInspectionStandardControllerService { @Resource private QmsInspectionStandardMapper inspectionStandardMapper; + @Resource + private IQmsInspectionStandardItemService inspectionStandardItemService; + + @Resource + private IQmsInspectionStandardItemContentService inspectionStandardItemContentService; + /** * 分页查询检验标准 */ @@ -57,4 +80,326 @@ public class QmsInspectionStandardControllerService { public void enable(Long id, Boolean enable) { inspectionStandardService.enable(id, enable); } + + /** + * 查询检验标准详情(包含检测项列表) + * @param id 检验标准ID + * @return 检验标准详情 + */ + public QmsInspectionStandardDetailVO getDetail(Long id) { + // 1. 查询检验标准基本信息 + QmsInspectionStandard standard = inspectionStandardService.getById(id); + if (standard == null) { + throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检验标准不存在"); + } + + // 2. 查询检验标准详情(关联物料等信息) + QmsInspectionStandardDetailVO detail = inspectionStandardMapper.getDetailById(id); + if (detail == null) { + detail = new QmsInspectionStandardDetailVO(); + } + + // 填充基础字段 + detail.setId(standard.getId()); + detail.setMaterialId(standard.getMaterialId()); + detail.setInspectionTaskItemId(standard.getInspectionTaskItemId()); + detail.setDrawingUrl(standard.getDrawingUrl()); + detail.setVersionNo(standard.getVersionNo()); + detail.setIsEnabled(standard.getIsEnabled()); + detail.setPackagingMethodId(standard.getPackagingMethodId()); + detail.setInspectionCycle(standard.getInspectionCycle()); + detail.setPublishStatus(standard.getPublishStatus()); + detail.setPublishUserId(standard.getPublishUserId()); + detail.setPublishUserName(standard.getPublishUserName()); + detail.setPublishTime(standard.getPublishTime()); + detail.setCreateUserId(standard.getCreateUserId()); + detail.setCreateUserName(standard.getCreateUserName()); + detail.setCreateTime(standard.getCreateTime()); + detail.setUpdateUserId(standard.getUpdateUserId()); + detail.setUpdateUserName(standard.getUpdateUserName()); + detail.setUpdateTime(standard.getUpdateTime()); + + // 3. 查询检测项列表 + List items = inspectionStandardItemService.lambdaQuery() + .eq(QmsInspectionStandardItem::getInspectionStandardId, id) + .orderByAsc(QmsInspectionStandardItem::getSortNo) + .list(); + + // 4. 转换为VO并填充内容列表 + List itemVOs = new ArrayList<>(); + for (QmsInspectionStandardItem item : items) { + QmsInspectionStandardItemVO itemVO = convertToItemVO(item); + + // 查询检测项内容列表 + List contents = inspectionStandardItemContentService.lambdaQuery() + .eq(QmsInspectionStandardItemContent::getInspectionStandardItemId, item.getId()) + .orderByAsc(QmsInspectionStandardItemContent::getSortNo) + .list(); + + List contentVOs = contents.stream() + .map(this::convertToContentVO) + .collect(Collectors.toList()); + + itemVO.setContents(contentVOs); + itemVOs.add(itemVO); + } + + detail.setItems(itemVOs); + return detail; + } + + /** + * 转换检测项实体为VO + */ + private QmsInspectionStandardItemVO convertToItemVO(QmsInspectionStandardItem item) { + QmsInspectionStandardItemVO vo = new QmsInspectionStandardItemVO(); + vo.setId(item.getId()); + vo.setName(item.getName()); + vo.setSortNo(item.getSortNo()); + vo.setTestingMethodDictItemId(item.getTestingMethodDictItemId()); + vo.setSamplingMethodDictItemId(item.getSamplingMethodDictItemId()); + vo.setSamplingPlanId(item.getSamplingPlanId()); + vo.setInspectionLevelDictItemId(item.getInspectionLevelDictItemId()); + vo.setAqlPriorityValueId(item.getAqlPriorityValueId()); + vo.setAqlTypeDictItemId(item.getAqlTypeDictItemId()); + vo.setItemType(item.getItemType()); + vo.setPdfDrawing(item.getPdfDrawing()); + vo.setCreateUserName(item.getCreateUserName()); + vo.setCreateTime(item.getCreateTime()); + vo.setUpdateUserName(item.getUpdateUserName()); + vo.setUpdateTime(item.getUpdateTime()); + return vo; + } + + /** + * 转换检测项内容实体为VO + */ + private QmsInspectionStandardItemContentVO convertToContentVO(QmsInspectionStandardItemContent content) { + QmsInspectionStandardItemContentVO vo = new QmsInspectionStandardItemContentVO(); + vo.setId(content.getId()); + vo.setSortNo(content.getSortNo()); + vo.setName(content.getName()); + vo.setTestStandard(content.getTestStandard()); + vo.setLegend(content.getLegend()); + vo.setPdfInfo(content.getPdfInfo()); + vo.setJudgmentTypeDictItemId(content.getJudgmentTypeDictItemId()); + vo.setCreateUserName(content.getCreateUserName()); + vo.setCreateTime(content.getCreateTime()); + vo.setUpdateUserName(content.getUpdateUserName()); + vo.setUpdateTime(content.getUpdateTime()); + return vo; + } + + /** + * 暂存检验标准(检测项和检测项内容) + * @param qo 暂存请求参数 + */ + @Transactional(rollbackFor = Exception.class) + public void saveDraft(QmsInspectionStandardSaveQO qo) { + // 1. 校验检验标准是否存在 + QmsInspectionStandard standard = inspectionStandardService.getById(qo.getInspectionStandardId()); + if (standard == null) { + throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检验标准不存在"); + } + + // 已发布的标准不允许暂存修改 + if (standard.getPublishStatus() != null && standard.getPublishStatus() == 1) { + throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "已发布的检验标准不允许修改"); + } + + Long userId = UserUtil.getUserId(); + String userName = UserUtil.getUserName(); + LocalDateTime now = LocalDateTime.now(); + + // 2. 获取该检验标准下所有现有的检测项ID + List existingItemIds = inspectionStandardItemService.lambdaQuery() + .eq(QmsInspectionStandardItem::getInspectionStandardId, qo.getInspectionStandardId()) + .list() + .stream() + .map(QmsInspectionStandardItem::getId) + .collect(Collectors.toList()); + + // 3. 处理传入的检测项 + List newItemIds = new ArrayList<>(); + if (qo.getItems() != null && !qo.getItems().isEmpty()) { + for (QmsInspectionStandardSaveQO.InspectionStandardItemQO itemQO : qo.getItems()) { + QmsInspectionStandardItem item; + + if (itemQO.getId() != null) { + // 更新现有检测项 + item = inspectionStandardItemService.getById(itemQO.getId()); + if (item == null) { + throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检测项不存在:" + itemQO.getId()); + } + + // 更新字段 + updateItemFields(item, itemQO, userId, userName, now); + inspectionStandardItemService.updateById(item); + } else { + // 新增检测项 + item = new QmsInspectionStandardItem() + .setInspectionStandardId(qo.getInspectionStandardId()); + updateItemFields(item, itemQO, userId, userName, now); + inspectionStandardItemService.save(item); + } + + newItemIds.add(item.getId()); + + // 4. 处理检测项内容 + processItemContents(item.getId(), itemQO.getContents(), userId, userName, now); + } + } + + // 5. 删除不在传入列表中的检测项(及其内容) + List itemsToDelete = existingItemIds.stream() + .filter(id -> !newItemIds.contains(id)) + .collect(Collectors.toList()); + + if (!itemsToDelete.isEmpty()) { + // 先删除检测项内容 + inspectionStandardItemContentService.lambdaUpdate() + .in(QmsInspectionStandardItemContent::getInspectionStandardItemId, itemsToDelete) + .remove(); + + // 再删除检测项 + inspectionStandardItemService.removeByIds(itemsToDelete); + } + } + + /** + * 更新检测项字段 + */ + private void updateItemFields(QmsInspectionStandardItem item, + QmsInspectionStandardSaveQO.InspectionStandardItemQO qo, + Long userId, String userName, LocalDateTime now) { + if (qo.getName() != null) { + item.setName(qo.getName()); + } + if (qo.getSortNo() != null) { + item.setSortNo(qo.getSortNo()); + } + if (qo.getTestingMethodDictItemId() != null) { + item.setTestingMethodDictItemId(qo.getTestingMethodDictItemId()); + } + if (qo.getSamplingMethodDictItemId() != null) { + item.setSamplingMethodDictItemId(qo.getSamplingMethodDictItemId()); + } + if (qo.getSamplingPlanId() != null) { + item.setSamplingPlanId(qo.getSamplingPlanId()); + } + if (qo.getInspectionLevelDictItemId() != null) { + item.setInspectionLevelDictItemId(qo.getInspectionLevelDictItemId()); + } + if (qo.getAqlPriorityValueId() != null) { + item.setAqlPriorityValueId(qo.getAqlPriorityValueId()); + } + if (qo.getAqlTypeDictItemId() != null) { + item.setAqlTypeDictItemId(qo.getAqlTypeDictItemId()); + } + if (qo.getItemType() != null) { + item.setItemType(qo.getItemType()); + } + if (qo.getPdfDrawing() != null) { + item.setPdfDrawing(qo.getPdfDrawing()); + } + + item.setUpdateUserId(userId); + item.setUpdateUserName(userName); + item.setUpdateTime(now); + + // 新增时设置创建信息 + if (item.getCreateUserId() == null) { + item.setCreateUserId(userId); + item.setCreateUserName(userName); + item.setCreateTime(now); + } + } + + /** + * 处理检测项内容(新增、更新、删除) + */ + private void processItemContents(Long itemId, + List contents, + Long userId, String userName, LocalDateTime now) { + // 获取现有的内容ID列表 + List existingContentIds = inspectionStandardItemContentService.lambdaQuery() + .eq(QmsInspectionStandardItemContent::getInspectionStandardItemId, itemId) + .list() + .stream() + .map(QmsInspectionStandardItemContent::getId) + .collect(Collectors.toList()); + + List newContentIds = new ArrayList<>(); + + if (contents != null && !contents.isEmpty()) { + for (QmsInspectionStandardSaveQO.InspectionStandardItemContentQO contentQO : contents) { + QmsInspectionStandardItemContent content; + + if (contentQO.getId() != null) { + // 更新现有内容 + content = inspectionStandardItemContentService.getById(contentQO.getId()); + if (content == null) { + throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检测项内容不存在:" + contentQO.getId()); + } + + updateContentFields(content, contentQO, userId, userName, now); + inspectionStandardItemContentService.updateById(content); + } else { + // 新增内容 + content = new QmsInspectionStandardItemContent() + .setInspectionStandardItemId(itemId); + updateContentFields(content, contentQO, userId, userName, now); + inspectionStandardItemContentService.save(content); + } + + newContentIds.add(content.getId()); + } + } + + // 删除不在传入列表中的内容 + List contentsToDelete = existingContentIds.stream() + .filter(id -> !newContentIds.contains(id)) + .collect(Collectors.toList()); + + if (!contentsToDelete.isEmpty()) { + inspectionStandardItemContentService.removeByIds(contentsToDelete); + } + } + + /** + * 更新检测项内容字段 + */ + private void updateContentFields(QmsInspectionStandardItemContent content, + QmsInspectionStandardSaveQO.InspectionStandardItemContentQO qo, + Long userId, String userName, LocalDateTime now) { + if (qo.getSortNo() != null) { + content.setSortNo(qo.getSortNo()); + } + if (qo.getName() != null) { + content.setName(qo.getName()); + } + if (qo.getTestStandard() != null) { + content.setTestStandard(qo.getTestStandard()); + } + if (qo.getLegend() != null) { + content.setLegend(qo.getLegend()); + } + if (qo.getPdfInfo() != null) { + content.setPdfInfo(qo.getPdfInfo()); + } + if (qo.getJudgmentTypeDictItemId() != null) { + content.setJudgmentTypeDictItemId(qo.getJudgmentTypeDictItemId()); + } + + content.setUpdateUserId(userId); + content.setUpdateUserName(userName); + content.setUpdateTime(now); + + // 新增时设置创建信息 + if (content.getCreateUserId() == null) { + content.setCreateUserId(userId); + content.setCreateUserName(userName); + content.setCreateTime(now); + } + } } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardItemControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardItemControllerService.java new file mode 100644 index 00000000..dc194bdf --- /dev/null +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardItemControllerService.java @@ -0,0 +1,70 @@ +package com.nflg.qms.admin.service; + +import com.nflg.wms.common.exception.NflgException; +import com.nflg.wms.common.pojo.vo.QmsInspectionStandardItemContentVO; +import com.nflg.wms.repository.entity.QmsInspectionStandardItem; +import com.nflg.wms.repository.entity.QmsInspectionStandardItemContent; +import com.nflg.wms.repository.service.IQmsInspectionStandardItemContentService; +import com.nflg.wms.repository.service.IQmsInspectionStandardItemService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 检验标准项业务逻辑 + */ +@Slf4j +@Component +public class QmsInspectionStandardItemControllerService { + + @Resource + private IQmsInspectionStandardItemService inspectionStandardItemService; + + @Resource + private IQmsInspectionStandardItemContentService inspectionStandardItemContentService; + + /** + * 根据检验标准项ID查询检验内容列表 + * @param itemId 检验标准项ID + * @return 检验内容列表 + */ + public List getItemContents(Long itemId) { + // 校验检验标准项是否存在 + QmsInspectionStandardItem item = inspectionStandardItemService.getById(itemId); + if (item == null) { + throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检验标准项不存在"); + } + + // 查询检验内容列表 + List contents = inspectionStandardItemContentService.lambdaQuery() + .eq(QmsInspectionStandardItemContent::getInspectionStandardItemId, itemId) + .orderByAsc(QmsInspectionStandardItemContent::getSortNo) + .list(); + + return contents.stream() + .map(this::convertToContentVO) + .collect(Collectors.toList()); + } + + /** + * 转换检测项内容实体为VO + */ + private QmsInspectionStandardItemContentVO convertToContentVO(QmsInspectionStandardItemContent content) { + QmsInspectionStandardItemContentVO vo = new QmsInspectionStandardItemContentVO(); + vo.setId(content.getId()); + vo.setSortNo(content.getSortNo()); + vo.setName(content.getName()); + vo.setTestStandard(content.getTestStandard()); + vo.setLegend(content.getLegend()); + vo.setPdfInfo(content.getPdfInfo()); + vo.setJudgmentTypeDictItemId(content.getJudgmentTypeDictItemId()); + vo.setCreateUserName(content.getCreateUserName()); + vo.setCreateTime(content.getCreateTime()); + vo.setUpdateUserName(content.getUpdateUserName()); + vo.setUpdateTime(content.getUpdateTime()); + return vo; + } +} diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java index c19b92f4..89476b99 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java @@ -9,7 +9,10 @@ import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.dto.BomMaterialDTO; +import com.nflg.wms.common.pojo.dto.BomPageResultDTO; import com.nflg.wms.common.pojo.dto.QmsQcMaterialImportDTO; +import com.nflg.wms.common.pojo.qo.BomMaterialListQO; import com.nflg.wms.common.pojo.qo.QmsQcMaterialAddQO; import com.nflg.wms.common.pojo.qo.QmsQcMaterialSearchQO; import com.nflg.wms.common.pojo.qo.QmsQcMaterialUpdateQO; @@ -23,6 +26,7 @@ import com.nflg.wms.repository.entity.QmsQcMaterialCategory; import com.nflg.wms.repository.mapper.QmsQcMaterialMapper; import com.nflg.wms.repository.service.IQmsQcMaterialCategoryService; import com.nflg.wms.repository.service.IQmsQcMaterialService; +import com.nflg.wms.starter.service.BomMaterialService; import com.nflg.wms.starter.service.FileUploadService; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; @@ -60,6 +64,9 @@ public class QmsQcMaterialControllerService { @Resource private FileUploadService fileUploadService; + @Resource + private BomMaterialService bomMaterialService; + /** * 分页查询质检物料 */ @@ -364,6 +371,24 @@ public class QmsQcMaterialControllerService { EecExcelUtil.export("质检物料", "质检物料", qcMaterialMapper.searchAll(request), response); } + /** + * 导出导入模板 + */ + public void exportTemplate(HttpServletResponse response) throws IOException { + // 构造一行示例数据作为模板 + QmsQcMaterialImportDTO example = new QmsQcMaterialImportDTO() + .setMaterialNo("示例物料编号") + .setMaterialDesc("示例物料描述") + .setMaterialCategoryCode("示例类别编码") + .setDrawingNo("示例图号") + .setDrawingNoVer("示例版本号") + .setMaterialName("示例物料名称") + .setMaterialTexture("示例材质") + .setMaterialSpecifications("示例规格"); + + EecExcelUtil.export("质检物料导入模板", "质检物料导入模板", List.of(example), response); + } + /** * 构建物料类别全路径名称 * 根据parentTree字段解析路径,查询所有父级名称拼接 @@ -407,4 +432,13 @@ public class QmsQcMaterialControllerService { return pathName.toString(); } + + public PageData searchBomMaterial(@Valid BomMaterialListQO request) { + BomPageResultDTO bomPageResultDTO = bomMaterialService.searchMaterial(request); + return new PageData() + .setPage(request.getPage()) + .setPageSize(request.getPageSize()) + .setTotal((int) bomPageResultDTO.getTotal()) + .setItems(bomPageResultDTO.getRecords()); + } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardSaveQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardSaveQO.java new file mode 100644 index 00000000..fec42ff2 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardSaveQO.java @@ -0,0 +1,136 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +/** + * 检验标准暂存请求参数 + */ +@Data +public class QmsInspectionStandardSaveQO { + + /** + * 检验标准ID + */ + @NotNull(message = "检验标准ID不能为空") + private Long inspectionStandardId; + + /** + * 检测项列表 + */ + @Valid + private List items; + + /** + * 检测项 + */ + @Data + public static class InspectionStandardItemQO { + + /** + * 检测项ID(更新时传入,新增时不传) + */ + private Long id; + + /** + * 检测项名称 + */ + private String name; + + /** + * 排序号 + */ + private Integer sortNo; + + /** + * 检测方式,关联字典项id + */ + private Long testingMethodDictItemId; + + /** + * 抽样方式,关联字典项id + */ + private Long samplingMethodDictItemId; + + /** + * 抽样方案ID + */ + private Long samplingPlanId; + + /** + * 检验水平,关联字典项id + */ + private Long inspectionLevelDictItemId; + + /** + * AQL值,关联AQL优先值预定义表id + */ + private Long aqlPriorityValueId; + + /** + * AQL类型,关联字典项id + */ + private Long aqlTypeDictItemId; + + /** + * 检验标准项类型:0-标准检测项,1-尺寸检测项 + */ + private Short itemType; + + /** + * PDF图纸 + */ + private String pdfDrawing; + + /** + * 检测项内容列表 + */ + @Valid + private List contents; + } + + /** + * 检测项内容 + */ + @Data + public static class InspectionStandardItemContentQO { + + /** + * 内容ID(更新时传入,新增时不传) + */ + private Long id; + + /** + * 排序号 + */ + private Integer sortNo; + + /** + * 检测项名称 + */ + private String name; + + /** + * 检测标准 + */ + private String testStandard; + + /** + * 图例 + */ + private String legend; + + /** + * PDF信息 + */ + private String pdfInfo; + + /** + * 判定类型,关联字典项id + */ + private Long judgmentTypeDictItemId; + } +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardDetailVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardDetailVO.java new file mode 100644 index 00000000..cae95beb --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardDetailVO.java @@ -0,0 +1,133 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 检验标准详情 VO + */ +@Data +public class QmsInspectionStandardDetailVO { + + /** + * 检验标准ID + */ + private Long id; + + /** + * 物料ID + */ + private Long materialId; + + /** + * 物料编号 + */ + private String materialNo; + + /** + * 物料类别路径名称 + */ + private String materialCategoryCodePathName; + + /** + * 物料描述 + */ + private String materialDesc; + + /** + * 图号版本号 + */ + private String drawingNoVer; + + /** + * 检验任务项ID + */ + private Long inspectionTaskItemId; + + /** + * 图纸URL + */ + private String drawingUrl; + + /** + * 版本号 + */ + private String versionNo; + + /** + * 是否启用 + */ + private Boolean isEnabled; + + /** + * 包装方式ID + */ + private Long packagingMethodId; + + /** + * 检验周期 + */ + private Integer inspectionCycle; + + /** + * 发布状态:0-未发布,1-已发布 + */ + private Short publishStatus; + + /** + * 发布人ID + */ + private Long publishUserId; + + /** + * 发布人姓名 + */ + private String publishUserName; + + /** + * 发布时间 + */ + private LocalDateTime publishTime; + + /** + * 所属IQE姓名 + */ + private String iqeName; + + /** + * 创建人ID + */ + private Long createUserId; + + /** + * 创建人姓名 + */ + private String createUserName; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新人ID + */ + private Long updateUserId; + + /** + * 更新人姓名 + */ + private String updateUserName; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 检测项列表 + */ + private List items; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardItemContentVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardItemContentVO.java new file mode 100644 index 00000000..54c8686a --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardItemContentVO.java @@ -0,0 +1,67 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 检验标准项内容 VO + */ +@Data +public class QmsInspectionStandardItemContentVO { + + /** + * 内容ID + */ + private Long id; + + /** + * 排序号 + */ + private Integer sortNo; + + /** + * 检测项名称 + */ + private String name; + + /** + * 检测标准 + */ + private String testStandard; + + /** + * 图例 + */ + private String legend; + + /** + * PDF信息 + */ + private String pdfInfo; + + /** + * 判定类型字典项ID + */ + private Long judgmentTypeDictItemId; + + /** + * 创建人姓名 + */ + private String createUserName; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新人姓名 + */ + private String updateUserName; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardItemVO.java new file mode 100644 index 00000000..197e7333 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsInspectionStandardItemVO.java @@ -0,0 +1,93 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 检验标准项 VO + */ +@Data +public class QmsInspectionStandardItemVO { + + /** + * 检测项ID + */ + private Long id; + + /** + * 检测项名称 + */ + private String name; + + /** + * 排序号 + */ + private Integer sortNo; + + /** + * 检测方式字典项ID + */ + private Long testingMethodDictItemId; + + /** + * 抽样方式字典项ID + */ + private Long samplingMethodDictItemId; + + /** + * 抽样方案ID + */ + private Long samplingPlanId; + + /** + * 检验水平字典项ID + */ + private Long inspectionLevelDictItemId; + + /** + * AQL值ID + */ + private Long aqlPriorityValueId; + + /** + * AQL类型字典项ID + */ + private Long aqlTypeDictItemId; + + /** + * 检验标准项类型:0-标准检测项,1-尺寸检测项 + */ + private Short itemType; + + /** + * PDF图纸 + */ + private String pdfDrawing; + + /** + * 创建人姓名 + */ + private String createUserName; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 更新人姓名 + */ + private String updateUserName; + + /** + * 更新时间 + */ + private LocalDateTime updateTime; + + /** + * 检测项内容列表 + */ + private List contents; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardItemContentMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardItemContentMapper.java new file mode 100644 index 00000000..d315ea61 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardItemContentMapper.java @@ -0,0 +1,10 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.wms.repository.entity.QmsInspectionStandardItemContent; + +/** + * 检验标准项内容 Mapper + */ +public interface QmsInspectionStandardItemContentMapper extends BaseMapper { +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardItemMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardItemMapper.java new file mode 100644 index 00000000..3d77a50d --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardItemMapper.java @@ -0,0 +1,10 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.wms.repository.entity.QmsInspectionStandardItem; + +/** + * 检验标准项 Mapper + */ +public interface QmsInspectionStandardItemMapper extends BaseMapper { +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardMapper.java index 1c5030ab..45731c7e 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsInspectionStandardMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSearchQO; +import com.nflg.wms.common.pojo.vo.QmsInspectionStandardDetailVO; import com.nflg.wms.common.pojo.vo.QmsInspectionStandardVO; import com.nflg.wms.repository.entity.QmsInspectionStandard; import org.apache.ibatis.annotations.Param; @@ -17,4 +18,9 @@ public interface QmsInspectionStandardMapper extends BaseMapper searchPage(@Param("request") QmsInspectionStandardSearchQO request, Page page); + + /** + * 根据ID查询检验标准详情(关联物料等信息) + */ + QmsInspectionStandardDetailVO getDetailById(@Param("id") Long id); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectionStandardItemContentService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectionStandardItemContentService.java new file mode 100644 index 00000000..dbe1cd46 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectionStandardItemContentService.java @@ -0,0 +1,10 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.repository.entity.QmsInspectionStandardItemContent; + +/** + * 检验标准项内容 服务类 + */ +public interface IQmsInspectionStandardItemContentService extends IService { +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectionStandardItemService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectionStandardItemService.java new file mode 100644 index 00000000..3c16af43 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsInspectionStandardItemService.java @@ -0,0 +1,10 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.repository.entity.QmsInspectionStandardItem; + +/** + * 检验标准项 服务类 + */ +public interface IQmsInspectionStandardItemService extends IService { +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionStandardItemContentServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionStandardItemContentServiceImpl.java new file mode 100644 index 00000000..635afdf7 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionStandardItemContentServiceImpl.java @@ -0,0 +1,15 @@ +package com.nflg.wms.repository.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.repository.entity.QmsInspectionStandardItemContent; +import com.nflg.wms.repository.mapper.QmsInspectionStandardItemContentMapper; +import com.nflg.wms.repository.service.IQmsInspectionStandardItemContentService; +import org.springframework.stereotype.Service; + +/** + * 检验标准项内容 服务实现类 + */ +@Service +public class QmsInspectionStandardItemContentServiceImpl extends ServiceImpl + implements IQmsInspectionStandardItemContentService { +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionStandardItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionStandardItemServiceImpl.java new file mode 100644 index 00000000..a3fcd56e --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsInspectionStandardItemServiceImpl.java @@ -0,0 +1,15 @@ +package com.nflg.wms.repository.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.repository.entity.QmsInspectionStandardItem; +import com.nflg.wms.repository.mapper.QmsInspectionStandardItemMapper; +import com.nflg.wms.repository.service.IQmsInspectionStandardItemService; +import org.springframework.stereotype.Service; + +/** + * 检验标准项 服务实现类 + */ +@Service +public class QmsInspectionStandardItemServiceImpl extends ServiceImpl + implements IQmsInspectionStandardItemService { +} diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsInspectionStandardMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsInspectionStandardMapper.xml index af2ab747..027c3c88 100644 --- a/nflg-wms-repository/src/main/resources/mapper/QmsInspectionStandardMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/QmsInspectionStandardMapper.xml @@ -47,4 +47,43 @@ ORDER BY s.id DESC + + +