From 22d31632a106266333bee84149f6af5c88415e85 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期二, 08 七月 2025 11:30:15 +0800
Subject: [PATCH] 定期生成点检工单,定期扫描已过期点检工单

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java | 1240 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 1,172 insertions(+), 68 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
index 6d30e4b..2f1b8f8 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -1,35 +1,69 @@
 package org.jeecg.modules.eam.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.jeecg.weibo.exception.BusinessException;
+import liquibase.pro.packaged.R;
+import liquibase.pro.packaged.S;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.usermodel.*;
 import org.apache.shiro.SecurityUtils;
-import org.jeecg.common.api.vo.FileUploadResult;
+import org.flowable.engine.TaskService;
+import org.flowable.task.api.Task;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.eam.base.entity.BaseFactory;
+import org.jeecg.modules.eam.base.entity.BaseFactoryUser;
+import org.jeecg.modules.eam.base.service.IBaseFactoryService;
+import org.jeecg.modules.eam.base.service.IBaseFactoryUserService;
+import org.jeecg.modules.eam.constant.BusinessCodeConst;
+import org.jeecg.modules.eam.constant.EamMaintenanceStandardDetailCategory;
 import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamEquipmentExtend;
 import org.jeecg.modules.eam.entity.EamMaintenanceStandard;
 import org.jeecg.modules.eam.entity.EamMaintenanceStandardDetail;
 import org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper;
 import org.jeecg.modules.eam.request.EamMaintenanceStandardRequest;
+import org.jeecg.modules.eam.request.ImportException;
+import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
+import org.jeecg.modules.eam.service.IEamEquipmentService;
 import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
 import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
+import org.jeecg.modules.eam.vo.*;
+import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
+import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
+import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
+import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
+import org.jeecg.modules.flowable.service.IFlowDefinitionService;
+import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.jeecg.modules.system.vo.UserSelector;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -38,14 +72,46 @@
  * @Date:   2025-03-26
  * @Version: V1.0
  */
-@Service
-public class EamMaintenanceStandardServiceImpl extends ServiceImpl<EamMaintenanceStandardMapper, EamMaintenanceStandard> implements IEamMaintenanceStandardService {
+@Service("IEamMaintenanceStandardService")
+public class EamMaintenanceStandardServiceImpl extends ServiceImpl<EamMaintenanceStandardMapper, EamMaintenanceStandard> implements IEamMaintenanceStandardService , FlowCallBackServiceI {
 
     @Resource
     private EamMaintenanceStandardMapper eamMaintenanceStandardMapper;
-
     @Autowired
     private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+    @Autowired
+    private IBaseFactoryUserService baseFactoryUserService;
+    @Autowired
+    private IBaseFactoryService baseFactoryService;
+    @Resource
+    private FlowCommonService flowCommonService;
+    @Resource
+    private IFlowDefinitionService flowDefinitionService;
+    @Autowired
+    private IFlowTaskService flowTaskService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private IFlowMyBusinessService flowMyBusinessService;
+    @Autowired
+    private ISysUserService sysUserService;
+    @Autowired
+    private IEamEquipmentService eamEquipmentService;
+    @Autowired
+    private IEamEquipmentExtendService eamEquipmentExtendService;
+    @Autowired
+    private ISysBusinessCodeRuleService businessCodeRuleService;
+
+    // 甯搁噺瀹氫箟
+    private static final String REPAIR_TITLE = "缁翠慨浜哄憳淇濆吇鍐呭";
+    private static final String OPERATOR_TITLE = "鎿嶄綔浜哄憳淇濆吇鍐呭";
+    private static final Map<String, EamMaintenanceStandardDetailCategory> SECOND_CATEGORY_MAPPING = new HashMap<>();
+
+    // 鏋氫妇鏄犲皠鍒濆鍖�
+    static {
+        SECOND_CATEGORY_MAPPING.put(REPAIR_TITLE, EamMaintenanceStandardDetailCategory.REPAIRER_MAINTENANCE);
+        SECOND_CATEGORY_MAPPING.put(OPERATOR_TITLE, EamMaintenanceStandardDetailCategory.OPERATOR_MAINTENANCE);
+    }
 
     @Override
     public IPage<EamMaintenanceStandard> queryPageList(Page<EamMaintenanceStandard> page, EamMaintenanceStandard eamMaintenanceStandard) {
@@ -56,13 +122,19 @@
         if (sysUser == null) {
             return page;
         }
-        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+        if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) {
             //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
-            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(","));
             queryWrapper.in("e.equipment_code", equipArr);
         } else {
-            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
-            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId());
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹腑蹇冭繃婊よ澶�
+            List<BaseFactoryUser> baseFactoryUserList=baseFactoryUserService.
+                    list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId,sysUser.getId()));
+            if(!CollectionUtils.isEmpty(baseFactoryUserList)){
+                List<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toList());
+                List<String> factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getFactoryCode).collect(Collectors.toList());
+                queryWrapper.in("e.factory_code", factoryCode);
+            }
         }
         if(eamMaintenanceStandard != null) {
             //缂栫爜 妯$硦鏌ヨ
@@ -71,7 +143,7 @@
             }
             //鍚嶇О 妯$硦鏌ヨ
             if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardName())) {
-                queryWrapper.like("ems.standard_name", eamMaintenanceStandard.getStandardCode());
+                queryWrapper.like("ems.standard_name", eamMaintenanceStandard.getStandardName());
             }
             //璁惧
             if(StringUtils.isNotBlank(eamMaintenanceStandard.getEquipmentId())) {
@@ -91,6 +163,10 @@
                         .or()
                         .like("e.equipment_code", eamMaintenanceStandard.getKeyword()));
             }
+            //id
+            if(StringUtils.isNotBlank(eamMaintenanceStandard.getId())) {
+                queryWrapper.eq("ems.id", eamMaintenanceStandard.getId());
+            }
         }
         queryWrapper.orderByDesc("ems.create_time");
         return eamMaintenanceStandardMapper.queryPageList(page, queryWrapper);
@@ -100,15 +176,10 @@
     @Transactional(rollbackFor = Exception.class)
     public boolean addMaintenanceStandard(EamMaintenanceStandardRequest standardRequest) {
         EamMaintenanceStandard entity = new EamMaintenanceStandard();
-        entity.setStandardCode(standardRequest.getStandardCode());
-        entity.setStandardName(standardRequest.getStandardName());
-        entity.setMaintenanceCategory(standardRequest.getMaintenanceCategory());
-        entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod());
-        entity.setInitialDate(standardRequest.getInitialDate());
-        entity.setFileCode(standardRequest.getFileCode());
-        entity.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name());
+        BeanUtils.copyProperties(standardRequest, entity);
+        entity.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
         //鐗堟湰閫掑
-        entity.setStandardVersion(CommonConstant.OPERATE_TYPE_1);
+        entity.setStandardVersion("v"+CommonConstant.OPERATE_TYPE_1);
         //璁惧澶勭悊
         entity.setEquipmentId(standardRequest.getEquipmentId());
         //鍒犻櫎鏍囪
