feat: 老法规企标体系关联导入

This commit is contained in:
2023-12-05 14:35:45 +08:00
parent 706757f14b
commit a92e9d1869
3 changed files with 162 additions and 10 deletions
@@ -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;
}
}
@@ -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;
@@ -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<OldSystemImportDTO> errImportList = new ArrayList<>();
@@ -858,7 +862,109 @@ public class OldSystemServiceImpl implements OldSystemService {
@Override
public void importEsStandSystem(MultipartFile file, HttpServletResponse response) {
List<ESOldStandardSystem> 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<LawsEnterpriseStandard> esWrapper = new LambdaQueryWrapper<>();
List<LawsEnterpriseStandard> esList = esService.list(esWrapper.isNotNull(LawsEnterpriseStandard::getOldSystemId));
Map<String, LawsEnterpriseStandard> esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getOldSystemId, o -> o));
// 获取所有企标体系节点并转为Map
String moduleCode = TableNameEnum.ENTERPRISE_STANDARDS.getValue();
LambdaQueryWrapper<LawsTreeNode> treeNodeWrapper = new LambdaQueryWrapper<>();
treeNodeWrapper.eq(LawsTreeNode::getModuleCode, moduleCode);
treeNodeWrapper.eq(LawsTreeNode::getDelFlag, YesOrNoEnum.NO.getValue());
List<LawsTreeNode> treeNodeList = treeNodeService.list(treeNodeWrapper);
Map<String, LawsTreeNode> nodeIdMap = treeNodeList.stream().collect(Collectors.toMap(LawsTreeNode::getId, o -> o));
// 构建路径Map
Map<String, LawsTreeNode> pathMap = treeNodeList.stream()
.collect(Collectors.toMap(
node -> buildPathToRoot(node.getId(), nodeIdMap),
o -> o));
// 获取数据
List<ESOldStandardSystem> 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<String, LawsTreeNode> 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