From bee96a1d36c86068cd5a7eb69f4e3294a8123b04 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 03 七月 2026 18:02:55 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_business' into dev_business
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/archive/MesPdArchiveServiceImpl.java | 187 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 187 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/archive/MesPdArchiveServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/archive/MesPdArchiveServiceImpl.java
new file mode 100644
index 0000000..7c80e0e
--- /dev/null
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/archive/MesPdArchiveServiceImpl.java
@@ -0,0 +1,187 @@
+package cn.iocoder.yudao.module.mes.service.pd.archive;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.mes.controller.admin.pd.archive.vo.MesPdArchiveDetailRespVO;
+import cn.iocoder.yudao.module.mes.controller.admin.pd.archive.vo.MesPdArchiveGroupRespVO;
+import cn.iocoder.yudao.module.mes.controller.admin.pd.archive.vo.MesPdArchivePageReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.pd.archive.vo.MesPdArchiveSaveReqVO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pd.archive.MesPdArchiveDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pd.document.MesPdDocumentDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pd.project.MesPdProjectDO;
+import cn.iocoder.yudao.module.mes.dal.mysql.pd.archive.MesPdArchiveMapper;
+import cn.iocoder.yudao.module.mes.service.pd.document.MesPdDocumentService;
+import cn.iocoder.yudao.module.mes.service.pd.project.MesPdProjectService;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import jakarta.annotation.Resource;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
+
+/**
+ * MES 褰掓。鍙拌处 Service 瀹炵幇绫�
+ *
+ * @author 鑺嬮亾婧愮爜
+ */
+@Service
+@Validated
+public class MesPdArchiveServiceImpl implements MesPdArchiveService {
+
+ @Resource
+ private MesPdArchiveMapper archiveMapper;
+
+ @Resource
+ @Lazy
+ private MesPdProjectService projectService;
+
+ @Resource
+ @Lazy
+ private MesPdDocumentService documentService;
+
+ @Resource
+ @Lazy
+ private AdminUserApi adminUserApi;
+
+ @Override
+ public Long createArchive(MesPdArchiveSaveReqVO createReqVO) {
+ // 鏍¢獙褰掓。缂栧彿鍞竴
+ validateArchiveCodeUnique(null, createReqVO.getArchiveCode());
+ // 鏍¢獙璁捐椤圭洰瀛樺湪
+ projectService.validateProjectExists(createReqVO.getProjectId());
+ // 鎻掑叆
+ MesPdArchiveDO archive = BeanUtils.toBean(createReqVO, MesPdArchiveDO.class);
+ archiveMapper.insert(archive);
+ return archive.getId();
+ }
+
+ @Override
+ public void updateArchive(MesPdArchiveSaveReqVO updateReqVO) {
+ // 鏍¢獙瀛樺湪
+ validateArchiveExists(updateReqVO.getId());
+ // 鏍¢獙褰掓。缂栧彿鍞竴
+ validateArchiveCodeUnique(updateReqVO.getId(), updateReqVO.getArchiveCode());
+ // 鏇存柊
+ MesPdArchiveDO updateObj = BeanUtils.toBean(updateReqVO, MesPdArchiveDO.class);
+ archiveMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteArchive(Long id) {
+ // 鏍¢獙瀛樺湪
+ validateArchiveExists(id);
+ // 鍒犻櫎
+ archiveMapper.deleteById(id);
+ }
+
+ @Override
+ public MesPdArchiveDO getArchive(Long id) {
+ return archiveMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult<MesPdArchiveDO> getArchivePage(MesPdArchivePageReqVO pageReqVO) {
+ return archiveMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public IPage<MesPdArchiveGroupRespVO> getArchivePageGroupByProject(MesPdArchivePageReqVO pageReqVO, Page<MesPdArchiveGroupRespVO> page) {
+ return archiveMapper.selectPageGroupByProjectId(page,pageReqVO);
+ }
+
+ @Override
+ public List<MesPdArchiveDetailRespVO> getArchiveDetailByProductCode(String productCode) {
+ // 1. 鏌ラ」鐩俊鎭�
+ List<MesPdProjectDO> projects = projectService.getProjectByProductCode(productCode);
+ List<MesPdArchiveDetailRespVO> mesPdArchiveDetailRespVOS = new ArrayList<>();
+ projects.forEach(project -> {
+ if (project == null) {
+ throw exception(PD_PROJECT_NOT_EXISTS);
+ }
+ // 2. 鏌ュ綊妗e垪琛�
+ List<MesPdArchiveDO> archives = archiveMapper.selectListByProjectId(project.getId());
+ // 3. 鏌ヨ祫鏂欏垪琛�
+ List<MesPdDocumentDO> documents = documentService.getDocumentListByProjectId(project.getId());
+
+ // 4. 缁勮 VO
+ MesPdArchiveDetailRespVO respVO = new MesPdArchiveDetailRespVO();
+
+ // 4.1 椤圭洰淇℃伅
+ MesPdArchiveDetailRespVO.ProjectInfo projectInfo = BeanUtils.toBean(project, MesPdArchiveDetailRespVO.ProjectInfo.class);
+ // 鎵归噺鑾峰彇鐢ㄦ埛淇℃伅
+ Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
+ cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet(
+ java.util.stream.Stream.of(project.getChiefDesigner(), project.getReviewer())
+ .filter(java.util.Objects::nonNull)
+ .collect(java.util.stream.Collectors.toSet()),
+ id -> id));
+ MapUtils.findAndThen(userMap, project.getChiefDesigner(),
+ user -> projectInfo.setChiefDesignerNickname(user.getNickname()));
+ MapUtils.findAndThen(userMap, project.getReviewer(),
+ user -> projectInfo.setReviewerNickname(user.getNickname()));
+ respVO.setProject(projectInfo);
+
+ // 4.2 褰掓。璁板綍鍒楄〃
+ if (!archives.isEmpty()) {
+ Map<Long, AdminUserRespDTO> archiverUserMap = adminUserApi.getUserMap(
+ cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet(archives, MesPdArchiveDO::getArchiver));
+ List<MesPdArchiveDetailRespVO.ArchiveInfo> archiveInfos = BeanUtils.toBean(archives, MesPdArchiveDetailRespVO.ArchiveInfo.class,
+ info -> MapUtils.findAndThen(archiverUserMap, info.getArchiver(),
+ user -> info.setArchiverNickname(user.getNickname())));
+ respVO.setArchives(archiveInfos);
+ }
+
+ // 4.3 璁捐璧勬枡鍒楄〃
+ if (!documents.isEmpty()) {
+ Map<Long, AdminUserRespDTO> uploadUserMap = adminUserApi.getUserMap(
+ cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet(documents, MesPdDocumentDO::getUploadUserId));
+ List<MesPdArchiveDetailRespVO.DocumentInfo> documentInfos = BeanUtils.toBean(documents, MesPdArchiveDetailRespVO.DocumentInfo.class,
+ info -> MapUtils.findAndThen(uploadUserMap, info.getUploadUserId(),
+ user -> info.setUploadUserNickname(user.getNickname())));
+ respVO.setDocuments(documentInfos);
+ }
+ mesPdArchiveDetailRespVOS.add(respVO);
+ });
+
+ return mesPdArchiveDetailRespVOS;
+ }
+
+ @Override
+ public Long getArchiveCountByProjectId(Long projectId) {
+ return archiveMapper.selectCountByProjectId(projectId);
+ }
+
+ private MesPdArchiveDO validateArchiveExists(Long id) {
+ MesPdArchiveDO archive = archiveMapper.selectById(id);
+ if (archive == null) {
+ throw exception(PD_ARCHIVE_NOT_EXISTS);
+ }
+ return archive;
+ }
+
+ private void validateArchiveCodeUnique(Long id, String archiveCode) {
+ MesPdArchiveDO existing = archiveMapper.selectByArchiveCode(archiveCode);
+ if (existing == null) {
+ return;
+ }
+ // 濡傛灉 id 涓虹┖锛岃鏄庢槸鏂板锛岀紪鐮侀噸澶�
+ if (id == null) {
+ throw exception(PD_ARCHIVE_CODE_DUPLICATE);
+ }
+ // 濡傛灉 id 涓嶄负绌猴紝璇存槑鏄慨鏀癸紝缂栫爜閲嶅涓斾笉鏄悓涓�鏉¤褰�
+ if (!existing.getId().equals(id)) {
+ throw exception(PD_ARCHIVE_CODE_DUPLICATE);
+ }
+ }
+
+}
--
Gitblit v1.9.3