From d54fbc9d4f8981fa0f7f613b33a28a8cd4f764ea Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期日, 25 十月 2026 16:29:53 +0800
Subject: [PATCH] feat(system): 优化用户搜索功能并完善ERP和MES模块验证逻辑
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/product/MesPdProductServiceImpl.java | 79 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 76 insertions(+), 3 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/product/MesPdProductServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/product/MesPdProductServiceImpl.java
index 28c8094..fbbb44e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/product/MesPdProductServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/product/MesPdProductServiceImpl.java
@@ -1,16 +1,21 @@
package cn.iocoder.yudao.module.mes.service.pd.product;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils;
+import cn.iocoder.yudao.module.mes.controller.admin.pd.product.vo.MesPdProductImportExcelVO;
+import cn.iocoder.yudao.module.mes.controller.admin.pd.product.vo.MesPdProductImportRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.pd.product.vo.MesPdProductPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pd.product.vo.MesPdProductRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.pd.product.vo.MesPdProductSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.product.MesPdProductDO;
import cn.iocoder.yudao.module.mes.dal.mysql.pd.product.MesPdProductMapper;
import cn.iocoder.yudao.module.mes.enums.DictTypeConstants;
-import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
import cn.iocoder.yudao.module.mes.enums.pd.MesPdAuditStatusEnum;
+import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -20,9 +25,14 @@
import org.springframework.validation.annotation.Validated;
import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_PRODUCT_AUDIT_STATUS_INVALID;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_PRODUCT_IMPORT_LIST_IS_EMPTY;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_PRODUCT_NOT_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_PRODUCT_SUBMIT_DUPLICATE;
@@ -144,8 +154,71 @@
private void fillDictName(MesPdProductRespVO respVO) {
respVO.setArchiveTypeName(DictFrameworkUtils.parseDictDataLabel(
DictTypeConstants.MES_PD_PRODUCT_ARCHIVE_TYPE, respVO.getArchiveType()));
- respVO.setAuditStatusName(DictFrameworkUtils.parseDictDataLabel(
- DictTypeConstants.MES_PD_PRODUCT_AUDIT_STATUS, respVO.getAuditStatus()));
+ String auditStatusName = DictFrameworkUtils.parseDictDataLabel(
+ DictTypeConstants.MES_PD_PRODUCT_AUDIT_STATUS, respVO.getAuditStatus());
+ respVO.setAuditStatusName(auditStatusName != null
+ ? auditStatusName : MesPdAuditStatusEnum.getNameByStatus(respVO.getAuditStatus()));
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public MesPdProductImportRespVO importProductList(List<MesPdProductImportExcelVO> importList,
+ boolean updateSupport) {
+ // 1. 鏍¢獙闈炵┖
+ if (CollUtil.isEmpty(importList)) {
+ throw exception(PD_PRODUCT_IMPORT_LIST_IS_EMPTY);
+ }
+
+ // 2. 閫愯澶勭悊
+ MesPdProductImportRespVO respVO = MesPdProductImportRespVO.builder()
+ .createCodes(new ArrayList<>()).updateCodes(new ArrayList<>())
+ .failureCodes(new LinkedHashMap<>()).build();
+ AtomicInteger index = new AtomicInteger(1);
+ importList.forEach(importItem -> {
+ int currentIndex = index.getAndIncrement();
+ String key = StrUtil.blankToDefault(importItem.getCode(), "绗� " + currentIndex + " 琛�");
+ if (importItem.getArchiveType() == null) {
+ respVO.getFailureCodes().put(key, "妗f绫诲瀷涓嶈兘涓虹┖");
+ return;
+ }
+ if (StrUtil.isBlank(importItem.getName())) {
+ respVO.getFailureCodes().put(key, "妗f鍚嶇О涓嶈兘涓虹┖");
+ return;
+ }
+ // 2.1 鍒ゆ柇锛氬垱寤� or 鏇存柊锛堢紪鐮佷负绌烘椂鑷姩鐢熸垚锛�
+ if (StrUtil.isNotBlank(importItem.getCode())) {
+ MesPdProductDO existProduct = productMapper.selectByCode(importItem.getCode());
+ if (existProduct == null) {
+ // 2.1.1 鎸囧畾缂栫爜鏂板
+ MesPdProductDO product = BeanUtils.toBean(importItem, MesPdProductDO.class);
+ product.setId(null);
+ product.setAuditStatus(MesPdAuditStatusEnum.DRAFT.getStatus());
+ product.setStatus(ObjUtil.defaultIfNull(importItem.getStatus(), 1));
+ productMapper.insert(product);
+ respVO.getCreateCodes().add(importItem.getCode());
+ } else if (updateSupport) {
+ // 2.1.2 鏇存柊
+ MesPdProductDO updateObj = BeanUtils.toBean(importItem, MesPdProductDO.class);
+ updateObj.setId(existProduct.getId());
+ updateObj.setCode(existProduct.getCode());
+ productMapper.updateById(updateObj);
+ respVO.getUpdateCodes().add(importItem.getCode());
+ } else {
+ respVO.getFailureCodes().put(key, "妗f缂栫爜宸插瓨鍦�");
+ }
+ } else {
+ // 2.1.3 缂栫爜涓虹┖锛氳嚜鍔ㄧ敓鎴愮紪鐮佹柊澧�
+ MesPdProductDO product = BeanUtils.toBean(importItem, MesPdProductDO.class);
+ product.setId(null);
+ product.setCode(autoCodeRecordService.generateAutoCode(
+ MesMdAutoCodeRuleCodeEnum.PD_PRODUCT_CODE.getCode()));
+ product.setAuditStatus(MesPdAuditStatusEnum.DRAFT.getStatus());
+ product.setStatus(ObjUtil.defaultIfNull(importItem.getStatus(), 1));
+ productMapper.insert(product);
+ respVO.getCreateCodes().add(product.getCode());
+ }
+ });
+ return respVO;
}
}
--
Gitblit v1.9.3