From a92e9d1869426cad575ef6e018842b2cb02d7423 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Tue, 5 Dec 2023 13:33:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=80=81=E6=B3=95=E8=A7=84=E4=BC=81?= =?UTF-8?q?=E6=A0=87=E4=BD=93=E7=B3=BB=E5=85=B3=E8=81=94=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oldSystem/entity/ESOldStandardSystem.java | 46 +++++++ .../entity/OldSystemImportDTO.java | 2 +- .../service/impl/OldSystemServiceImpl.java | 124 ++++++++++++++++-- 3 files changed, 162 insertions(+), 10 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/ESOldStandardSystem.java rename laws-modules/src/main/java/com/jero/modules/laws/{enterprise => oldSystem}/entity/OldSystemImportDTO.java (99%) diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/ESOldStandardSystem.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/ESOldStandardSystem.java new file mode 100644 index 00000000..e3fb0b7d --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/ESOldStandardSystem.java @@ -0,0 +1,46 @@ +package com.jero.modules.laws.oldSystem.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @author: Mzaxd + * @Date: 2023/12/5 10:49 + */ + +@Data +public class ESOldStandardSystem { + + @Excel(name = "ID", width = 15, orderNum = "0") + private String id; + + @Excel(name = "BZH", width = 15, orderNum = "1") + private String bzh; + + @Excel(name = "BZMC", width = 15, orderNum = "4") + private String bzmc; + + @Excel(name = "BZYWMC", width = 15, orderNum = "5") + private String bzywmc; + + @Excel(name = "BZFL-NEW", width = 15, orderNum = "6") + private String bzfl; + + @Excel(name = "错误信息", width = 35, orderNum = "52") + @TableField(exist = false) + private String errorInfo; + + /** + * 判断是否是空行 + * @return 如果所有字段都为null或空字符串,返回true,否则返回false + */ + public boolean isEmptyRow() { + return id == null && bzmc == null && bzywmc == null && bzfl == null; + } + + + + + +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/OldSystemImportDTO.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/OldSystemImportDTO.java similarity index 99% rename from laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/OldSystemImportDTO.java rename to laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/OldSystemImportDTO.java index f516bb04..14237a3a 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/OldSystemImportDTO.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/OldSystemImportDTO.java @@ -1,4 +1,4 @@ -package com.jero.modules.laws.enterprise.entity; +package com.jero.modules.laws.oldSystem.entity; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemServiceImpl.java index 7c553396..5d6d5444 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemServiceImpl.java @@ -16,25 +16,21 @@ import com.jero.modules.activiti.util.ExcelUtils; import com.jero.modules.laws.common.constant.FieldCommon; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardAuthDept; import com.jero.modules.laws.enterprise.entity.EnterpriseStandardAuthUser; -import com.jero.modules.laws.enterprise.entity.OldSystemImportDTO; +import com.jero.modules.laws.enterprise.entity.vo.LawsTreeNodeModel; +import com.jero.modules.laws.oldSystem.entity.OldSystemImportDTO; import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthDeptService; import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthUserService; import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil; import com.jero.modules.laws.home.service.ILawsHomeSearchService; -import com.jero.modules.laws.oldSystem.entity.ESAuthAll; -import com.jero.modules.laws.oldSystem.entity.ESAuthDept; -import com.jero.modules.laws.oldSystem.entity.ESAuthUser; -import com.jero.modules.laws.oldSystem.entity.OldSystemDepartRelation; +import com.jero.modules.laws.oldSystem.entity.*; import com.jero.modules.laws.oldSystem.service.OldSystemDepartRelationService; import com.jero.modules.laws.oldSystem.service.OldSystemService; import com.jero.modules.laws.standard.entity.LawsDomesticStandard; import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; import com.jero.modules.laws.standard.entity.LawsOverseasStandard; +import com.jero.modules.laws.standard.entity.LawsTreeNode; import com.jero.modules.laws.standard.mapper.LawsEnterpriseStandardMapper; -import com.jero.modules.laws.standard.service.ILawsDomesticStandardService; -import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; -import com.jero.modules.laws.standard.service.ILawsOverseasStandardService; -import com.jero.modules.laws.standard.service.ILawsReplacedStandardService; +import com.jero.modules.laws.standard.service.*; import com.jero.modules.laws.standard.util.StandardSplitUtils; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; @@ -42,6 +38,7 @@ import com.jero.modules.system.entity.SysDepart; import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.service.ISysDepartService; import com.jero.modules.system.service.ISysUserService; +import com.jero.modules.tag.enums.TableNameEnum; import io.minio.errors.MinioException; import lombok.Cleanup; import lombok.SneakyThrows; @@ -52,6 +49,7 @@ import org.jeecgframework.poi.excel.ExcelExportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -124,6 +122,12 @@ public class OldSystemServiceImpl implements OldSystemService { @Resource private ILawsEnterpriseStandardService esService; + @Resource + private ILawsTreeNodeService treeNodeService; + + @Resource + private ILawsNodeRelationService lawsNodeRelationService; + @Override public void importExcelOldSystem(MultipartFile file, String type, HttpServletResponse response) { List errImportList = new ArrayList<>(); @@ -858,7 +862,109 @@ public class OldSystemServiceImpl implements OldSystemService { @Override public void importEsStandSystem(MultipartFile file, HttpServletResponse response) { + List errImportList = new ArrayList<>(); + // 验证文件是否为压缩格式file.getContentType()).contains("xls") + if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { + throw new JeroBootException("文件格式不正确,请上传Excel。"); + } + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setNeedSave(true); + // 获取所有企标转为Map + // 筛选有oldSystemId的数据 + LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); + List esList = esService.list(esWrapper.isNotNull(LawsEnterpriseStandard::getOldSystemId)); + Map esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getOldSystemId, o -> o)); + + // 获取所有企标体系节点并转为Map + String moduleCode = TableNameEnum.ENTERPRISE_STANDARDS.getValue(); + LambdaQueryWrapper treeNodeWrapper = new LambdaQueryWrapper<>(); + treeNodeWrapper.eq(LawsTreeNode::getModuleCode, moduleCode); + treeNodeWrapper.eq(LawsTreeNode::getDelFlag, YesOrNoEnum.NO.getValue()); + List treeNodeList = treeNodeService.list(treeNodeWrapper); + Map nodeIdMap = treeNodeList.stream().collect(Collectors.toMap(LawsTreeNode::getId, o -> o)); + // 构建路径Map + Map pathMap = treeNodeList.stream() + .collect(Collectors.toMap( + node -> buildPathToRoot(node.getId(), nodeIdMap), + o -> o)); + + // 获取数据 + List datalist; + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + @Cleanup + InputStream inputStream = file.getInputStream(); + datalist = ExcelImportUtil.importExcel(inputStream, ESOldStandardSystem.class, params); + // 删除空行 + datalist.removeIf(ESOldStandardSystem::isEmptyRow); + // 只取用企标数据 + // 区分数据 + log.info("获取数据成功,总数据条数:{}", datalist.size()); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + + for (ESOldStandardSystem ss : datalist) { + try { + String bzfl = ss.getBzfl(); + // 根据标准分类找到对应的节点 + LawsTreeNode treeNode = pathMap.get(bzfl); + if (treeNode == null) { + throw new JeroBootException("未找到该节点,节点名称:" + bzfl); + } + // 根据当前数据的id找到对应的企标 + LawsEnterpriseStandard es = esMap.get(ss.getId()); + if (es == null) { + throw new JeroBootException("未找到该企标,标准编号:" + ss.getBzh() + ",标准名称:" + ss.getBzmc()); + } + lawsNodeRelationService.removeByStandardId(es.getId()); + lawsNodeRelationService.addRelation(treeNode.getId(), null, es.getId()); + }catch (Exception e) { + log.error("错误数据:{}", ss.toString()); + ss.setErrorInfo(e.getMessage()); + errImportList.add(ss); + } + } + log.info("企标体系导入成功"); + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + + } + if (!errImportList.isEmpty()) { + log.info("导入失败数据条数:{}", errImportList.size()); + this.exportWithExcel(response, errImportList, "ESStandSystemErrorData.xls"); + } + log.info("企标体系导入结束"); + } + + // 获取父节点的nodeCode + private String getParentNodeCode(String nodeCode) { + if (nodeCode.length() > 3) { + return nodeCode.substring(0, nodeCode.length() - 3); + } else { + return null; // 没有父节点 + } + } + + // 在您的类中添加这个方法 + private String buildPathToRoot(String nodeId, Map nodeIdMap) { + // 获取当前节点 + LawsTreeNode currentNode = nodeIdMap.get(nodeId); + if (currentNode == null) { + return ""; // 或者处理节点不存在的情况 + } + // 检查是否是根节点 + if (currentNode.getParentId() == null || currentNode.getParentId().isEmpty()) { + return currentNode.getNodeName(); // 根节点的情况 + } + // 递归地构建路径 + String parentPath = buildPathToRoot(currentNode.getParentId(), nodeIdMap); + return parentPath + "/" + currentNode.getNodeName(); } @Override