@@ -117,17 +188,6 @@
         EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory());
         if(exist != null){
             throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�");
-        }
-        //澶勭悊闄勪欢
-        if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) {
-            FileUploadResult fileUploadResult = standardRequest.getFileList().get(0);
-            ObjectMapper mapper = new ObjectMapper();
-            try {
-                String referenceFile = mapper.writeValueAsString(fileUploadResult);
-                entity.setReferenceFile(referenceFile);
-            } catch (JsonProcessingException e) {
-                log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
-            }
         }
         eamMaintenanceStandardMapper.insert(entity);
         //澶勭悊鏄庣粏鏁版嵁
@@ -149,20 +209,6 @@
         }
         entity.setStandardName(standardRequest.getStandardName());
         entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod());
-        entity.setFileCode(standardRequest.getFileCode());
-        //澶勭悊闄勪欢
-        if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) {
-            FileUploadResult fileUploadResult = standardRequest.getFileList().get(0);
-            ObjectMapper mapper = new ObjectMapper();
-            try {
-                String referenceFile = mapper.writeValueAsString(fileUploadResult);
-                entity.setReferenceFile(referenceFile);
-            } catch (JsonProcessingException e) {
-                log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
-            }
-        }else {
-            entity.setReferenceFile(null);
-        }
         eamMaintenanceStandardMapper.updateById(entity);
         //澶勭悊璇︽儏
         if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
@@ -197,9 +243,6 @@
         if(entity == null){
             throw new JeecgBootException("缂栬緫鐨勬暟鎹凡鍒犻櫎锛岃鍒锋柊閲嶈瘯锛�");
         }
-        entity.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name());
-        //鍘熸潵鐨勪綔搴�
-        eamMaintenanceStandardMapper.updateById(entity);
 
         //鏂板涓�涓増鏈�
         EamMaintenanceStandard newEntity = new EamMaintenanceStandard();
@@ -208,10 +251,18 @@
         newEntity.setMaintenanceCategory(standardRequest.getMaintenanceCategory());
         newEntity.setMaintenancePeriod(standardRequest.getMaintenancePeriod());
         newEntity.setInitialDate(standardRequest.getInitialDate());
-        newEntity.setFileCode(standardRequest.getFileCode());
-        newEntity.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name());
+        newEntity.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
         //鐗堟湰閫掑
-        newEntity.setStandardVersion(entity.getStandardVersion() + 1);
+        //鑾峰彇鏁板瓧
+        Pattern pattern = Pattern.compile("(\\d+)(?:\\.\\d+)*$");
+        Matcher matcher = pattern.matcher(entity.getStandardVersion());
+        if (matcher.find()) {
+            try {
+                int mainVersion = Integer.parseInt(matcher.group(1));
+                newEntity.setStandardVersion("v"+(mainVersion+1));
+            } catch (NumberFormatException ignored) {
+            }
+        }
         //璁惧澶勭悊
         newEntity.setEquipmentId(standardRequest.getEquipmentId());
         //鍒犻櫎鏍囪
@@ -220,17 +271,6 @@
         EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory());
         if(exist != null){
             throw new JeecgBootException("璁惧鏍囧噯宸插瓨鍦紝涓嶈兘閲嶅娣诲姞锛�");
-        }
-        //澶勭悊闄勪欢
-        if(CollectionUtil.isNotEmpty(standardRequest.getFileList())) {
-            FileUploadResult fileUploadResult = standardRequest.getFileList().get(0);
-            ObjectMapper mapper = new ObjectMapper();
-            try {
-                String referenceFile = mapper.writeValueAsString(fileUploadResult);
-                newEntity.setReferenceFile(referenceFile);
-            } catch (JsonProcessingException e) {
-                log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
-            }
         }
         eamMaintenanceStandardMapper.insert(newEntity);
         //澶勭悊鏄庣粏鏁版嵁
@@ -254,7 +294,7 @@
         queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId);
         queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory);
         queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0);
-        queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.NORMAL.name());
+        queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
         queryWrapper.orderByDesc(EamMaintenanceStandard::getStandardVersion);
 
         List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper);
@@ -277,7 +317,7 @@
         query.setEquipmentId(equipmentId);
         query.setKeyword(keyword);
         query.setMaintenanceCategory(maintenanceCategory);
-        query.setStandardStatus(MaintenanceStandardStatusEnum.NORMAL.name());
+        query.setStandardStatus(MaintenanceStandardStatusEnum.START.name());
         IPage<EamMaintenanceStandard> pageData = this.queryPageList(page, query);
         return pageData.getRecords();
     }
@@ -287,7 +327,1071 @@
         LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EamMaintenanceStandard::getDelFlag, CommonConstant.DEL_FLAG_0);
         queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory);
-        queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.NORMAL.name());
+        queryWrapper.eq(EamMaintenanceStandard::getStandardStatus, MaintenanceStandardStatusEnum.START.name());
         return eamMaintenanceStandardMapper.selectList(queryWrapper);
     }
