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. 查归档列表
|
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);
|
}
|
}
|
|
}
|