package com.gkhy.exam.system.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.read.metadata.ReadSheet; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gkhy.exam.common.api.CommonPage; import com.gkhy.exam.common.api.CommonResult; import com.gkhy.exam.common.api.ImportResult; import com.gkhy.exam.common.constant.UserConstant; import com.gkhy.exam.common.utils.PageUtils; import com.gkhy.exam.common.utils.SecurityUtils; import com.gkhy.exam.system.domain.DTO.KnowledgeImportDTO; import com.gkhy.exam.system.domain.ExternalKnowledge; import com.gkhy.exam.system.mapper.ExternalKnowledgeMapper; import com.gkhy.exam.system.service.ExternalKnowledgeService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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 java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; /** *

* 外部知识 服务实现类 *

* * @author hh * @since 2025-08-25 15:01:44 */ @Service public class ExternalKnowledgeServiceImpl extends ServiceImpl implements ExternalKnowledgeService { @Autowired private ExternalKnowledgeMapper externalKnowledgeMapper; @Override public CommonPage selectExternalKnowledgeList(ExternalKnowledge externalKnowledge) { PageUtils.startPage(); List externalKnowledge1 = externalKnowledgeMapper.getExternalKnowledge(externalKnowledge); return CommonPage.restPage(externalKnowledge1); } @Override public CommonResult saveExternalKnowledge(ExternalKnowledge externalKnowledge) { int i = 0; if (externalKnowledge.getId() == null) { externalKnowledge.setCreateBy(SecurityUtils.getUsername()); externalKnowledge.setCreateTime(LocalDateTime.now()); i = externalKnowledgeMapper.insert(externalKnowledge); } else { externalKnowledge.setUpdateBy(SecurityUtils.getUsername()); externalKnowledge.setUpdateTime(LocalDateTime.now()); i = externalKnowledgeMapper.updateById(externalKnowledge); } return CommonResult.success(); } @Override public CommonResult deletedExternalKnowledge(Integer id) { externalKnowledgeMapper.update(new ExternalKnowledge(), new LambdaUpdateWrapper().eq(ExternalKnowledge::getId, id) .set(ExternalKnowledge::getDelFlag, UserConstant.DEPT_DISABLE) .set(ExternalKnowledge::getUpdateTime, LocalDateTime.now()) .set(ExternalKnowledge::getUpdateBy, SecurityUtils.getUsername())); return CommonResult.success(); } @Override @Transactional public ImportResult importExternalKnowledge(Long companyId, MultipartFile file) { ImportResult result = new ImportResult(); result.setSuccessCount(0); result.setFailCount(0); result.setErrorMessages(new ArrayList<>()); try { // 使用EasyExcel读取文件 ReadListener listener = new ReadListener() { @Override public void invoke(KnowledgeImportDTO dto, AnalysisContext context) { try { // 转换为实体对象 ExternalKnowledge externalKnowledge = new ExternalKnowledge(); externalKnowledge.setName(dto.getName()); externalKnowledge.setNumber(dto.getNumber()); switch (dto.getKnowledgeType()) { case "标准": externalKnowledge.setKnowledgeType(1); break; case "规范": externalKnowledge.setKnowledgeType(2); break; case "法律法规": externalKnowledge.setKnowledgeType(3); break; case "质量服务标准": externalKnowledge.setKnowledgeType(5); break; default: externalKnowledge.setKnowledgeType(4); break; } externalKnowledge.setCompanyId(companyId); externalKnowledgeMapper.insert(externalKnowledge); result.setSuccessCount(result.getSuccessCount() + 1); } catch (Exception e) { result.getErrorMessages().add("行" + context.readRowHolder().getRowIndex() + "导入失败:" + e.getMessage()); result.setFailCount(result.getFailCount() + 1); } } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 导入完成后的处理 } }; // 创建读取器 ExcelReader excelReader = EasyExcel.read(file.getInputStream(), KnowledgeImportDTO.class, listener).build(); ReadSheet readSheet = EasyExcel.readSheet(0).build(); excelReader.read(readSheet); } catch (Exception e) { result.getErrorMessages().add("导入失败:" + e.getMessage()); } return result; } }