From 7bd10d34e8a8dc2437ec8551eb511e37634d7306 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 02 十一月 2026 16:51:52 +0800
Subject: [PATCH] feat(mes): 生产计划审批改走协同办公,修复工单领料与产成品入库校验

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/subject/MesDvSubjectServiceImpl.java |   75 +++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/subject/MesDvSubjectServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/subject/MesDvSubjectServiceImpl.java
index c96d450..b7565a3 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/subject/MesDvSubjectServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/subject/MesDvSubjectServiceImpl.java
@@ -1,10 +1,14 @@
 package cn.iocoder.yudao.module.mes.service.dv.subject;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.mes.controller.admin.dv.subject.vo.MesDvSubjectImportExcelVO;
+import cn.iocoder.yudao.module.mes.controller.admin.dv.subject.vo.MesDvSubjectImportRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.dv.subject.vo.MesDvSubjectPageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.dv.subject.vo.MesDvSubjectSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.dv.subject.MesDvSubjectDO;
@@ -13,10 +17,14 @@
 import jakarta.annotation.Resource;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -30,6 +38,9 @@
 @Service
 @Validated
 public class MesDvSubjectServiceImpl implements MesDvSubjectService {
+
+    /** 瀵煎叆鏃舵湭濉」鐩被鍨嬫椂鐨勯粯璁ゅ�硷細璁惧鐐规锛堝瓧鍏� mes_dv_subject_type锛� */
+    private static final Integer DEFAULT_SUBJECT_TYPE = 1;
 
     @Resource
     private MesDvSubjectMapper subjectMapper;
@@ -128,4 +139,68 @@
         return subjectMapper.selectByIds(ids);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public MesDvSubjectImportRespVO importSubjectList(List<MesDvSubjectImportExcelVO> importSubjectList,
+                                                      boolean updateSupport) {
+        if (CollUtil.isEmpty(importSubjectList)) {
+            throw exception(DV_SUBJECT_IMPORT_LIST_IS_EMPTY);
+        }
+
+        MesDvSubjectImportRespVO respVO = MesDvSubjectImportRespVO.builder()
+                .createCodes(new ArrayList<>()).updateCodes(new ArrayList<>())
+                .failureCodes(new LinkedHashMap<>()).build();
+        for (int i = 0; i < importSubjectList.size(); i++) {
+            MesDvSubjectImportExcelVO importItem = importSubjectList.get(i);
+            int rowNo = i + 1;
+            // 1. 椤圭洰鍚嶇О蹇呭~
+            if (StrUtil.isBlank(importItem.getName())) {
+                respVO.getFailureCodes().put("绗� " + rowNo + " 琛�", "椤圭洰鍚嶇О涓嶈兘涓虹┖");
+                continue;
+            }
+            // 2. 缂栫爜涓虹┖鏃惰嚜鍔ㄧ敓鎴�
+            String code = StrUtil.blankToDefault(importItem.getCode(),
+                    "JX" + DateUtil.format(LocalDateTime.now(), "yyyyMMdd") + String.format("%03d", rowNo));
+            String key = code;
+            if (code.length() > 64) {
+                respVO.getFailureCodes().put("绗� " + rowNo + " 琛�",
+                        "椤圭洰缂栫爜[" + code + "]闀垮害涓嶈兘瓒呰繃 64 涓瓧绗︼紝璇风缉鐭悗閲嶆柊瀵煎叆");
+                continue;
+            }
+            // 3. 绫诲瀷榛樿璁惧鐐规
+            Integer type = importItem.getType() == null ? DEFAULT_SUBJECT_TYPE : importItem.getType();
+            Integer status = importItem.getStatus() == null
+                    ? CommonStatusEnum.ENABLE.getStatus() : importItem.getStatus();
+
+            // 4. 鍒涘缓 or 鏇存柊
+            MesDvSubjectDO existSubject = subjectMapper.selectByCode(code);
+            if (existSubject == null) {
+                MesDvSubjectDO subject = new MesDvSubjectDO();
+                subject.setCode(code);
+                subject.setName(importItem.getName());
+                subject.setType(type);
+                subject.setContent(importItem.getContent());
+                subject.setStandard(importItem.getStandard());
+                subject.setStatus(status);
+                subject.setRemark(importItem.getRemark());
+                subjectMapper.insert(subject);
+                respVO.getCreateCodes().add(code);
+            } else if (updateSupport) {
+                MesDvSubjectDO updateObj = new MesDvSubjectDO();
+                updateObj.setId(existSubject.getId());
+                updateObj.setName(importItem.getName());
+                updateObj.setType(type);
+                updateObj.setContent(importItem.getContent());
+                updateObj.setStandard(importItem.getStandard());
+                updateObj.setStatus(status);
+                updateObj.setRemark(importItem.getRemark());
+                subjectMapper.updateById(updateObj);
+                respVO.getUpdateCodes().add(code);
+            } else {
+                respVO.getFailureCodes().put(key, "椤圭洰缂栫爜[" + code + "]宸插瓨鍦紝濡傞渶瑕嗙洊璇峰嬀閫夈�屾敮鎸佹洿鏂般��");
+            }
+        }
+        return respVO;
+    }
+
 }

--
Gitblit v1.9.3