+
+
+    /*娴佺▼涓氬姟浠g爜--------------------------寮�濮�*/
+
+    /**
+     * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹�
+     * @param id
+     * @return
+     */
+    @Override
+    public Result<?> saveEamMaintenanceStandardProcess(String id){
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        EamMaintenanceStandard maintenanceStandard=this.getById(id);
+        if (maintenanceStandard==null){
+            return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�");
+        }
+        System.out.println("淇濆吇瑙勮寖娴佺▼锛�" + maintenanceStandard.getId());
+        flowCommonService.initActBusiness(maintenanceStandard.getStandardName()+"瑙勮寖杩涜娴佺▼瀹℃牳",
+                maintenanceStandard.getId(), "IEamMaintenanceStandardService", "eam_maintenance_standard", null);
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("dataId", maintenanceStandard.getId());
+        variables.put("organization", "淇濆吇瑙勮寖鍚姩娴佺▼");
+        variables.put("comment", "淇濆吇瑙勮寖鍚姩娴佺▼");
+        variables.put("proofreading",true);
+        Result result= flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables);
+        if (!result.isSuccess()) {
+            super.removeById(maintenanceStandard.getId());
+        }else {
+            maintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name());
+            maintenanceStandard.setDesigner(user.getUsername());
+            maintenanceStandard.setDesignTime(new Date());
+            eamMaintenanceStandardMapper.updateById(maintenanceStandard);
+            //鑾峰彇flow鐨勬祦绋嬪疄渚媔d,璁剧疆涓嬩竴姝ョ殑澶勭悊浜哄憳
+            List<FlowMyBusiness> businessList = flowMyBusinessService.list(
+                    new QueryWrapper<FlowMyBusiness>()
+                            .eq("data_id", maintenanceStandard.getId())
+            );
+            if (businessList.isEmpty()) {
+                return Result.error("娴佺▼璁板綍涓嶅瓨鍦�");
+            }
+            FlowMyBusiness flowMyBusiness = businessList.get(0);
+            EamEquipment eamEquipment=eamEquipmentService.getById(maintenanceStandard.getEquipmentId());
+            BaseFactory baseFactory=baseFactoryService.getOne(new QueryWrapper<BaseFactory>().eq("org_code", eamEquipment.getFactoryOrgCode()));
+            List<UserSelector> userSelectorList=sysUserService.selectOperatorFactoryList(eamEquipment.getEquipmentCode(),baseFactory.getId(), BusinessCodeConst.PCR0007);
+            if (!CollectionUtils.isEmpty(userSelectorList)) {
+                List<String> usernameList=userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                flowMyBusiness.setTodoUsers(JSON.toJSONString(usernameList));
+                flowMyBusinessService.updateById(flowMyBusiness);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 瀹℃壒鎿嶄綔
+     * @param eamMaintenanceStandardVo
+     * @return
+     */
+    @Override
+    public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo){
+        try {
+            // 鍙傛暟鏍¢獙
+            if (StrUtil.isEmpty(eamMaintenanceStandardVo.getTaskId()) || StrUtil.isEmpty(eamMaintenanceStandardVo.getDataId())) {
+                return Result.error("鍙傛暟閿欒");
+            }
+            LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+            String userId = user.getId();
+            eamMaintenanceStandardVo.setAssignee(user.getUsername());
+            if (StrUtil.isEmpty(userId)) {
+                return Result.error("鏈壘鍒板搴旂敤鎴�");
+            }
+
+            // 鏁版嵁鏌ヨ
+            EamMaintenanceStandard eamMaintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId());
+            if (eamMaintenanceStandard == null) {
+                return Result.error("鏈壘鍒板搴斾繚鍏绘爣鍑�");
+            }
+
+            // 2. 鏌ヨ娴佺▼涓氬姟璁板綍锛堝鐞嗙┖缁撴灉锛�
+            List<FlowMyBusiness> businessList = flowMyBusinessService.list(
+                    new QueryWrapper<FlowMyBusiness>()
+                            .eq("process_instance_id", eamMaintenanceStandardVo.getInstanceId())
+            );
+            if (businessList.isEmpty()) {
+                return Result.error("娴佺▼璁板綍涓嶅瓨鍦�");
+            }
+            FlowMyBusiness flowMyBusiness = businessList.get(0);
+
+            // 3. 鏍¢獙鐢ㄦ埛鏄惁涓哄�欓�夊鐞嗕汉
+            List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
+            if (todoUsers == null || !todoUsers.contains(user.getUsername())) {
+                return Result.error("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔�");
+            }
+
+            // 4. 璁ら浠诲姟锛堝鐞嗗凡琚棰嗙殑鎯呭喌锛�
+            String taskId = flowMyBusiness.getTaskId();
+            Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+            if (task == null) {
+                return Result.error("浠诲姟涓嶅瓨鍦ㄦ垨宸插畬鎴�");
+            }
+            if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) {
+                return Result.error("浠诲姟宸茶浠栦汉璁ら");
+            }
+            taskService.claim(taskId, user.getUsername());
+
+            // 璁剧疆娴佺▼鍙橀噺
+            Map<String, Object> values = setProcessVariables(eamMaintenanceStandard, userId, eamMaintenanceStandardVo);
+            eamMaintenanceStandardVo.setValues(values);
+            eamMaintenanceStandardVo.setComment(values.get("comment").toString());
+            // 瀹屾垚娴佺▼浠诲姟
+            Result result = flowTaskService.complete(eamMaintenanceStandardVo);
+            if (result.isSuccess()) {
+                if (eamMaintenanceStandardVo.getRepairManagerApproveResult() != null) {
+                    if (eamMaintenanceStandardVo.getRepairManagerApproveResult().equals("1")){
+                        List<FlowMyBusiness> newbusinessList = flowMyBusinessService.list(
+                                new QueryWrapper<FlowMyBusiness>()
+                                        .eq("process_instance_id", eamMaintenanceStandardVo.getInstanceId()));
+                        FlowMyBusiness newflowMyBusiness = newbusinessList.get(0);
+                        eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name());
+                        //鑾峰彇flow鐨勬祦绋嬪疄渚媔d,璁剧疆涓嬩竴姝ョ殑澶勭悊浜哄憳
+                        EamMaintenanceStandard maintenanceStandard=this.getById(eamMaintenanceStandardVo.getDataId());
+                        EamEquipment eamEquipment=eamEquipmentService.getById(maintenanceStandard.getEquipmentId());
+                        BaseFactory baseFactory=baseFactoryService.getOne(new QueryWrapper<BaseFactory>().eq("org_code", eamEquipment.getFactoryOrgCode()));
+                        List<UserSelector> userSelectorList=sysUserService.selectOperatorFactoryList(eamEquipment.getEquipmentCode(),baseFactory.getId(), BusinessCodeConst.PCR0008);
+                        if (!CollectionUtils.isEmpty(userSelectorList)) {
+                            List<String> usernameList=userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                            newflowMyBusiness.setTodoUsers(JSON.toJSONString(usernameList));
+                            flowMyBusinessService.updateById(newflowMyBusiness);
+                        }
+                    }else {
+                        eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
+                    }
+                    eamMaintenanceStandard.setRepairManager(user.getUsername());
+                    eamMaintenanceStandard.setRepairManagerApproveResult(eamMaintenanceStandardVo.getRepairManagerApproveResult());
+                    eamMaintenanceStandard.setRepairManagerApproveTime(new Date());
+                    eamMaintenanceStandard.setRepairManagerApproveComment(eamMaintenanceStandardVo.getComment());
+                }
+                if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) {
+                    if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("1")){
+                        eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name());
+                        //鍒ゆ柇鏄惁杩涜鍗囩増锛岄�氳繃璁惧缂栧彿銆佷繚鍏诲垎绫汇�佺姸鎬佽繘琛岀瓫閫�
+                        EamMaintenanceStandard maintenanceStandard=this.getById(eamMaintenanceStandardVo.getDataId());
+                        QueryWrapper<EamMaintenanceStandard> queryWrapper=new QueryWrapper<>();
+                        queryWrapper.eq("equipment_id", maintenanceStandard.getEquipmentId());
+                        queryWrapper.eq("maintenance_category", maintenanceStandard.getMaintenanceCategory());
+                        queryWrapper.eq("standard_status", MaintenanceStandardStatusEnum.START.name());
+                        List<EamMaintenanceStandard> list=eamMaintenanceStandardMapper.selectList(queryWrapper);
+                        if (!CollectionUtils.isEmpty(list)) {
+                            //浣滃簾鍘熸湁
+                            for (EamMaintenanceStandard eamMaintenanceStandard1 : list) {
+                                eamMaintenanceStandard1.setStandardStatus(MaintenanceStandardStatusEnum.ABOLISH.name());
+                                this.updateById(eamMaintenanceStandard1);
+                            }
+                        }
+                    }else {
+                        eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
+                    }
+                    eamMaintenanceStandard.setTechnicalManager(user.getUsername());
+                    eamMaintenanceStandard.setTechnicalManagerApproveResult(eamMaintenanceStandardVo.getTechnicalManagerApproveResult());
+                    eamMaintenanceStandard.setTechnicalManagerApproveTime(new Date());
+                    eamMaintenanceStandard.setTechnicalManagerApproveComment(eamMaintenanceStandardVo.getComment());
+                }
+                this.updateById(eamMaintenanceStandard);
+            } else {
+                return result;
+            }
+            return Result.OK("鎿嶄綔鎴愬姛");
+        } catch (Exception e) {
+            return Result.error("鎿嶄綔澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    private Map<String, Object> setProcessVariables(EamMaintenanceStandard eamMaintenanceStandard, String userId, EamMaintenanceStandardVo eamMaintenanceStandardVo) {
+        Map<String, Object> values = new HashMap<>();
+        values.put("dataId", eamMaintenanceStandard.getId());
+        values.put("assignee", userId);
+        if (eamMaintenanceStandardVo.getRepairManagerApproveResult() != null) {
+            values.put("repairManagerApproveResult", eamMaintenanceStandardVo.getRepairManagerApproveResult());
+            values.put("organization", eamMaintenanceStandardVo.getRepairManagerApproveComment());
+            values.put("comment", eamMaintenanceStandardVo.getRepairManagerApproveComment());
+        }
+        if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) {
+            values.put("technicalManagerApproveResult", eamMaintenanceStandardVo.getTechnicalManagerApproveResult());
+            values.put("organization", eamMaintenanceStandardVo.getTechnicalManagerApproveComment());
+            values.put("comment", eamMaintenanceStandardVo.getTechnicalManagerApproveComment());
+        }
+        return values;
+    }
+
+
+    @Override
+    public void afterFlowHandle(FlowMyBusiness business) {
+        business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣
+        business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟
+        business.getActStatus();
+    }
+
+    @Override
+    public Object getBusinessDataById(String dataId) {
+        return this.getById(dataId);
+    }
+
+    @Override
+    public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) {
+        return null;
+    }
+
+    @Override
+    public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
+        //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞�
+        return null;
+    }
+
+    /*娴佺▼涓氬姟浠g爜--------------------------缁撴潫*/
+
+
+    /*瀵煎叆鐐规鏂囦欢Excel--------------------------寮�濮�*/
+    /**
+        * 鐐规琛ㄥ鍏ュ叆鍙�
+    */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result<?> importPointInspectionExcel(MultipartFile file) {
+        try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) {
+            Sheet sheet = workbook.getSheetAt(0);
+
+            // 鎻愬彇鍚嶇О
+            String name = extractInspectionTitle(file) + "鐐规琛�";
+
+            // 1. 鎻愬彇璁惧淇℃伅
+            EamMaintenanceStandard eamMaintenanceStandard = extractDeviceInfo(sheet);
+            if (eamMaintenanceStandard == null) {
+                return Result.error("璁惧淇℃伅鎻愬彇澶辫触");
+            }
+
+            eamMaintenanceStandard.setStandardName(name);
+            eamMaintenanceStandardMapper.insert(eamMaintenanceStandard);
+
+            // 2. 鎻愬彇姣忔棩鐐规椤圭洰
+            List<EamMaintenanceStandardDetail> dailyDetails = extractDailyItems(sheet, eamMaintenanceStandard);
+            if(dailyDetails.isEmpty()){
+                return Result.error("鏈壘鍒版瘡鏃ョ偣妫�椤圭洰");
+            }
+
+            // 3. 鎻愬彇鍛ㄤ繚鍏婚」鐩�
+            List<EamMaintenanceStandardDetail> weeklyDetails = extractWeeklyItems(sheet, eamMaintenanceStandard);
+            if(weeklyDetails.isEmpty()){
+                return Result.error("鏈壘鍒板懆淇濆吇椤圭洰");
+            }
+
+            // 鍚堝苟骞朵繚瀛樻墍鏈夐」鐩�
+            List<EamMaintenanceStandardDetail> allDetails = new ArrayList<>();
+            allDetails.addAll(dailyDetails);
+            allDetails.addAll(weeklyDetails);
+
+            if (!CollectionUtils.isEmpty(allDetails)) {
+                eamMaintenanceStandardDetailService.saveBatch(allDetails);
+            }
+
+            return Result.OK("鐐规琛ㄥ鍏ユ垚鍔�");
+
+        } catch (Exception e) {
+            throw new BusinessException("鐐规琛ㄥ鍏ュけ璐�: " + e.getMessage());
+        }
+    }
+
+    /**
+        * 鎻愬彇鐐规琛ㄦ爣棰�
+    */
+    private String extractInspectionTitle(MultipartFile file) {
+        try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) {
+            Sheet sheet = workbook.getSheetAt(0);
+            Row firstRow = sheet.getRow(0);
+
+            if (firstRow == null) {
+                return "鏈壘鍒版爣棰�";
+            }
+
+            Cell firstCell = firstRow.getCell(0);
+            if (firstCell == null) {
+                return "";
+            }
+
+            String title = getCellStringValue(firstCell);
+            return extractTextBeforeInspection(title);
+
+        } catch (Exception e) {
+            return "";
+        }
+    }
+
+    /**
+        * 鎻愬彇鐐规琛ㄤ箣鍓嶇殑鏂囧瓧
+     */
+    private String extractTextBeforeInspection(String title) {
+        if (StringUtils.isBlank(title)) {
+            return "";
+        }
+
+        int index = title.indexOf("鐐规琛�");
+        return index > 0 ? title.substring(0, index).trim() : title;
+    }
+
+    /**
+        * 鎻愬彇璁惧淇℃伅
+    */
+    private EamMaintenanceStandard extractDeviceInfo(Sheet sheet) {
+        Row headerRow = sheet.getRow(0);
+        if (headerRow == null) {
+            return null;
+        }
+
+        String headerText = getCellStringValue(headerRow.getCell(0));
+        if (StringUtils.isBlank(headerText)) {
+            return null;
+        }
+
+        EamMaintenanceStandard standard = new EamMaintenanceStandard();
+        standard.setEquipmentName(extractField(headerText, "璁惧鍚嶇О[:锛歖\\s*(\\S+)"));
+        standard.setEquipmentId(extractField(headerText, "璁惧鍨嬪彿[:锛歖\\s*(\\S+)"));
+
+
+        // 鏃ユ湡澶勭悊
+        String dateStr = extractField(headerText, "鏃ユ湡[:锛歖\\s*(\\S+)");
+        if (StringUtils.isNotBlank(dateStr)) {
+            try {
+                // 鏀寔澶氱鏃ユ湡鏍煎紡
+                Date date = parseDate(dateStr);
+                standard.setDesignTime(date);
+                standard.setInitialDate(date);
+            } catch (ParseException ignored) {
+
+            }
+        }
+
+        // 鍏宠仈璁惧ID
+        if (isNotBlank(standard.getEquipmentCode()) &&
+                isNotBlank(standard.getEquipmentName())) {
+
+            List<EamEquipment> equipments = eamEquipmentService.list(
+                    new QueryWrapper<EamEquipment>()
+                            .eq("equipment_code", standard.getEquipmentCode())
+                            .eq("equipment_name", standard.getEquipmentName())
+            );
+
+            if (!equipments.isEmpty()) {
+                standard.setEquipmentId(equipments.get(0).getId());
+            }else {
+                return null;
+            }
+        }
+
+        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE);
+        standard.setStandardCode(codeSeq);
+        standard.setMaintenanceCategory("POINT_INSPECTION");
+        standard.setPeriodUnit("澶�");
+        standard.setStandardStatus(MaintenanceStandardStatusEnum.START.name());
+        standard.setStandardVersion("v" + CommonConstant.OPERATE_TYPE_1);
+        standard.setDelFlag(0);
+        standard.setMaintenancePeriod(1);
+
+        return standard;
+    }
+
+    /**
+        * 瑙f瀽鏃ユ湡瀛楃涓�
+     */
+    private Date parseDate(String dateStr) throws ParseException {
+        // 灏濊瘯澶氱鏃ユ湡鏍煎紡
+        String[] patterns = {
+                "yyyy骞碝M鏈�",
+                "yyyy-MM",
+                "yyyy/MM",
+                "yyyyMM",
+                "yyyy骞碝鏈�"
+        };
+
+        for (String pattern : patterns) {
+            try {
+                SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+                sdf.setLenient(false);
+                return sdf.parse(dateStr);
+            } catch (ParseException e) {
+                // 灏濊瘯涓嬩竴涓牸寮�
+            }
+        }
+
+        throw new ParseException("鏃犳硶瑙f瀽鏃ユ湡: " + dateStr, 0);
+    }
+
+    /**
+        * 鎻愬彇姣忔棩鐐规椤圭洰
+    */
+    private List<EamMaintenanceStandardDetail> extractDailyItems(Sheet sheet, EamMaintenanceStandard standard) {
+        return extractItems(sheet, standard, "鐐规椤圭洰", "瀹屾垚鏁版嵁/瑕佹眰", "DAY_INSPECTION");
+    }
+
+    /**
+        * 鎻愬彇鍛ㄤ繚鍏婚」鐩�
+    */
+    private List<EamMaintenanceStandardDetail> extractWeeklyItems(Sheet sheet, EamMaintenanceStandard standard) {
+        return extractItems(sheet, standard, "鍛ㄤ繚鍏婚」鐩�", "妫�鏌ユ爣鍑�", "WEEK_INSPECTION");
+    }
+
+    /**
+        * 閫氱敤椤圭洰鎻愬彇鏂规硶
+    */
+    private List<EamMaintenanceStandardDetail> extractItems(Sheet sheet, EamMaintenanceStandard standard,
+                                                            String primaryHeader, String secondaryHeader,
+                                                            String itemCategory) {
+        int[] section = findTableSection(sheet, primaryHeader, secondaryHeader);
+        if (section == null) {
+            return Collections.emptyList();
+        }
+
+        List<EamMaintenanceStandardDetail> details = new ArrayList<>();
+        for (int rowIdx = section[0]; rowIdx <= section[1]; rowIdx++) {
+            Row row = sheet.getRow(rowIdx);
+            if (row == null || isEmptyRow(row)) {
+                continue;
+            }
+
+            // 纭繚绗竴鍒楁槸搴忓彿锛堟暟瀛楋級
+            Cell seqCell = row.getCell(0);
+            if (seqCell == null || seqCell.getCellType() != CellType.NUMERIC) {
+                continue;
+            }
+
+            // 鍒涘缓椤圭洰璇︽儏
+            EamMaintenanceStandardDetail detail = new EamMaintenanceStandardDetail();
+            detail.setStandardId(standard.getId());
+            detail.setItemName(getCellStringValue(row.getCell(1)));
+            detail.setItemCategory(itemCategory);
+
+            // 鏍规嵁椤圭洰绫诲瀷璁剧疆闇�姹傚瓧娈�
+            if ("DAY_INSPECTION".equals(itemCategory)) {
+                detail.setItemDemand(getCellStringValue(row.getCell(2)));
+            } else if ("WEEK_INSPECTION".equals(itemCategory)) {
+                detail.setItemDemand(getCellStringValue(row.getCell(2)));
+            }
+
+            details.add(detail);
+        }
+
+        return details;
+    }
+
+    /**
+        * 鏌ユ壘琛ㄦ牸鍖哄煙
+     */
+    private int[] findTableSection(Sheet sheet, String primaryHeader, String secondaryHeader) {
+        for (int rowIdx = 0; rowIdx <= sheet.getLastRowNum(); rowIdx++) {
+            Row row = sheet.getRow(rowIdx);
+            if (row == null) continue;
+
+            if (isHeaderRow(row, primaryHeader, secondaryHeader)) {
+                int startRow = rowIdx + 1;
+                int endRow = findDataEnd(sheet, startRow);
+                return new int[]{startRow, endRow};
+            }
+        }
+        return null;
+    }
+
+    /**
+        * 妫�鏌ユ槸鍚︿负琛ㄥご琛�
+    */
+    private boolean isHeaderRow(Row row, String header1, String header2) {
+        boolean foundHeader1 = false;
+        boolean foundHeader2 = false;
+
+        for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) {
+            Cell cell = row.getCell(colIdx);
+            if (cell == null) continue;
+
+            String cellValue = getCellStringValue(cell);
+            if (cellValue.contains(header1)) foundHeader1 = true;
+            if (cellValue.contains(header2)) foundHeader2 = true;
+        }
+
+        return foundHeader1 && foundHeader2;
+    }
+
+    /**
+        * 鏌ユ壘鏁版嵁缁撴潫浣嶇疆
+     */
+    private int findDataEnd(Sheet sheet, int startRow) {
+        for (int rowIdx = startRow; rowIdx <= sheet.getLastRowNum(); rowIdx++) {
+            Row row = sheet.getRow(rowIdx);
+            if (row == null) return rowIdx - 1;
+
+            // 妫�鏌ユ槸鍚︾粨鏉熸爣蹇楄锛堝绛惧瓧琛岋級
+            if (isSignatureRow(row)) {
+                return rowIdx - 1;
+            }
+
+            // 妫�鏌ユ槸鍚︽柊鐨勮〃澶村紑濮�
+            if (isNewHeaderStart(row)) {
+                return rowIdx - 1;
+            }
+        }
+        return sheet.getLastRowNum();
+    }
+
+    /**
+        * 璇嗗埆绛惧瓧琛岀壒寰�
+    */
+    private boolean isSignatureRow(Row row) {
+        for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) {
+            Cell cell = row.getCell(colIdx);
+            if (cell == null) continue;
+
+            String value = getCellStringValue(cell);
+            if (value.contains("绛惧瓧") || value.contains("璐d换浜�") ||
+                    value.contains("鎵ц") || value.contains("纭")) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 璇嗗埆鏂拌〃澶村紑濮�
+    */
+    private boolean isNewHeaderStart(Row row) {
+        for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) {
+            Cell cell = row.getCell(colIdx);
+            if (cell == null) continue;
+
+            String value = getCellStringValue(cell);
+            if ("搴忓彿".equals(value) || "鐐规椤圭洰".equals(value) || "鍛ㄤ繚鍏婚」鐩�".equals(value)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+        * 妫�鏌ヨ鏄惁涓虹┖
+    */
+    private boolean isEmptyRow(Row row) {
+        if (row == null) return true;
+        for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) {
+            Cell cell = row.getCell(colIdx);
+            if (cell != null && cell.getCellType() != CellType.BLANK) {
+                String value = getCellStringValue(cell);
+                if (StringUtils.isNotBlank(value)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+        * 浣跨敤姝e垯鎻愬彇瀛楁
+    */
+    private String extractField(String text, String regex) {
+        if (StringUtils.isBlank(text)) return "";
+        Pattern pattern = Pattern.compile(regex);
+        Matcher matcher = pattern.matcher(text);
+        return matcher.find() ? matcher.group(1) : "";
+    }
+
+    /**
+        * 鑾峰彇鍗曞厓鏍煎瓧绗︿覆鍊�
+    */
+    private String getCellStringValue(Cell cell) {
+        if (cell == null) return "";
+        switch (cell.getCellType()) {
+            case STRING:
+                return cell.getStringCellValue().trim();
+            case NUMERIC:
+                if (DateUtil.isCellDateFormatted(cell)) {
+                    return new SimpleDateFormat("yyyy骞碝M鏈�").format(cell.getDateCellValue());
+                }
+                return String.valueOf((int) cell.getNumericCellValue());
+            case BOOLEAN:
+                return String.valueOf(cell.getBooleanCellValue());
+            case FORMULA:
+                return handleFormulaCell(cell);
+            default:
+                return "";
+        }
+    }
+
+    /**
+        * 澶勭悊鍏紡鍗曞厓鏍�
+    */
+    private String handleFormulaCell(Cell cell) {
+        try {
+            FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
+            CellValue cellValue = evaluator.evaluate(cell);
+
+            if (cellValue == null) return "";
+
+            switch (cellValue.getCellType()) {
+                case STRING: return cellValue.getStringValue();
+                case NUMERIC: return String.valueOf((int) cellValue.getNumberValue());
+                case BOOLEAN: return String.valueOf(cellValue.getBooleanValue());
+                default: return "";
+            }
+        } catch (Exception e) {
+            return "";
+        }
+    }
+    /*瀵煎叆鐐规鏂囦欢Excel--------------------------缁撴潫*/
+
+    /*瀵煎叆浜屼繚涓変繚鏂囦欢Excel--------------------------寮�濮�*/
+    /**
+     * 缁熶竴淇濆吇瑙勮寖瀵煎叆鍏ュ彛
+     * @param file 涓婁紶鏂囦欢
+     * @param type 淇濆吇绫诲瀷 (SECOND/THIRD)
+     * @return 瀵煎叆缁撴灉锛堝寘鍚垚鍔�/澶辫触淇℃伅锛�
+     */
+    @Override
+    @Transactional
+    public Result<?> importMaintenanceStandard(MultipartFile file, String type) {
+        String fileName = file.getOriginalFilename();
+
+        try (XWPFDocument doc = new XWPFDocument(file.getInputStream())) {
+            // 鍩虹楠岃瘉
+            if (doc.getTables().isEmpty()) {
+                return Result.error(fileName + ": 鏂囨。涓湭鎵惧埌琛ㄦ牸");
+            }
+
+            XWPFTable table = doc.getTables().get(0);
+
+            // 鏂囨。绫诲瀷鏍¢獙 - 闃叉浜屼繚浼犲叆涓変繚鎴栧弽涔�
+            if (isWrongDocumentType(table, type)) {
+                return Result.error(fileName + ": 鏂囨。绫诲瀷涓嶅尮閰� - " +
+                        ("SECOND".equals(type) ? "璇峰鍏ヤ簩绾т繚鍏绘枃妗�" : "璇峰鍏ヤ笁绾т繚鍏绘枃妗�"));
+            }
+
+            EamMaintenanceStandard standard = extractDeviceInfo(table);
+            if (standard == null) {
+                return Result.error(fileName + ": 璁惧淇℃伅鎻愬彇澶辫触");
+            }
+
+            // 閰嶇疆绫诲瀷鐩稿叧鍙傛暟
+            configureStandard(standard, type, file);
+            eamMaintenanceStandardMapper.insert(standard);
+            String standardId = standard.getId();
+
+            // 鎻愬彇淇濆吇椤圭洰
+            List<EamMaintenanceStandardDetail> items;
+            if ("SECOND".equals(type)) {
+                items = extractSecondMaintenanceItems(table, standardId);
+            } else if ("THIRD".equals(type)) {
+                items = extractThirdMaintenanceItems(table, standardId);
+            } else {
+                return Result.error(fileName + ": 涓嶆敮鎸佺殑淇濆吇绫诲瀷: " + type);
+            }
+
+            // 椤圭洰楠岃瘉
+            if (items.isEmpty()) {
+                return Result.error(fileName + ": 鏈彁鍙栧埌浠讳綍淇濆吇椤圭洰");
+            }
+
+            // 淇濆瓨椤圭洰
+            eamMaintenanceStandardDetailService.saveBatch(items);
+
+            return Result.ok(fileName + ": 瀵煎叆鎴愬姛, 椤圭洰鏁�: " + items.size());
+
+        } catch (ImportException e) {
+            return Result.error(e.getMessage());
+        } catch (Exception e) {
+            return Result.error(fileName + ": 绯荤粺閿欒 - " + e.getClass().getSimpleName());
+        }
+    }
+
+    /**
+     * 鏂囨。绫诲瀷鏍¢獙 - 闃叉浜屼繚浼犲叆涓変繚鎴栧弽涔�
+    */
+    private boolean isWrongDocumentType(XWPFTable table, String requestedType) {
+        boolean hasRepairTitle = false;
+        boolean hasOperatorTitle = false;
+        boolean hasMaintenancePart = false;
+
+        // 鍙鏌ュ墠10琛岋紙閫氬父鏍囬鍦ㄥ墠鍑犺锛�
+        int maxRows = Math.min(table.getNumberOfRows(), 10);
+
+        for (int i = 0; i < maxRows; i++) {
+            XWPFTableRow row = table.getRow(i);
+            if (row == null) continue;
+
+            // 妫�鏌ユ墍鏈夊崟鍏冩牸鍐呭
+            for (int j = 0; j < row.getTableCells().size(); j++) {
+                String cellText = getCellText(row.getCell(j));
+
+                // 妫�鏌ヤ簩绾т繚鍏荤壒寰�
+                if (cellText.contains(REPAIR_TITLE)) {
+                    hasRepairTitle = true;
+                }
+                if (cellText.contains(OPERATOR_TITLE)) {
+                    hasOperatorTitle = true;
+                }
+
+                // 妫�鏌ヤ笁绾т繚鍏荤壒寰�
+                if (cellText.contains("淇濆吇閮ㄤ綅")) {
+                    hasMaintenancePart = true;
+                }
+            }
+        }
+
+        // 閫昏緫鍒ゆ柇
+        if ("SECOND".equals(requestedType)) {
+            // 濡傛灉璇锋眰瀵煎叆浜岀骇淇濆吇锛屼絾鏂囨。涓湁涓夌骇淇濆吇鐗瑰緛
+            return !(hasRepairTitle || hasOperatorTitle) || hasMaintenancePart;
+        } else if ("THIRD".equals(requestedType)) {
+            // 濡傛灉璇锋眰瀵煎叆涓夌骇淇濆吇锛屼絾鏂囨。涓湁浜岀骇淇濆吇鐗瑰緛
+            return !hasMaintenancePart || (hasRepairTitle || hasOperatorTitle);
+        }
+
+        return false;
+    }
+
+    /**
+     * 鎻愬彇璁惧鍩烘湰淇℃伅
+     */
+    private EamMaintenanceStandard extractDeviceInfo(XWPFTable table) {
+        if (table.getNumberOfRows() < 2) return null;
+
+        // 鎻愬彇鍓嶄袱琛屾暟鎹�
+        Map<String, String> row1Data = extractRowData(table.getRow(0));
+        Map<String, String> row2Data = extractRowData(table.getRow(1));
+
+        // 鍒涘缓璁惧鏍囧噯瀵硅薄
+        EamMaintenanceStandard standard = new EamMaintenanceStandard();
+        standard.setEquipmentText(row1Data.get("璁惧绫诲埆"));
+        standard.setEquipmentCode(row1Data.get("璁惧缂栧彿"));
+        standard.setEquipmentName(row2Data.get("璁惧鍚嶇О"));
+        standard.setEquipmentModel(row2Data.get("璁惧鍨嬪彿"));
+
+        // 鍏宠仈璁惧ID
+        if (isNotBlank(standard.getEquipmentCode()) &&
+                isNotBlank(standard.getEquipmentName())) {
+
+            List<EamEquipment> equipments = eamEquipmentService.list(
+                    new QueryWrapper<EamEquipment>()
+                            .eq("equipment_code", standard.getEquipmentCode())
+                            .eq("equipment_name", standard.getEquipmentName())
+            );
+
+            if (!equipments.isEmpty()) {
+                standard.setEquipmentId(equipments.get(0).getId());
+            }else {
+                return null;
+            }
+        }
+
+        return standard;
+    }
+
+    // 绠�鏄撶増瀛楃涓查潪绌哄垽鏂�
+    private boolean isNotBlank(String str) {
+        return str != null && !str.trim().isEmpty();
+    }
+
+    /**
+     * 琛ㄦ牸琛屾暟鎹В鏋�
+     */
+    private Map<String, String> extractRowData(XWPFTableRow row) {
+        Map<String, String> data = new HashMap<>();
+        int cellCount = row.getTableCells().size();
+
+        try {
+            // 閿�煎妯″紡 (鏍囩|鍊紎鏍囩|鍊�)
+            if (cellCount >= 4 && cellCount % 2 == 0) {
+                for (int i = 0; i < cellCount; i += 2) {
+                    String key = cleanKey(getCellText(row.getCell(i)));
+                    String value = getCellText(row.getCell(i + 1));
+                    if (!key.isEmpty()) data.put(key, value);
+                }
+            }
+            // 杩炵画鍗曞厓鏍兼ā寮�
+            else {
+                for (int i = 0; i < cellCount; i++) {
+                    String text = getCellText(row.getCell(i));
+                    int colonIndex = text.indexOf('锛�');
+                    if (colonIndex > 0) {
+                        String key = cleanKey(text.substring(0, colonIndex));
+                        String value = text.substring(colonIndex + 1);
+                        data.put(key, value);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("琛屾暟鎹В鏋愬紓甯�", e);
+        }
+        return data;
+    }
+
+    /**
+     * 閿悕鏍囧噯鍖栧鐞�
+     */
+    private String cleanKey(String key) {
+        if (key == null) return "";
+        // 绉婚櫎绌烘牸鍜屼腑鏂囧啋鍙�
+        return key.replaceAll("\\s", "").replace("锛�", "");
+    }
+
+    /**
+     * 閰嶇疆淇濆吇鏍囧噯鍙傛暟
+     */
+    private void configureStandard(EamMaintenanceStandard standard, String type, MultipartFile file) {
+        // 鍩虹鍙傛暟
+        String filename = file.getOriginalFilename();
+        if (filename != null && filename.contains(".")) {
+            filename = filename.substring(0, filename.lastIndexOf('.'));
+        }
+
+        standard.setStandardName(filename)
+                .setInitialDate(new Date())
+                .setStandardStatus(MaintenanceStandardStatusEnum.START.name())
+                .setStandardVersion("v1.0")
+                .setDelFlag(0)
+                .setStandardCode(businessCodeRuleService.generateBusinessCodeSeq(
+                        BusinessCodeConst.MAINTENANCE_STANDARD_CODE_RULE
+                ));
+
+        // 绫诲瀷鐗瑰畾鍙傛暟
+        if ("SECOND".equals(type)) {
+            standard.setMaintenanceCategory("SECOND_MAINTENANCE")
+                    .setMaintenancePeriod(6)
+                    .setPeriodUnit("鏈�");
+        } else {
+            standard.setMaintenanceCategory("THIRD_MAINTENANCE")
+                    .setPeriodUnit("骞�");
+
+            // 鑾峰彇涓夌骇淇濆吇鍛ㄦ湡
+            if (standard.getEquipmentId() != null) {
+                EamEquipmentExtend extend = eamEquipmentExtendService.getById(standard.getEquipmentId());
+                if (extend != null) {
+                    standard.setMaintenancePeriod(extend.getThirdMaintenancePeriod());
+                }
+            }
+        }
+    }
+
+    /**
+     * 鎻愬彇浜岀骇淇濆吇椤圭洰
+     */
+    private List<EamMaintenanceStandardDetail> extractSecondMaintenanceItems(
+            XWPFTable table, String standardId) {
+
+        List<EamMaintenanceStandardDetail> items = new ArrayList<>();
+        EamMaintenanceStandardDetailCategory currentCategory = null;
+
+        for (int i = 0; i < table.getNumberOfRows(); i++) {
+            XWPFTableRow row = table.getRow(i);
+            if (row == null) continue;
+
+            // 妫�鏌ユ槸鍚︽槸鏍囬琛岋紙缁翠慨浜哄憳淇濆吇鍐呭鎴栨搷浣滀汉鍛樹繚鍏诲唴瀹癸級
+            String firstCell = getCellText(row.getCell(0));
+            if (firstCell != null) {
+                for (String title : SECOND_CATEGORY_MAPPING.keySet()) {
+                    if (firstCell.contains(title)) {
+                        currentCategory = SECOND_CATEGORY_MAPPING.get(title);
+
+                        // 妫�鏌ョ浜屽垪鍜岀涓夊垪鏄惁鏄�"搴忓彿"鍜�"淇濆吇鍐呭"
+                        if (row.getTableCells().size() > 2) {
+                            String secondCell = getCellText(row.getCell(1));
+                            String thirdCell = getCellText(row.getCell(2));
+
+                            // 鏄庣‘璺宠繃鏍囬琛�
+                            if ("搴忓彿".equals(secondCell) && "淇濆吇鍐呭".equals(thirdCell)) {
+                                continue; // 璺宠繃杩欎竴琛�
+                            }
+                        }
+
+                        // 灏濊瘯鎻愬彇鏍囬琛屼腑鐨勯」鐩紙濡傛灉瀛樺湪锛�
+                        if (row.getTableCells().size() > 2) {
+                            String content = getCellText(row.getCell(2));
+                            if (content != null && !content.trim().isEmpty() &&
+                                    !"淇濆吇鍐呭".equals(content.trim())) { // 杩囨护鏃犳晥鍐呭
+                                items.add(createItem(currentCategory, content.trim(), standardId));
+                            }
+                        }
+                        continue;
+                    }
+                }
+            }
+
+            // 澶勭悊鏅�氶」鐩
+            if (currentCategory != null && isValidItemRow(row)) {
+                // 鑾峰彇鍐呭
+                String content = row.getTableCells().size() > 2 ?
+                        getCellText(row.getCell(2)) : "";
+
+                // 鎺掗櫎鏍囬鍐呭
+                if ("淇濆吇鍐呭".equals(content) ||
+                        "搴忓彿".equals(content) ||
+                        content.contains("缁翠慨浜哄憳淇濆吇鍐呭") ||
+                        content.contains("鎿嶄綔浜哄憳淇濆吇鍐呭")) {
+                    continue;
+                }
+
+                EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail();
+                item.setItemCategory(String.valueOf(currentCategory));
+                item.setStandardId(standardId);
+                item.setItemName(cleanContent(content));
+
+                // 澶勭悊搴忓彿锛堢浜屽垪锛�
+                if (row.getTableCells().size() > 1) {
+                    String seqText = getCellText(row.getCell(1));
+                    try {
+                        if (seqText != null && !seqText.trim().isEmpty()) {
+                            item.setItemCode(Integer.parseInt(seqText.trim()));
+                        }
+                    } catch (NumberFormatException e) {
+                        // 蹇界暐搴忓彿瑙f瀽閿欒
+                    }
+                }
+
+                items.add(item);
+            }
+        }
+        return items;
+    }
+
+    /**
+     * 鍒涘缓淇濆吇椤圭洰
+     */
+    private EamMaintenanceStandardDetail createItem(
+            EamMaintenanceStandardDetailCategory category,
+            String content,
+            String standardId) {
+
+        EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail();
+        item.setItemCategory(category.name());
+        item.setStandardId(standardId);
+        item.setItemName(cleanContent(content));
+        return item;
+    }
+
+    /**
+     * 鎻愬彇涓夌骇淇濆吇椤圭洰锛堟棤绫诲瀷锛�
+     */
+    private List<EamMaintenanceStandardDetail> extractThirdMaintenanceItems(
+            XWPFTable table, String standardId) {
+
+        List<EamMaintenanceStandardDetail> items = new ArrayList<>();
+        String currentPart = "";
+        int itemCount = 1;
+
+        // 浠庣涓夎寮�濮嬶紙璺宠繃琛ㄥご鍜岃澶囦俊鎭級
+        for (int i = 2; i < table.getNumberOfRows(); i++) {
+            XWPFTableRow row = table.getRow(i);
+            if (row == null || isRowEmpty(row)) continue;
+
+            // 璺宠繃"淇濆吇閮ㄤ綅"鏍囬琛�
+            String firstCell = getCellText(row.getCell(0));
+            if ("淇濆吇閮ㄤ綅".equals(firstCell)) {
+                continue;
+            }
+
+            EamMaintenanceStandardDetail item = new EamMaintenanceStandardDetail();
+            // 涓夌骇淇濆吇涓嶉渶瑕佺被鍨嬶紝涓嶈缃甶temCategory
+            item.setStandardId(standardId);
+            item.setItemCode(itemCount++);
+
+            // 澶勭悊閮ㄤ綅鍒�
+            if (!row.getTableCells().isEmpty()) {
+                String partCell = getCellText(row.getCell(0));
+                if (!partCell.trim().isEmpty()) {
+                    currentPart = partCell.trim();
+                }
+            }
+            item.setItemPart(currentPart);
+
+            // 鏍规嵁鍒楁暟纭畾鍐呭鍜屾爣鍑嗙殑浣嶇疆
+            int cellCount = row.getTableCells().size();
+            if (cellCount == 3) { // 閮ㄤ綅|鍐呭|鏍囧噯
+                item.setItemName(getCellText(row.getCell(1)));
+                item.setItemDemand(getCellText(row.getCell(2)));
+            }
+            else if (cellCount == 2) { // 鍐呭|鏍囧噯
+                item.setItemName(getCellText(row.getCell(0)));
+                item.setItemDemand(getCellText(row.getCell(1)));
+            }
+            else if (cellCount == 1) { // 鍗曞垪鍐呭
+                item.setItemName(getCellText(row.getCell(0)));
+            }
+            else if (cellCount > 3) { // 澶氬垪澶勭悊
+                // 鍙栫2鍒椾綔涓哄唴瀹癸紝鏈�鍚庝竴鍒椾綔涓烘爣鍑�
+                item.setItemName(getCellText(row.getCell(1)));
+                item.setItemDemand(getCellText(row.getCell(cellCount - 1)));
+            }
+
+            items.add(item);
+        }
+        return items;
+    }
+
+    /**
+     * 鍏煎鐗堝崟鍏冩牸鏂囨湰鎻愬彇
+     */
+    private String getCellText(XWPFTableCell cell) {
+        if (cell == null) return "";
+
+        StringBuilder text = new StringBuilder();
+        for (XWPFParagraph para : cell.getParagraphs()) {
+            if (para != null) {
+                for (XWPFRun run : para.getRuns()) {
+                    if (run != null) {
+                        String runText = run.getText(0);
+                        if (runText != null) {
+                            text.append(runText);
+                        }
+                    }
+                }
+            }
+        }
+        return text.toString();
+    }
+
+    /**
+     * 鍐呭娓呯悊
+     */
+    private String cleanContent(String text) {
+        if (text == null) return "";
+
+        // 鏇挎崲鐗规畩绌烘牸鍜屽悎骞惰繛缁┖鏍�
+        text = text.replace('\u00A0', ' ')
+                .replace('\u2007', ' ')
+                .replace('\u202F', ' ')
+                .replaceAll("\\s+", " ");
+
+        // 瑙勮寖鏍囩偣绗﹀彿
+        return text.replace(',', '銆�')
+                .replace('锛�', '銆�')
+                .replace(';', '锛�')
+                .replace('锛�', '锛�')
+                .replace(':', '锛�')
+                .replace('锛�', '锛�')
+                .trim();
+    }
+
+    /**
+     * 楠岃瘉鏈夋晥椤圭洰琛�
+     */
+    private boolean isValidItemRow(XWPFTableRow row) {
+        return row != null &&
+                row.getTableCells().size() >= 2 &&
+                !getCellText(row.getCell(1)).trim().isEmpty();
+    }
+
+    /**
+     * 绌鸿妫�娴�
+     */
+    private boolean isRowEmpty(XWPFTableRow row) {
+        if (row == null) return true;
+        for (XWPFTableCell cell : row.getTableCells()) {
+            String text = getCellText(cell);
+            if (text != null && !text.trim().isEmpty()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /*瀵煎叆浜屼繚涓変繚鏂囦欢Excel--------------------------缁撴潫*/
+
 }

--
Gitblit v1.9.3