diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java index 38b41805..f618d5e7 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java @@ -12,6 +12,7 @@ import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.aspect.annotation.Translation; import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.modules.laws.oldSystem.service.OldSystemDepartRelationService; +import com.jero.modules.laws.oldSystem.service.OldSystemService; import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -33,7 +34,10 @@ import java.util.Map; public class OldSystemController { @Resource - private OldSystemDepartRelationService oldSystemService; + private OldSystemService oldSystemService; + + @Resource + private OldSystemDepartRelationService oldSystemDeptRelationService; /** * 通过excel导入数据 @@ -46,11 +50,9 @@ public class OldSystemController { @AutoLog(value = "老法规系统-老部门现部门关系导入") public void importExcel(@ApiParam(value = "要上传的文件", required = true) @RequestParam("file") MultipartFile file, HttpServletResponse response) { - oldSystemService.importData(file, response); + oldSystemDeptRelationService.importDepartRelationData(file, response); } - @Resource - private ILawsEnterpriseStandardService enterpriseStandardService; @PostMapping("/importOldSystemExcel") @AutoLog(value = "老法规系统-老法规企标国标外标数据导入") @@ -60,7 +62,7 @@ public class OldSystemController { @ApiParam(value = "0不导入 1导入企标 2导入国标 3外标", required = true) @RequestParam("type") String type, HttpServletResponse response) { - enterpriseStandardService.importExcelOldSystem(file, type, response); + oldSystemService.importExcelOldSystem(file, type, response); } @PostMapping("/importOldESAuthAllExcel") @@ -69,7 +71,7 @@ public class OldSystemController { @ApiOperationSupport(order = 3) public void importOldESAuthAllExcel(@RequestParam("file") MultipartFile file, HttpServletResponse response) { - enterpriseStandardService.importOldESAuthAllExcel(file, response); + oldSystemService.importOldESAuthAllExcel(file, response); } @PostMapping("/importOldESAuthUserExcel") @@ -78,7 +80,7 @@ public class OldSystemController { @ApiOperationSupport(order = 4) public void importOldESAuthUserExcel(@RequestParam("file") MultipartFile file, HttpServletResponse response) { - enterpriseStandardService.importOldESAuthUserExcel(file, response); + oldSystemService.importOldESAuthUserExcel(file, response); } @PostMapping("/importOldESAuthDeptExcel") @AutoLog(value = "老法规系统-老法规企标部门权限数据导入") @@ -86,7 +88,7 @@ public class OldSystemController { @ApiOperationSupport(order = 5) public void importOldESAuthDeptExcel(@RequestParam("file") MultipartFile file, HttpServletResponse response) { - enterpriseStandardService.importOldESAuthDeptExcel(file, response); + oldSystemService.importOldESAuthDeptExcel(file, response); } @PostMapping("/filterChineseStandardNo") @@ -95,7 +97,7 @@ public class OldSystemController { @ApiOperationSupport(order = 6) public void filterChineseStandardNo(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws IOException { - enterpriseStandardService.filterChineseStandardNo(file, response); + oldSystemService.filterChineseStandardNo(file, response); } @PostMapping("/importFileRelationExcel") @@ -104,7 +106,7 @@ public class OldSystemController { @ApiOperationSupport(order = 7) public void importFileRelationExcel(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws IOException { - enterpriseStandardService.importFileRelationExcel(file, response); + oldSystemService.importFileRelationExcel(file, response); } @PostMapping("/findDuplicateStandardNoData") @@ -113,7 +115,34 @@ public class OldSystemController { @ApiOperationSupport(order = 8) public void findDuplicateStandardNoData(@RequestParam("file") MultipartFile file, HttpServletResponse response) throws IOException { - enterpriseStandardService.findDuplicateStandardNoData(file, response); + oldSystemService.findDuplicateStandardNoData(file, response); } - + + @PostMapping("/importEsStandSystem") + @AutoLog(value = "老法规系统-导入企标体系") + @ApiOperation(value="老法规系统-导入企标体系", notes="老法规系统-导入企标体系", produces = "application/octet-stream") + @ApiOperationSupport(order = 9) + public void importEsStandSystem(@RequestParam("file") MultipartFile file, + HttpServletResponse response) throws IOException { + oldSystemService.importEsStandSystem(file, response); + } + + @PostMapping("/importGbStandSystem") + @AutoLog(value = "老法规系统-导入国标体系") + @ApiOperation(value="老法规系统-导入国标体系", notes="老法规系统-导入国标体系", produces = "application/octet-stream") + @ApiOperationSupport(order = 10) + public void importGbStandSystem(@RequestParam("file") MultipartFile file, + HttpServletResponse response) throws IOException { + oldSystemService.importGbStandSystem(file, response); + } + + @PostMapping("/importFbStandSystem") + @AutoLog(value = "老法规系统-导入外标体系") + @ApiOperation(value="老法规系统-导入外标体系", notes="老法规系统-导入外标体系", produces = "application/octet-stream") + @ApiOperationSupport(order = 11) + public void importFbStandSystem(@RequestParam("file") MultipartFile file, + HttpServletResponse response) throws IOException { + oldSystemService.importFbStandSystem(file, response); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/OldSystemProblem.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/OldSystemProblem.java deleted file mode 100644 index a9d32393..00000000 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/entity/OldSystemProblem.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.jero.modules.laws.oldSystem.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; -import java.util.Date; - -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; -import org.jeecgframework.poi.excel.annotation.Excel; - -/** - * - * @TableName old_system_problem - */ -@TableName(value ="old_system_problem") -@Data -@NoArgsConstructor -@AllArgsConstructor -@Accessors(chain = true) -public class OldSystemProblem implements Serializable { - - /** - * 主键ID - */ - @TableId(type = IdType.ASSIGN_ID) - @ApiModelProperty(value = "主键ID") - private String id; - - /** - * 创建人 - */ - private String createBy; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 更新人 - */ - private String updateBy; - - /** - * 更新时间 - */ - private Date updateTime; - - /** - * 所属部门 - */ - private String orgCode; - - /** - * 问题类型(1老法规国标导入 2老法规企标导入) - */ - @Excel(name = "问题类型", width = 15) - @ApiModelProperty(value = "问题类型") - private String problemType; - - /** - * 问题描述 - */ - @Excel(name = "问题描述", width = 15) - @ApiModelProperty(value = "问题描述") - private String problemDescription; - - /** - * 问题标准号 - */ - @Excel(name = "问题标准号", width = 15) - @ApiModelProperty(value = "问题标准号") - private String problemStandardNo; - - /** - * 最终结果 - */ - @Excel(name = "最终结果", width = 15) - @ApiModelProperty(value = "最终结果") - private String result; - - @TableField(exist = false) - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/mapper/OldSystemProblemMapper.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/mapper/OldSystemProblemMapper.java deleted file mode 100644 index a9652afe..00000000 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/mapper/OldSystemProblemMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.jero.modules.laws.oldSystem.mapper; - -import com.jero.modules.laws.oldSystem.entity.OldSystemProblem; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** -* @author ThinkBook -* @description 针对表【old_system_problem】的数据库操作Mapper -* @createDate 2023-11-10 18:18:36 -* @Entity com.jero.modules.laws.oldSystem.entity.OldSystemProblem -*/ -public interface OldSystemProblemMapper extends BaseMapper { - -} - - - - diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemDepartRelationService.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemDepartRelationService.java index 9fabe47c..4f8fa861 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemDepartRelationService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemDepartRelationService.java @@ -14,5 +14,12 @@ import java.util.Map; */ public interface OldSystemDepartRelationService extends IService { - void importData(MultipartFile file, HttpServletResponse response); + /** + * 导入新老部门关系 + * + * @param file + * @param response + */ + void importDepartRelationData(MultipartFile file, HttpServletResponse response); + } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemProblemService.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemProblemService.java deleted file mode 100644 index f4fc9d99..00000000 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemProblemService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.jero.modules.laws.oldSystem.service; - -import com.jero.modules.laws.oldSystem.entity.OldSystemProblem; -import com.baomidou.mybatisplus.extension.service.IService; - -/** -* @author ThinkBook -* @description 针对表【old_system_problem】的数据库操作Service -* @createDate 2023-11-10 18:18:36 -*/ -public interface OldSystemProblemService extends IService { - -} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemService.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemService.java new file mode 100644 index 00000000..3b8a7f9e --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/OldSystemService.java @@ -0,0 +1,92 @@ +package com.jero.modules.laws.oldSystem.service; + +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author: Mzaxd + * @Date: 2023/12/5 9:48 + */ +public interface OldSystemService { + + /** + * 老法规系统Excel导入 + * + * @param file + * @param response + * @return + */ + void importExcelOldSystem(MultipartFile file, String type, HttpServletResponse response); + + /** + * 老法规企标所有人权限数据导入 + * + * @param file + * @param response + * @return + */ + void importOldESAuthAllExcel(MultipartFile file, HttpServletResponse response); + + /** + * 老法规企标个人权限数据导入 + * + * @param file + * @param response + * @return + */ + void importOldESAuthUserExcel(MultipartFile file, HttpServletResponse response); + + /** + * 老法规企标部门权限数据导入 + * + * @param file + * @param response + * @return + */ + void importOldESAuthDeptExcel(MultipartFile file, HttpServletResponse response); + + /** + * 过滤中文标准号 + * @param file + * @param response + */ + void filterChineseStandardNo(MultipartFile file, HttpServletResponse response) throws IOException; + + /** + * 导入文件关系Excel + * @param file + * @param response + */ + void importFileRelationExcel(MultipartFile file, HttpServletResponse response); + + /** + * 找到标准号重复的数据 + * @param file + * @param response + */ + void findDuplicateStandardNoData(MultipartFile file, HttpServletResponse response); + + /** + * 导入企标体系 + * @param file + * @param response + */ + void importEsStandSystem(MultipartFile file, HttpServletResponse response); + + /** + * 导入国标体系 + * @param file + * @param response + */ + void importGbStandSystem(MultipartFile file, HttpServletResponse response); + + /** + * 导入外标体系 + * @param file + * @param response + */ + void importFbStandSystem(MultipartFile file, HttpServletResponse response); + +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemDepartRelationServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemDepartRelationServiceImpl.java index 28842c68..80e5ffca 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemDepartRelationServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemDepartRelationServiceImpl.java @@ -53,7 +53,7 @@ public class OldSystemDepartRelationServiceImpl extends ServiceImpl errImportList = new ArrayList<>(); ImportParams params = new ImportParams(); diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemProblemServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemProblemServiceImpl.java deleted file mode 100644 index 9ecaf936..00000000 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemProblemServiceImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.jero.modules.laws.oldSystem.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.jero.modules.laws.oldSystem.entity.OldSystemProblem; -import com.jero.modules.laws.oldSystem.service.OldSystemProblemService; -import com.jero.modules.laws.oldSystem.mapper.OldSystemProblemMapper; -import org.springframework.stereotype.Service; - -/** -* @author ThinkBook -* @description 针对表【old_system_problem】的数据库操作Service实现 -* @createDate 2023-11-10 18:18:36 -*/ -@Service -public class OldSystemProblemServiceImpl extends ServiceImpl - implements OldSystemProblemService{ - -} - - - - 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 new file mode 100644 index 00000000..7c553396 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/service/impl/OldSystemServiceImpl.java @@ -0,0 +1,1370 @@ +package com.jero.modules.laws.oldSystem.service.impl; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.jero.common.api.CommonAPI; +import com.jero.common.api.vo.ResultCommon; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.vo.SysDictItemCore; +import com.jero.common.util.MessageUtils; +import com.jero.common.util.MinioUtil; +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.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.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.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.util.StandardSplitUtils; +import com.jero.modules.oss.entity.OSSFile; +import com.jero.modules.oss.service.IOSSFileService; +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 io.minio.errors.MinioException; +import lombok.Cleanup; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Workbook; +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.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * @author: Mzaxd + * @Date: 2023/12/5 9:48 + */ +@Slf4j +@Service +@Transactional(rollbackFor = JeroBootException.class) +public class OldSystemServiceImpl implements OldSystemService { + + @Resource + private LawsEnterpriseStandardMapper esMapper; + + @Resource + private ILawsDomesticStandardService domesticStandardService; + + @Resource + private ExcelUtils excelUtils; + + @Resource + private CommonAPI commonAPI; + + @Resource + private ILawsReplacedStandardService lawsReplacedStandardService; + + @Resource + private OldSystemDepartRelationService oldDeptService; + + @Resource + private ISysDepartService departService; + + @Resource + private ISysUserService sysUserService; + + @Resource + private IOSSFileService ossFileService; + + @Resource + private EnterpriseStandardAuthUserService esAuthUserService; + + @Resource + private EnterpriseStandardAuthDeptService esAuthDeptService; + + @Resource + private ILawsHomeSearchService lawsHomeSearchService; + + @Resource + private ISysDepartService sysDepartService; + + @Resource + private OldSystemDepartRelationService oldSystemDepartRelationService; + + @Resource + private ILawsOverseasStandardService overseasStandardService; + + @Resource + private ILawsEnterpriseStandardService esService; + + @Override + public void importExcelOldSystem(MultipartFile file, String type, 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); + // 获取数据 + List allDatalist = null; + + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + @Cleanup + InputStream inputStream = file.getInputStream(); + allDatalist = ExcelImportUtil.importExcel(inputStream, OldSystemImportDTO.class, params); + // 删除空行 + allDatalist.removeIf(OldSystemImportDTO::isEmptyRow); + log.info("获取数据成功,数据条数:{}", allDatalist.size()); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + } + if (allDatalist == null) { + throw new JeroBootException("导入失败,数据为空"); + } + // 导入企标 + switch (type) { + case "0": + break; + case "1": + // 导入企标 + this.oldSysESImport(allDatalist, errImportList); + break; + case "2": + // 导入国标 + this.oldSysGBImport(allDatalist, errImportList); + break; + case "3": + // 导入外标 + this.oldSysFBImport(allDatalist, errImportList); + + } + if (!errImportList.isEmpty()) { + this.exportWithExcel(response, errImportList, "OldSystemStandardErrorData.xls"); + } + } + + private void oldSysFBImport(List allDatalist, List errImportList) { + List fbDatalist = allDatalist.stream().filter(o -> o.getBzfl().contains("ISO") || + o.getBzfl().contains("引进") || + o.getBzfl().contains("国外")).collect(Collectors.toList()); + log.info("外标相关数据条数:{}", fbDatalist.size()); + + // 过滤字段 根据标准号字段去重 + fbDatalist = fbDatalist.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() + -> new TreeSet<>(Comparator.comparing(OldSystemImportDTO::getBzh))), ArrayList::new)); + log.info("根据标准号去重后的外标相关数据条数:{}", fbDatalist.size()); + + // 找到所有人 并且用 姓名加工号做key + Map allUserMap = sysUserService.list().stream().collect(Collectors.toMap(o -> o.getRealname() + o.getUsername(), o -> o)); + + // 现所有部门 + List curDepartList = departService.list(); + Map> curDeptMap = curDepartList.stream().collect(Collectors.groupingBy(SysDepart::getDepartName)); + + // 部门关系列表 + List list = oldDeptService.list(); + list = list.stream().filter(o -> StrUtil.isNotBlank(o.getOldOrgName())).collect(Collectors.toList()); + Map> oldDeptMap = list.stream().collect(Collectors.groupingBy(OldSystemDepartRelation::getOldOrgName)); + + // 文件关联 + List ossFileList = new ArrayList<>(); + long startTime = System.currentTimeMillis(); + LambdaQueryWrapper userWrapper = new LambdaQueryWrapper<>(); + userWrapper.eq(SysUser::getRealname, "杨永鹏"); + userWrapper.eq(SysUser::getUsername, "077652"); + SysUser defaultUser = sysUserService.getOne(userWrapper); + if (defaultUser == null) { + throw new JeroBootException("未找到默认用户"); + } + // 转换数据 + List fbList = new ArrayList<>(); + for (OldSystemImportDTO dto : fbDatalist) { + try { + LawsOverseasStandard fb = new LawsOverseasStandard(); + + // 先将标准号中的中文横杠替换为英文横杠 + String newBzh = dto.getBzh().replace("—", "-"); + fb.setStandardNumber(newBzh); + String cybzh = dto.getCybzh(); + // 采用标准号为空跳过拆分 + if (StrUtil.isNotBlank(cybzh)) { + // 执行拆分 + Map map = StandardSplitUtils.simpleSplitStandardNumber(newBzh, cybzh); + fb.setStandardClass(map.get(FieldCommon.STANDARD_CLASS)); + fb.setStandardNumberTemp(map.get(FieldCommon.STANDARD_NUMBER_TEMP)); + fb.setYearNumber(map.get(FieldCommon.YEAR_NUMBER)); + } + + fb.setStandardName(dto.getBzmc()); + fb.setStandardEnglishName(dto.getBzywmc()); + + // 发布日期和实施日期入库之前需要校验 为空或者不符合规则的不入库 + String fbrq = dto.getFbrq(); + String ssrq = dto.getSsrq(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + if (StrUtil.isNotBlank(fbrq)) { + if (fbrq.length() == 6) { + fbrq = fbrq + "01"; + } + Date newDate = sdf.parse(fbrq.trim()); + if (newDate != null) { + fb.setReleaseDate(newDate); + } else { + throw new JeroBootException("发布日期格式不正确,标准编号:" + dto.getBzh()); + } + } + if (StrUtil.isNotBlank(ssrq)) { + if (ssrq.length() == 6) { + ssrq = ssrq + "01"; + } + Date newDate = sdf.parse(ssrq.trim()); + if (newDate != null) { + fb.setImplementationDate(newDate); + } else { + throw new JeroBootException("实施日期格式不正确,标准编号:" + dto.getBzh()); + } + } + + String standardState = dto.getBzzt(); + fb.setStandardState(standardState.equals("现行有效") ? "6" : "7"); + // 代替被代替特殊逻辑 + fb.setSubstituteStandardNumber(dto.getTdbzh()); + fb.setReplacedByStandardNumber(dto.getBtdbzh()); + + String excelCountry = dto.getCountry(); + if (StrUtil.isNotBlank(excelCountry)) { + fb.setCountryOrRegion(dto.getCountry()); + } + + // 责任部门暂不导入 + String zrbm = dto.getZrbm(); + if (oldDeptMap.get(zrbm) != null && oldDeptMap.get(zrbm).get(0) != null) { + String curOrgName = oldDeptMap.get(zrbm).get(0).getCurOrgName(); + if (StrUtil.isNotBlank(curOrgName)) { + List departList = curDeptMap.get(curOrgName); + if (departList.size() == 1) { + fb.setResponsibleDepartment(departList.get(0).getId()); + } + } + } + String zrr = dto.getZrr(); + String zrrid = dto.getZrrid(); + if (StrUtil.isNotBlank(zrr) && StrUtil.isNotBlank(zrrid)) { + SysUser sysUser = allUserMap.get(zrr + zrrid); + if (sysUser != null) { + fb.setResponsibleDepartmentUser(sysUser.getId()); + } else { + fb.setResponsibleDepartmentUser(defaultUser.getId()); + } + } + + // 根据文件路径获取文件Id + String originPath = dto.getSclj(); + if (StrUtil.isNotBlank(originPath)) { + String filePath = this.getFilePath(originPath); + if (MinioUtil.doesObjectExist(filePath)) { + // 存入关系表 + OSSFile ossFile = new OSSFile(); + ossFile.setUrl(filePath); + ossFile.setStandardNo(dto.getBzh()); + ossFile.setFileName(FileUtil.getName(filePath)); + ossFile.setStandardFileType("publish_of_original"); + ossFileList.add(ossFile); + } + } + fbList.add(fb); + } catch (Exception e) { + log.error("导入转换外标数据时发生错误:{}", e.getMessage()); + log.error("错误数据:{}", dto.toString()); + dto.setErrorInfo(e.getMessage()); + errImportList.add(dto); + } + } + // 保存数据 + // 1. 首先获取所有现有的国标标准号 + List existingEntities = overseasStandardService.list(); + + // 2. 创建一个Map,用于快速查找是否存在相同的标准号 + Map standardNumberToEntityMap = new HashMap<>(); + for (LawsOverseasStandard existingEntity : existingEntities) { + standardNumberToEntityMap.put(existingEntity.getStandardNumber(), existingEntity); + } + + // 3. 将文件关系列表转为Map,用于快速查找 +// Map> standardNumberToFileMap = ossFileList.stream().collect(Collectors.groupingBy(OSSFile::getStandardNo)); + + // 4. 遍历待保存或更新的列表,设置ID + StringBuilder oldIds = new StringBuilder(); + StringBuilder newIds = new StringBuilder(); + for (LawsOverseasStandard entity : fbList) { + LawsOverseasStandard existingEntity = standardNumberToEntityMap.get(entity.getStandardNumber()); + if (existingEntity != null) { + // 如果存在,则执行更新操作 + // 删除替代 + lawsReplacedStandardService.removeRelation(existingEntity.getStandardNumber(), 1); + // 删除文件关联 + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(OSSFile::getStandardId, existingEntity.getId()); + ossFileService.remove(wrapper); + // 拼接老id + oldIds.append(existingEntity.getId()).append(","); + + entity.setId(existingEntity.getId()); + } + String tdbzh = entity.getSubstituteStandardNumber(); + String btdbzh = entity.getReplacedByStandardNumber(); + // 代替标准号 + if (StringUtils.isNotBlank(tdbzh)) { + lawsReplacedStandardService.addRelation(btdbzh, tdbzh, 1); + } + // 被代替标准号 + if (StringUtils.isNotBlank(btdbzh)) { + List replaceCodeList = Arrays.asList(btdbzh.split(";")); + replaceCodeList.forEach(replaceCode -> { + lawsReplacedStandardService.addRelation(replaceCode, btdbzh, 1); + }); + } + entity.setSubstituteStandardNumber(null); + entity.setReplacedByStandardNumber(null); + // 构建updateWrapper 将其余字段全部设为null + + overseasStandardService.saveOrUpdate(entity); + + String standardId = entity.getId(); + // 保存文件关联 +// List ossFiles = standardNumberToFileMap.get(entity.getStandardNumber()); +// if (ossFiles != null && !ossFiles.isEmpty()) { +// OSSFile ossFile = ossFiles.get(0); +// ossFile.setStandardId(standardId); +// ossFileService.save(ossFile); +// } + } + log.info("老法规外标覆盖导入完成"); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("代码执行时间:" + executionTime + " 毫秒"); + // es中删除数据 +// if (oldIds.length() > 0) { +// oldIds = new StringBuilder(oldIds.substring(0, oldIds.length() - 1)); +// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD, oldIds.toString(), LawsHomeSearchCommon.LAWS_ES_DELETE); +// } +// // 同步es数据库 +// if (newIds.length() > 0) { +// newIds = new StringBuilder(newIds.substring(0, newIds.length() - 1)); +// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD, newIds.toString(), LawsHomeSearchCommon.LAWS_ES_ADD); +// } + } + + @Override + public void importOldESAuthAllExcel(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); + + // 获取数据 + List datalist; + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + @Cleanup + InputStream inputStream = file.getInputStream(); + datalist = ExcelImportUtil.importExcel(inputStream, ESAuthAll.class, params); + // 删除空行 + datalist.removeIf(ESAuthAll::isEmptyRow); + // 只取用企标数据 + // 区分数据 + log.info("获取数据成功,总数据条数:{}", datalist.size()); + datalist = datalist.stream().filter(data -> data.getStandardType().startsWith("企业标准")).collect(Collectors.toList()); + log.info("企标相关数据条数:{}", datalist.size()); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + + // 筛选有oldSystemId的数据 + LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); + List esList = esService.list(esWrapper.isNotNull(LawsEnterpriseStandard::getOldSystemId)); + Map esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getOldSystemId, o -> o)); + + // 遍历dataList 并且构造Update语句 + List updateList = new ArrayList<>(); + for (ESAuthAll data : datalist) { + try { + LawsEnterpriseStandard es = esMap.get(data.getStandardId()); + if (es != null) { + es.setGradeClassification("1"); + updateList.add(es); + } else { + throw new JeroBootException("未找到该企标,标准编号:" + data.getStandardNumber() + ",标准名称:" + data.getStandardName()); + } + } catch (Exception e) { + errImportList.add(data); + } + } + // 批量更新 + esService.updateBatchById(updateList, updateList.size()); + log.info("企标所有人权限导入成功"); + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + } + if (!errImportList.isEmpty()) { + log.info("导入失败数据条数:{}", errImportList.size()); + this.exportWithExcel(response, errImportList, "ESAuthAllErrorData.xls"); + } + log.info("企标所有人权限导入结束"); + } + + @Override + public void importOldESAuthUserExcel(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); + + // 获取数据 + List datalist; + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + @Cleanup + InputStream inputStream = file.getInputStream(); + datalist = ExcelImportUtil.importExcel(inputStream, ESAuthUser.class, params); + // 删除空行 + datalist.removeIf(ESAuthUser::isEmptyRow); + // 只取用企标数据 + // 区分数据 + log.info("获取数据成功,总数据条数:{}", datalist.size()); + // 删选标准分类不为空且是企标的数据 + datalist = datalist.stream().filter(data -> StrUtil.isNotBlank(data.getStandardType())) + .filter(data -> data.getStandardType().startsWith("企业标准")).collect(Collectors.toList()); + log.info("企标相关数据条数:{}", datalist.size()); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + + // 筛选有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> auMap = datalist.stream().collect(Collectors.groupingBy(ESAuthUser::getStandardId)); + List userlist = sysUserService.list(); + Map userMap = userlist.stream().collect(Collectors.toMap(u -> u.getRealname() + u.getUsername(), o -> o)); + + // 构造一个2099-12-31的Date时间 + Calendar calendar = Calendar.getInstance(); + + // 设置日期为2099年12月31日 + calendar.set(Calendar.YEAR, 2099); + calendar.set(Calendar.MONTH, Calendar.DECEMBER); // 12月,注意月份是从0开始的,所以12表示12月 + calendar.set(Calendar.DAY_OF_MONTH, 31); + calendar.set(Calendar.HOUR_OF_DAY, 23); // 设置小时为23(表示23:59:59) + calendar.set(Calendar.MINUTE, 59); // 设置分钟为59 + calendar.set(Calendar.SECOND, 59); // 设置秒钟为59 + + // 获取Date对象 + Date date = calendar.getTime(); + List authUserList = new ArrayList<>(); + // 遍历dataList 并且构造save语句 + for (ESAuthUser au : datalist) { + try { + String oldStandardId = au.getStandardId(); + LawsEnterpriseStandard es = esMap.get(oldStandardId); + if (es == null) { + throw new JeroBootException("未找到该企标,老标准编号:" + au.getStandardNumber() + ",标准名称:" + au.getStandardName()); + } + String standardId = es.getId(); + // 获取用户 + SysUser user = userMap.get(au.getRealName() + au.getWorkNumber()); + if (user == null) { + throw new JeroBootException("未找到该用户,姓名:" + au.getRealName() + ",工号:" + au.getWorkNumber() + "老标准编号:" + au.getStandardNumber()); + } + EnterpriseStandardAuthUser esAu = new EnterpriseStandardAuthUser(); + esAu.setStandardId(standardId); + esAu.setAuthUser(user.getId()); + esAu.setAuthExpireDate(date); + authUserList.add(esAu); + } catch (Exception e) { + au.setErrorInfo(e.getMessage()); + errImportList.add(au); + } + } + esAuthUserService.saveBatch(authUserList, authUserList.size()); + log.info("企标个人权限导入成功,成功条数{}", authUserList.size()); + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + } + if (!errImportList.isEmpty()) { + log.info("导入失败数据条数:{}", errImportList.size()); + this.exportWithExcel(response, errImportList, "ESAuthUserErrorData.xls"); + } + log.info("企标个人权限导入结束"); + } + + @Override + public void importOldESAuthDeptExcel(MultipartFile file, HttpServletResponse response) { + List errImportList = new ArrayList<>(); + // 验证文件是否为压缩格式 + if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { + throw new JeroBootException("文件格式不正确,请上传Excel。"); + } + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setNeedSave(true); + + // 获取数据 + List datalist; + List correctList = new ArrayList<>(); + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + @Cleanup + InputStream inputStream = file.getInputStream(); + datalist = ExcelImportUtil.importExcel(inputStream, ESAuthDept.class, params); + // 删除空行 + datalist.removeIf(ESAuthDept::isEmptyRow); + // 区分数据 + log.info("获取数据成功,总数据条数:{}", datalist.size()); + // 删选标准分类不为空且是企标的数据 + datalist = datalist.stream().filter(data -> StrUtil.isNotBlank(data.getStandardType())) + .filter(data -> data.getStandardType().startsWith("企业标准")).collect(Collectors.toList()); + log.info("企标相关数据条数:{}", datalist.size()); + // 过滤掉新部门为空的数据 + datalist = datalist.stream().filter(dr -> dr.getDeptName() != null && !dr.getDeptName().isEmpty()).collect(Collectors.toList()); + log.info("过滤掉新部门为空的数据后数据条数:{}", datalist.size()); + + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + + // 筛选有oldSystemId的数据 + LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); + List esList = esService.list(esWrapper.isNotNull(LawsEnterpriseStandard::getOldSystemId)); + Map esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getOldSystemId, o -> o)); + + // 获取所有有关联的新部门 + LambdaQueryWrapper sysDeptWrapper = new LambdaQueryWrapper<>(); + sysDeptWrapper.eq(SysDepart::getDelFlag, YesOrNoEnum.NO.getValue()); + sysDeptWrapper.eq(SysDepart::getStatus, 1); + + List drList = oldSystemDepartRelationService.list(); + Map drMap = drList.stream().collect(Collectors.toMap(o -> o.getOldOrgName().trim() + "-" + o.getOldOrgSuperior().trim(), o -> o)); + + for (ESAuthDept ad : datalist) { + try { + LawsEnterpriseStandard es = esMap.get(ad.getStandardId()); + if (es == null) { + throw new JeroBootException("系统中未找到标准编号:" + ad.getStandardNumber()); + } + String oldDeptName = ad.getOldDeptName().trim(); + String oldHigherDeptName = ad.getOldHigherDeptName().trim(); + // 根据老部门名称从关系表中找到新部门名称 + OldSystemDepartRelation oldSystemDepartRelation = drMap.get(oldDeptName + "-" + oldHigherDeptName); + if (oldSystemDepartRelation == null) { + throw new JeroBootException("未找到该部门的现部门名称:" + oldDeptName + ",上级部门名称:" + oldHigherDeptName + ",标准编号:" + ad.getStandardNumber()); + } else { + EnterpriseStandardAuthDept authDept = new EnterpriseStandardAuthDept(); + authDept.setStandardId(es.getId()); + authDept.setAuthDept(oldSystemDepartRelation.getCurOrgId()); + correctList.add(authDept); + } + } catch (Exception e) { + log.error("导入部门对应出现错误:{}", e.getMessage()); + log.error("错误数据:{}", ad.toString()); + ad.setErrorInfo(e.getMessage()); + errImportList.add(ad); + } + } + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + } + // 打印成功数量 + log.info("企标部门权限导入成功,成功条数{}", correctList.size()); + // 批量保存 + esAuthDeptService.saveBatch(correctList, correctList.size()); + if (!errImportList.isEmpty()) { + log.info("导入失败数据条数:{}", errImportList.size()); + this.exportWithExcel(response, errImportList, "ESAuthDeptErrorData.xls"); + } + log.info("企标部门权限导入结束"); + } + + @Override + public void filterChineseStandardNo(MultipartFile file, HttpServletResponse response) throws IOException { + List chineseStandardNo = new ArrayList<>(); + // 验证文件是否为压缩格式 + if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { + throw new JeroBootException("文件格式不正确,请上传Excel。"); + } + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setNeedSave(true); + + // 获取数据 + List datalist = new ArrayList<>(); + List emptyData = new ArrayList<>(); + List chineseData = new ArrayList<>(); + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + params.setSheetNum(1); + try (InputStream newInputStream = file.getInputStream()) { + datalist = ExcelImportUtil.importExcel(newInputStream, OldSystemImportDTO.class, params); + } + + // 空行数据 + emptyData = datalist.stream().filter(OldSystemImportDTO::isEmptyRow).collect(Collectors.toList()); + // 删除空行之后的数据 + datalist.removeIf(OldSystemImportDTO::isEmptyRow); + + datalist = datalist.stream().filter(data -> !this.containsChinese(data.getBzh())).collect(Collectors.toList()); + // 剔除不导入的数据 国家标准/GJB国家军用标准 +// datalist = datalist.stream().filter(data -> !data.getBzfl().equals("国家标准/GJB国家军用标准")).collect(Collectors.toList()); + // 删除政策 文件 之后的数据 + datalist = datalist.stream().filter(data -> !this.containsChinese(data.getBzh())).collect(Collectors.toList()); +//// // 只取用国标数据 +//// datalist = datalist.stream().filter(data -> data.getBzfl().startsWith("国家标准")).collect(Collectors.toList()); +// // 只取用外标数据 + datalist = datalist.stream().filter(data -> data.getBzfl().contains("国外") || + data.getBzfl().contains("ISO") || + data.getBzfl().contains("引进")) + .collect(Collectors.toList()); + + + // 区分数据 + log.info("获取数据成功,总数据条数:{}", datalist.size()); + // 删选标准分类不为空且是企标的数据 + + log.info("企标相关数据条数:{}", datalist.size()); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + } + this.exportWithExcel(response, datalist, "needImportAllData.xls"); + if (false) { + this.exportWithExcel(response, chineseStandardNo, "ChineseStandardNo.xls"); + } + } + + @Override + public void importFileRelationExcel(MultipartFile file, HttpServletResponse response) { + List errImportList = new ArrayList<>(); + + // 验证文件是否为压缩格式 + if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { + throw new JeroBootException("文件格式不正确,请上传Excel。"); + } + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setNeedSave(true); + // 获取数据 + List allDatalist = null; + + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + @Cleanup + InputStream inputStream = file.getInputStream(); + allDatalist = ExcelImportUtil.importExcel(inputStream, OldSystemImportDTO.class, params); + // 删除空行 + allDatalist.removeIf(OldSystemImportDTO::isEmptyRow); + log.info("获取数据成功,数据条数:{}", allDatalist.size()); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + } + if (allDatalist == null) { + throw new JeroBootException("导入失败,数据为空"); + } + + // 查询所有企标 + LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); + esWrapper.eq(LawsEnterpriseStandard::getDelFlag, YesOrNoEnum.NO.getValue()); + List esList = esService.list(esWrapper); + // 查询所有外标 + LambdaQueryWrapper fbWrapper = new LambdaQueryWrapper<>(); + fbWrapper.eq(LawsOverseasStandard::getDelFlag, YesOrNoEnum.NO.getValue()); + List fbList = overseasStandardService.list(fbWrapper); + // 查询所有国标 + LambdaQueryWrapper gbWrapper = new LambdaQueryWrapper<>(); + gbWrapper.eq(LawsDomesticStandard::getDelFlag, YesOrNoEnum.NO.getValue()); + List gbList = domesticStandardService.list(gbWrapper); + + Map standardMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, LawsEnterpriseStandard::getId)); + standardMap.putAll(fbList.stream().collect(Collectors.toMap(LawsOverseasStandard::getStandardNumber, LawsOverseasStandard::getId))); + standardMap.putAll(gbList.stream().collect(Collectors.toMap(LawsDomesticStandard::getStandardNumber, LawsDomesticStandard::getId))); + // 文件关联 + List ossFileList = new ArrayList<>(); + long startTime = System.currentTimeMillis(); + // 转换数据 + for (OldSystemImportDTO dto : allDatalist) { + try { + // 将标准号中的括号删除 + String standardFileType = StandardSplitUtils.getStandardFileTypeByBZH(dto.getBzh()); + String standardNo = StandardSplitUtils.extractStandardNumber(dto.getBzh()); + String standardId = null; + for (String s : standardMap.keySet()) { + if (s.contains(standardNo)) { + standardId = standardMap.get(s); + break; + } + } + if (StrUtil.isBlank(standardId)) { + throw new JeroBootException("未找到该标准,标准编号:" + dto.getBzh()); + } + // 根据文件路径获取文件Id + String originPath = dto.getSclj(); + if (StrUtil.isNotBlank(originPath)) { + String filePath = this.getFilePath(originPath); + if (MinioUtil.doesObjectExist(filePath)) { + // 存入关系表 + OSSFile ossFile = new OSSFile(); + ossFile.setUrl(filePath); + ossFile.setStandardNo(standardNo); + ossFile.setFileName(FileUtil.getName(filePath)); + ossFile.setStandardFileType(standardFileType); + ossFile.setStandardId(standardId); + ossFileList.add(ossFile); + } + } + } catch (Exception e) { + log.error("导入转换外标数据时发生错误:{}", e.getMessage()); + log.error("错误数据:{}", dto.toString()); + dto.setErrorInfo(e.getMessage()); + errImportList.add(dto); + } + } + + for (OSSFile ossfile : ossFileList) { + // 保存文件关联 + ossFileService.save(ossfile); + } + log.info("文件关系覆盖导入完成"); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("代码执行时间:" + executionTime + " 毫秒"); + if (!errImportList.isEmpty()) { + this.exportWithExcel(response, errImportList, "OldSystemStandardErrorData.xls"); + } + } + + @Override + public void findDuplicateStandardNoData(MultipartFile file, HttpServletResponse response) { + List duplicateDataList = new ArrayList<>(); + + // 验证文件是否为压缩格式 + if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { + throw new JeroBootException("文件格式不正确,请上传Excel。"); + } + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setNeedSave(true); + // 获取数据 + List allDatalist = null; + + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + @Cleanup + InputStream inputStream = file.getInputStream(); + allDatalist = ExcelImportUtil.importExcel(inputStream, OldSystemImportDTO.class, params); + // 删除空行 + allDatalist.removeIf(OldSystemImportDTO::isEmptyRow); + log.info("获取数据成功,数据条数:{}", allDatalist.size()); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + } + if (allDatalist == null) { + throw new JeroBootException("导入失败,数据为空"); + } + //找到所欲标准编号重复的数据 + Map> duplicateMap = allDatalist.stream().collect(Collectors.groupingBy(OldSystemImportDTO::getBzh)); + for (String key : duplicateMap.keySet()) { + List list = duplicateMap.get(key); + if (list.size() > 1) { + duplicateDataList.addAll(list); + } + } + // 导出 + this.exportWithExcel(response, duplicateDataList, "DuplicateStandardNoData.xls"); + } + + @Override + public void importEsStandSystem(MultipartFile file, HttpServletResponse response) { + + } + + @Override + public void importGbStandSystem(MultipartFile file, HttpServletResponse response) { + + } + + @Override + public void importFbStandSystem(MultipartFile file, HttpServletResponse response) { + + } + + public boolean containsChinese(String text) { + Pattern pattern = Pattern.compile("[\u4E00-\u9FA5]"); + Matcher matcher = pattern.matcher(text); + return matcher.find(); + } + + public void exportWithExcel(HttpServletResponse response, List dtoList, String fileName) { + try { + // 设置导出参数 + ExportParams exportParams = new ExportParams(null, fileName); // 可以为标题添加更多的配置 + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, dtoList.get(0).getClass(), dtoList); + + // 设置响应头和内容类型 + response.setContentType("application/vnd.ms-excel"); + response.setHeader("Content-Disposition", "attachment; filename=" + fileName); + + // 写出到响应流 + workbook.write(response.getOutputStream()); + workbook.close(); + } catch (Exception e) { + log.error("导出excel异常", e); + throw new JeroBootException(MessageUtils.getMessage(ResultCommon.EXPORT_ERROR), e); + } + } + + private void oldSysGBImport(List allDatalist, List errImportList) { + List gbDatalist = allDatalist.stream().filter(o -> + o.getBzfl().contains("国家标准/") || // “/”是为了避免匹配到“美国国家标准”这个外标 + o.getBzfl().contains("团体标准") || + o.getBzfl().contains("地方标准") || + o.getBzfl().contains("行业标准")).collect(Collectors.toList()); + log.info("国标相关数据条数:{}", gbDatalist.size()); + + // 过滤字段 根据标准号字段去重 + gbDatalist = gbDatalist.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() + -> new TreeSet<>(Comparator.comparing(OldSystemImportDTO::getBzh))), ArrayList::new)); + log.info("根据标准号去重后的国标相关数据条数:{}", gbDatalist.size()); + + // 找到所有人 并且用 姓名加工号做key + Map allUserMap = sysUserService.list().stream().collect(Collectors.toMap(o -> o.getRealname() + o.getUsername(), o -> o)); + + // 现所有部门 + List curDepartList = departService.list(); + Map> curDeptMap = curDepartList.stream().collect(Collectors.groupingBy(SysDepart::getDepartName)); + + // 部门关系列表 + List list = oldDeptService.list(); + list = list.stream().filter(o -> StrUtil.isNotBlank(o.getOldOrgName())).collect(Collectors.toList()); + Map> oldDeptMap = list.stream().collect(Collectors.groupingBy(OldSystemDepartRelation::getOldOrgName)); + + // 文件关联 + List ossFileList = new ArrayList<>(); + long startTime = System.currentTimeMillis(); + // 获取默认用户 + LambdaQueryWrapper userWrapper = new LambdaQueryWrapper<>(); + userWrapper.eq(SysUser::getRealname, "杨永鹏"); + userWrapper.eq(SysUser::getUsername, "077652"); + SysUser defaultUser = sysUserService.getOne(userWrapper); + if (defaultUser == null) { + throw new JeroBootException("未找到默认用户"); + } + // 转换数据 + List gbList = new ArrayList<>(); + for (OldSystemImportDTO dto : gbDatalist) { + try { + LawsDomesticStandard gb = new LawsDomesticStandard(); + + // 先将标准号中的中文横杠替换为英文横杠 + String newBzh = dto.getBzh().replace("—", "-"); + gb.setStandardNumber(newBzh); + String cybzh = dto.getCybzh(); + // 采用标准号为空跳过拆分 + if (StrUtil.isNotBlank(cybzh)) { + // 执行拆分 + Map map = StandardSplitUtils.simpleSplitStandardNumber(newBzh, cybzh); + gb.setStandardClass(map.get(FieldCommon.STANDARD_CLASS)); + gb.setStandardNumberTemp(map.get(FieldCommon.STANDARD_NUMBER_TEMP)); + gb.setYearNumber(map.get(FieldCommon.YEAR_NUMBER)); + } + + gb.setStandardName(dto.getBzmc()); + gb.setStandardEnglishName(dto.getBzywmc()); + + // 发布日期和实施日期入库之前需要校验 为空或者不符合规则的不入库 + String fbrq = dto.getFbrq(); + String ssrq = dto.getSsrq(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + if (StrUtil.isNotBlank(fbrq)) { + if (fbrq.length() == 6) { + fbrq = fbrq + "01"; + } + Date newDate = sdf.parse(fbrq.trim()); + if (newDate != null) { + gb.setReleaseDate(newDate); + } else { + throw new JeroBootException("发布日期格式不正确,标准编号:" + dto.getBzh()); + } + } + if (StrUtil.isNotBlank(ssrq)) { + if (ssrq.length() == 6) { + ssrq = ssrq + "01"; + } + Date newDate = sdf.parse(ssrq.trim()); + if (newDate != null) { + gb.setImplementationDate(newDate); + } else { + throw new JeroBootException("实施日期格式不正确,标准编号:" + dto.getBzh()); + } + } + + String standardState = dto.getBzzt(); + gb.setStandardState(standardState.equals("现行有效") ? "6" : "7"); + // 代替被代替特殊逻辑 + gb.setSubstituteStandardNumber(dto.getTdbzh()); + gb.setReplacedByStandardNumber(dto.getBtdbzh()); + + // 责任部门暂不导入 + String zrbm = dto.getZrbm(); + if (oldDeptMap.get(zrbm) != null && oldDeptMap.get(zrbm).get(0) != null) { + String curOrgName = oldDeptMap.get(zrbm).get(0).getCurOrgName(); + if (StrUtil.isNotBlank(curOrgName)) { + List departList = curDeptMap.get(curOrgName); + if (departList.size() == 1) { + gb.setResponsibleDepartment(departList.get(0).getId()); + } + } + } + String zrr = dto.getZrr(); + String zrrid = dto.getZrrid(); + if (StrUtil.isNotBlank(zrr) && StrUtil.isNotBlank(zrrid)) { + SysUser sysUser = allUserMap.get(zrr + zrrid); + if (sysUser != null) { + gb.setResponsibleDepartmentUser(sysUser.getId()); + } else { + gb.setResponsibleDepartmentUser(defaultUser.getId()); + } + } + + // 根据文件路径获取文件Id + String originPath = dto.getSclj(); + if (StrUtil.isNotBlank(originPath)) { + String filePath = this.getFilePath(originPath); + if (MinioUtil.doesObjectExist(filePath)) { + // 存入关系表 + OSSFile ossFile = new OSSFile(); + ossFile.setUrl(filePath); + ossFile.setStandardNo(dto.getBzh()); + ossFile.setFileName(FileUtil.getName(filePath)); + ossFile.setStandardFileType("publish_of_original"); + ossFileList.add(ossFile); + } + } + gb.setIsAsmsImport("0"); + gbList.add(gb); + } catch (Exception e) { + log.error("导入转换国标数据时发生错误:{}", e.getMessage()); + log.error("错误数据:{}", dto.toString()); + dto.setErrorInfo(e.getMessage()); + errImportList.add(dto); + } + } + // 保存数据 + // 1. 首先获取所有现有的国标标准号 + List existingEntities = domesticStandardService.list(); + + // 2. 创建一个Map,用于快速查找是否存在相同的标准号 + Map standardNumberToEntityMap = new HashMap<>(); + for (LawsDomesticStandard existingEntity : existingEntities) { + standardNumberToEntityMap.put(existingEntity.getStandardNumber(), existingEntity); + } + + // 3. 将文件关系列表转为Map,用于快速查找 + Map> standardNumberToFileMap = ossFileList.stream().collect(Collectors.groupingBy(OSSFile::getStandardNo)); + + // 4. 遍历待保存或更新的列表,设置ID + StringBuilder oldIds = new StringBuilder(); + StringBuilder newIds = new StringBuilder(); + for (LawsDomesticStandard entity : gbList) { + LawsDomesticStandard existingEntity = standardNumberToEntityMap.get(entity.getStandardNumber()); + if (existingEntity != null) { + // 如果存在,则执行更新操作 + // 删除替代 + lawsReplacedStandardService.removeRelation(existingEntity.getStandardNumber(), 1); + // 删除文件关联 + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(OSSFile::getStandardId, existingEntity.getId()); + ossFileService.remove(wrapper); + // 拼接老id + oldIds.append(existingEntity.getId()).append(","); + + entity.setId(existingEntity.getId()); + } + String tdbzh = entity.getSubstituteStandardNumber(); + String btdbzh = entity.getReplacedByStandardNumber(); + // 代替标准号 + if (StringUtils.isNotBlank(tdbzh)) { + lawsReplacedStandardService.addRelation(btdbzh, tdbzh, 1); + } + // 被代替标准号 + if (StringUtils.isNotBlank(btdbzh)) { + List replaceCodeList = Arrays.asList(btdbzh.split(";")); + replaceCodeList.forEach(replaceCode -> { + lawsReplacedStandardService.addRelation(replaceCode, btdbzh, 1); + }); + } + entity.setSubstituteStandardNumber(null); + entity.setReplacedByStandardNumber(null); + // 构建updateWrapper 将其余字段全部设为null + if (existingEntity != null) { + // 如果存在,则执行更新操作 + entity.setIsAsmsImport("0"); + UpdateWrapper updateWrapper = this.getDomesticUpdateWrapper(entity); + domesticStandardService.update(entity, updateWrapper); + } else { + // 如果不存在,则执行保存操作 + domesticStandardService.save(entity); + } + String standardId = entity.getId(); + // 保存文件关联 + List ossFiles = standardNumberToFileMap.get(entity.getStandardNumber()); + if (ossFiles != null && !ossFiles.isEmpty()) { + OSSFile ossFile = ossFiles.get(0); + ossFile.setStandardId(standardId); + ossFileService.save(ossFile); + } + } + log.info("老法规国标覆盖导入完成"); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("代码执行时间:" + executionTime + " 毫秒"); + // es中删除数据 +// if (oldIds.length() > 0) { +// oldIds = new StringBuilder(oldIds.substring(0, oldIds.length() - 1)); +// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD, oldIds.toString(), LawsHomeSearchCommon.LAWS_ES_DELETE); +// } +// // 同步es数据库 +// if (newIds.length() > 0) { +// newIds = new StringBuilder(newIds.substring(0, newIds.length() - 1)); +// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD, newIds.toString(), LawsHomeSearchCommon.LAWS_ES_ADD); +// } + } + + @SneakyThrows + private UpdateWrapper getDomesticUpdateWrapper(LawsDomesticStandard entity) { + // 遍历是实体类的所有字段,如果有值则不拼接update语句,如果没有值则拼接语句 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", entity.getId()); + Field[] fields = entity.getClass().getDeclaredFields(); + // 创建一个不做处理的数组 + List ignoreFields = Arrays.asList("id", + "serialVersionUID", "delFlag", + "createBy", "createTime", "updateBy", "updateTime", "orgCode"); + for (Field field : fields) { + if (!ignoreFields.contains(field.getName())) { + field.setAccessible(true); + String dbColumnName = convertFieldNameToDbColumnName(field.getName()); + if (field.get(entity) == null) { + updateWrapper.set(dbColumnName, null); + } else { + updateWrapper.set(dbColumnName, field.get(entity)); + } + } + } + return updateWrapper; + } + + // 定义一个方法来执行字段名转换 + private String convertFieldNameToDbColumnName(String fieldName) { + StringBuilder dbColumnName = new StringBuilder(); + for (char c : fieldName.toCharArray()) { + if (Character.isUpperCase(c)) { + dbColumnName.append("_").append(Character.toLowerCase(c)); + } else { + dbColumnName.append(c); + } + } + return dbColumnName.toString(); + } + + private void oldSysESImport(List esDatalist, List errImportList) { + log.info("企标相关数据条数:{}", esDatalist.size()); + + // 过滤字段 根据标准号字段去重 +// esDatalist = esDatalist.stream() +// .collect(Collectors.collectingAndThen( +// Collectors.toCollection(() -> new TreeSet<>(Comparator +// .comparing(OldSystemImportDTO::getBzh) +// .thenComparing(dto -> !dto.getBzzt().equals("现行有效")))), // 确保“现行有效”状态的记录优先 +// ArrayList::new)); + + log.info("根据标准号和标准状态去重后的企标相关数据条数:{}", esDatalist.size()); + + long startTime = System.currentTimeMillis(); + // 转换数据 + List esList = new ArrayList<>(); + List listDict = commonAPI.getDictItemAll(); + // 文件关联 + List ossFileList = new ArrayList<>(); + // 导入企标 + for (OldSystemImportDTO dto : esDatalist) { + try { + LawsEnterpriseStandard es = new LawsEnterpriseStandard(); + es.setOldSystemId(dto.getId()); + es.setStandardNumber(dto.getBzh()); + es.setStandardName(dto.getBzmc()); + es.setStandardEnglishName(dto.getBzywmc()); + + // 发布日期和实施日期入库之前需要校验 为空或者不符合规则的不入库 + String fbrq = dto.getFbrq(); + String ssrq = dto.getSsrq(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + if (StrUtil.isNotBlank(fbrq)) { + Date newDate = sdf.parse(fbrq.trim()); + if (newDate != null) { + es.setReleaseDate(newDate); + } else { + throw new JeroBootException("发布日期格式不正确,标准编号:" + dto.getBzh()); + } + } + if (StrUtil.isNotBlank(ssrq)) { + Date newDate = sdf.parse(ssrq.trim()); + if (newDate != null) { + es.setImplementationDate(newDate); + } else { + throw new JeroBootException("实施日期格式不正确,标准编号:" + dto.getBzh()); + } + } + String standardState = dto.getBzzt(); + es.setStandardState(standardState.equals("现行有效") ? "6" : "7"); + es.setGradeClassification(null); + // 代替被代替特殊逻辑 + es.setSubstituteStandardNumber(dto.getTdbzh()); + es.setReplacedByStandardNumber(dto.getBtdbzh()); + + String standardNumber = dto.getBzh(); + // 如果标准号中有错误符号 则需要修正一下 + // 正则表达式用于检测是否存在错误的“-”作为分隔符 + String regex = "([A-Za-z]{1,2})-([A-Za-z]{1,2}) (\\d{4,5}(\\.\\d+)?)-([A-Za-z0-9]+)"; + + // 使用Pattern和Matcher检测是否匹配 + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(standardNumber); + if (matcher.find()) { + // 如果匹配,将第一个“-”替换为“/” + standardNumber = standardNumber.replaceFirst("-", "/"); + es.setStandardNumber(standardNumber); + } + if (StringUtils.isNotBlank(standardNumber)) { + Map map = EnterpriseStandardUtil.splitStandardNumber(standardNumber); + es.setStandardCode(map.get(FieldCommon.ENTERPRISE_STANDARD_CODE)); + es.setNameCode(map.get(FieldCommon.ENTERPRISE_NAME_CODE)); + es.setCategoryCode(map.get(FieldCommon.STANDARD_CATEGORY_CODE)); + es.setStandardNumberTemp(map.get(FieldCommon.STANDARD_NUMBER_TEMP)); + es.setYearNumber(map.get(FieldCommon.YEAR_NUMBER)); + } + + // 翻译 + String standardCode = es.getStandardCode(); + String nameCode = es.getNameCode(); + String categoryCode = es.getCategoryCode(); + if (StringUtils.isNotBlank(standardCode)) { + es.setStandardCode(excelUtils.translateDictValue("enterprise_standard_code", standardCode, listDict)); + } + if (StringUtils.isNotBlank(nameCode)) { + es.setNameCode(excelUtils.translateDictValue("enterprise_name_code", nameCode, listDict)); + } + if (StringUtils.isNotBlank(categoryCode)) { + es.setCategoryCode(excelUtils.translateDictValue("standard_category_code", categoryCode, listDict)); + } + // 根据文件路径获取文件Id + String originPath = dto.getSclj(); + if (StrUtil.isNotBlank(originPath)) { + String filePath = this.getFilePath(originPath); + if (MinioUtil.doesObjectExist(filePath)) { + // 存入关系表 + OSSFile ossFile = new OSSFile(); + ossFile.setUrl(filePath); + ossFile.setStandardNo(dto.getBzh()); + ossFile.setFileName(FileUtil.getName(filePath)); + ossFile.setStandardFileType("publish_of_original"); + ossFileList.add(ossFile); + } + } + esList.add(es); + } catch (Exception e) { + log.error("导入转换企标数据时发生错误:{}", e.getMessage()); + log.error("错误数据:{}", dto.toString()); + errImportList.add(dto); + } + } + // 保存数据 + // 1. 首先获取所有现有的企标标准号 + List existingEntities = esService.list(); + + // 2. 创建一个Map,用于快速查找是否存在相同的标准号 + Map standardNumberToEntityMap = new HashMap<>(); + for (LawsEnterpriseStandard existingEntity : existingEntities) { + standardNumberToEntityMap.put(existingEntity.getStandardNumber(), existingEntity); + } + + // 3. 将文件关系列表转为Map,用于快速查找 + Map> standardNumberToFileMap = ossFileList.stream().collect(Collectors.groupingBy(OSSFile::getStandardNo)); + + // 4. 遍历待保存或更新的列表,设置ID + StringBuilder oldIds = new StringBuilder(); + StringBuilder newIds = new StringBuilder(); + for (LawsEnterpriseStandard entity : esList) { + String curStandardNumber = entity.getStandardNumber(); + LawsEnterpriseStandard existingEntity = standardNumberToEntityMap.get(entity.getStandardNumber()); + if (existingEntity != null) { + // 如果存在执行更新操作 + // 代替 + lawsReplacedStandardService.removeRelation(existingEntity.getStandardNumber(), 1); + // 删除文件关联 + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(OSSFile::getStandardId, existingEntity.getId()); + ossFileService.remove(wrapper); + // 拼接老id + oldIds.append(existingEntity.getId()).append(","); + + entity.setId(existingEntity.getId()); + } + String tdbzh = entity.getSubstituteStandardNumber(); + String btdbzh = entity.getReplacedByStandardNumber(); + // 代替标准号 + if (StringUtils.isNotBlank(tdbzh)) { + lawsReplacedStandardService.addRelation(tdbzh, curStandardNumber, 1); + } + // 被代替标准号 + if (StringUtils.isNotBlank(btdbzh)) { + List replaceCodeList = Arrays.asList(btdbzh.split(";")); + replaceCodeList.forEach(replaceCode -> { + lawsReplacedStandardService.addRelation(curStandardNumber, replaceCode, 1); + }); + } + entity.setSubstituteStandardNumber(null); + entity.setReplacedByStandardNumber(null); + // 保存标准 + esService.saveOrUpdate(entity); + // 保存文件关联 + String standardId = entity.getId(); + // 保存文件关联 + List ossFiles = standardNumberToFileMap.get(entity.getStandardNumber()); + if (ossFiles != null && !ossFiles.isEmpty()) { + OSSFile ossFile = ossFiles.get(0); + ossFile.setStandardId(standardId); + ossFileService.save(ossFile); + } + entity.setId(standardId); + // 拼接新id + newIds.append(standardId).append(","); + } + log.info("老法规企标覆盖导入完成"); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("代码执行时间:" + executionTime + " 毫秒"); + // es中删除数据 +// if (oldIds.length() > 0) { +// oldIds = new StringBuilder(oldIds.substring(0, oldIds.length() - 1)); +// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD, oldIds.toString(), LawsHomeSearchCommon.LAWS_ES_DELETE); +// } +// // 同步es数据库 +// if (newIds.length() > 0) { +// newIds = new StringBuilder(newIds.substring(0, newIds.length() - 1)); +// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD, newIds.toString(), LawsHomeSearchCommon.LAWS_ES_ADD); +// } + } + + /** + * 截取正确的文件路径 + * + * @param originalPath 文件路径 + * @return 文件的InputStream + * @throws MinioException + */ + private String getFilePath(String originalPath) { + // 将所有的反斜杠转换为正斜杠 + String normalizedPath = originalPath.replace('\\', '/'); + + // 检查路径是否以"/Document"或"Document/"开头 + if (normalizedPath.startsWith("/Document/")) { + // 移除开头的"/Document/" + normalizedPath = normalizedPath.substring("/Document/".length()); + } else if (normalizedPath.startsWith("Document/")) { + // 移除开头的"Document/" + normalizedPath = normalizedPath.substring("Document/".length()); + } + return normalizedPath; + } + + + +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java index 34c47c29..50280b03 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java @@ -19,60 +19,4 @@ public interface ILawsEnterpriseStandardService extends IService implements ILawsEnterpriseStandardService, ESSequenceNumberProvider { - @Resource - private LawsEnterpriseStandardMapper esMapper; - - @Resource - private ILawsDomesticStandardService domesticStandardService; - - @Resource - private ExcelUtils excelUtils; - - @Resource - private CommonAPI commonAPI; - - @Resource - private ILawsReplacedStandardService lawsReplacedStandardService; - - @Resource - private OldSystemDepartRelationService oldDeptService; - - @Resource - private ISysDepartService departService; - - @Resource - private ISysUserService sysUserService; - - @Resource - private IOSSFileService ossFileService; - - @Resource - private EnterpriseStandardAuthUserService esAuthUserService; - - @Resource - private EnterpriseStandardAuthDeptService esAuthDeptService; - - @Resource - private ILawsHomeSearchService lawsHomeSearchService; - - @Resource - private ISysDepartService sysDepartService; - - @Resource - private OldSystemDepartRelationService oldSystemDepartRelationService; - - @Resource - private ILawsOverseasStandardService overseasStandardService; - @Override public LawsEnterpriseStandard queryByStandardNumber(String standardNumber) { if (StringUtils.isBlank(standardNumber)) { @@ -146,1210 +41,6 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl 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); - // 获取数据 - List allDatalist = null; - - try { - // 获取当前时间戳(毫秒) - long startTime = System.currentTimeMillis(); - @Cleanup - InputStream inputStream = file.getInputStream(); - allDatalist = ExcelImportUtil.importExcel(inputStream, OldSystemImportDTO.class, params); - // 删除空行 - allDatalist.removeIf(OldSystemImportDTO::isEmptyRow); - log.info("获取数据成功,数据条数:{}", allDatalist.size()); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("数据转换执行时间:" + executionTime + " 毫秒"); - } catch (Exception e) { - log.error("导入失败;{}", e.getMessage()); - } - if (allDatalist == null) { - throw new JeroBootException("导入失败,数据为空"); - } - // 导入企标 - switch (type) { - case "0": - break; - case "1": - // 导入企标 - this.oldSysESImport(allDatalist, errImportList); - break; - case "2": - // 导入国标 - this.oldSysGBImport(allDatalist, errImportList); - break; - case "3": - // 导入外标 - this.oldSysFBImport(allDatalist, errImportList); - - } - if (!errImportList.isEmpty()) { - this.exportWithExcel(response, errImportList, "OldSystemStandardErrorData.xls"); - } - } - - private void oldSysFBImport(List allDatalist, List errImportList) { - List fbDatalist = allDatalist.stream().filter(o -> o.getBzfl().contains("ISO") || - o.getBzfl().contains("引进") || - o.getBzfl().contains("国外")).collect(Collectors.toList()); - log.info("外标相关数据条数:{}", fbDatalist.size()); - - // 过滤字段 根据标准号字段去重 - fbDatalist = fbDatalist.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() - -> new TreeSet<>(Comparator.comparing(OldSystemImportDTO::getBzh))), ArrayList::new)); - log.info("根据标准号去重后的外标相关数据条数:{}", fbDatalist.size()); - - // 找到所有人 并且用 姓名加工号做key - Map allUserMap = sysUserService.list().stream().collect(Collectors.toMap(o -> o.getRealname() + o.getUsername(), o -> o)); - - // 现所有部门 - List curDepartList = departService.list(); - Map> curDeptMap = curDepartList.stream().collect(Collectors.groupingBy(SysDepart::getDepartName)); - - // 部门关系列表 - List list = oldDeptService.list(); - list = list.stream().filter(o -> StrUtil.isNotBlank(o.getOldOrgName())).collect(Collectors.toList()); - Map> oldDeptMap = list.stream().collect(Collectors.groupingBy(OldSystemDepartRelation::getOldOrgName)); - - // 文件关联 - List ossFileList = new ArrayList<>(); - long startTime = System.currentTimeMillis(); - LambdaQueryWrapper userWrapper = new LambdaQueryWrapper<>(); - userWrapper.eq(SysUser::getRealname, "杨永鹏"); - userWrapper.eq(SysUser::getUsername, "077652"); - SysUser defaultUser = sysUserService.getOne(userWrapper); - if (defaultUser == null) { - throw new JeroBootException("未找到默认用户"); - } - // 转换数据 - List fbList = new ArrayList<>(); - for (OldSystemImportDTO dto : fbDatalist) { - try { - LawsOverseasStandard fb = new LawsOverseasStandard(); - - // 先将标准号中的中文横杠替换为英文横杠 - String newBzh = dto.getBzh().replace("—", "-"); - fb.setStandardNumber(newBzh); - String cybzh = dto.getCybzh(); - // 采用标准号为空跳过拆分 - if (StrUtil.isNotBlank(cybzh)) { - // 执行拆分 - Map map = StandardSplitUtils.simpleSplitStandardNumber(newBzh, cybzh); - fb.setStandardClass(map.get(FieldCommon.STANDARD_CLASS)); - fb.setStandardNumberTemp(map.get(FieldCommon.STANDARD_NUMBER_TEMP)); - fb.setYearNumber(map.get(FieldCommon.YEAR_NUMBER)); - } - - fb.setStandardName(dto.getBzmc()); - fb.setStandardEnglishName(dto.getBzywmc()); - - // 发布日期和实施日期入库之前需要校验 为空或者不符合规则的不入库 - String fbrq = dto.getFbrq(); - String ssrq = dto.getSsrq(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - if (StrUtil.isNotBlank(fbrq)) { - if (fbrq.length() == 6) { - fbrq = fbrq + "01"; - } - Date newDate = sdf.parse(fbrq.trim()); - if (newDate != null) { - fb.setReleaseDate(newDate); - } else { - throw new JeroBootException("发布日期格式不正确,标准编号:" + dto.getBzh()); - } - } - if (StrUtil.isNotBlank(ssrq)) { - if (ssrq.length() == 6) { - ssrq = ssrq + "01"; - } - Date newDate = sdf.parse(ssrq.trim()); - if (newDate != null) { - fb.setImplementationDate(newDate); - } else { - throw new JeroBootException("实施日期格式不正确,标准编号:" + dto.getBzh()); - } - } - - String standardState = dto.getBzzt(); - fb.setStandardState(standardState.equals("现行有效") ? "6" : "7"); - // 代替被代替特殊逻辑 - fb.setSubstituteStandardNumber(dto.getTdbzh()); - fb.setReplacedByStandardNumber(dto.getBtdbzh()); - - String excelCountry = dto.getCountry(); - if (StrUtil.isNotBlank(excelCountry)) { - fb.setCountryOrRegion(dto.getCountry()); - } - - // 责任部门暂不导入 - String zrbm = dto.getZrbm(); - if (oldDeptMap.get(zrbm) != null && oldDeptMap.get(zrbm).get(0) != null) { - String curOrgName = oldDeptMap.get(zrbm).get(0).getCurOrgName(); - if (StrUtil.isNotBlank(curOrgName)) { - List departList = curDeptMap.get(curOrgName); - if (departList.size() == 1) { - fb.setResponsibleDepartment(departList.get(0).getId()); - } - } - } - String zrr = dto.getZrr(); - String zrrid = dto.getZrrid(); - if (StrUtil.isNotBlank(zrr) && StrUtil.isNotBlank(zrrid)) { - SysUser sysUser = allUserMap.get(zrr + zrrid); - if (sysUser != null) { - fb.setResponsibleDepartmentUser(sysUser.getId()); - } else { - fb.setResponsibleDepartmentUser(defaultUser.getId()); - } - } - - // 根据文件路径获取文件Id - String originPath = dto.getSclj(); - if (StrUtil.isNotBlank(originPath)) { - String filePath = this.getFilePath(originPath); - if (MinioUtil.doesObjectExist(filePath)) { - // 存入关系表 - OSSFile ossFile = new OSSFile(); - ossFile.setUrl(filePath); - ossFile.setStandardNo(dto.getBzh()); - ossFile.setFileName(FileUtil.getName(filePath)); - ossFile.setStandardFileType("publish_of_original"); - ossFileList.add(ossFile); - } - } - fbList.add(fb); - } catch (Exception e) { - log.error("导入转换外标数据时发生错误:{}", e.getMessage()); - log.error("错误数据:{}", dto.toString()); - dto.setErrorInfo(e.getMessage()); - errImportList.add(dto); - } - } - // 保存数据 - // 1. 首先获取所有现有的国标标准号 - List existingEntities = overseasStandardService.list(); - - // 2. 创建一个Map,用于快速查找是否存在相同的标准号 - Map standardNumberToEntityMap = new HashMap<>(); - for (LawsOverseasStandard existingEntity : existingEntities) { - standardNumberToEntityMap.put(existingEntity.getStandardNumber(), existingEntity); - } - - // 3. 将文件关系列表转为Map,用于快速查找 -// Map> standardNumberToFileMap = ossFileList.stream().collect(Collectors.groupingBy(OSSFile::getStandardNo)); - - // 4. 遍历待保存或更新的列表,设置ID - StringBuilder oldIds = new StringBuilder(); - StringBuilder newIds = new StringBuilder(); - for (LawsOverseasStandard entity : fbList) { - LawsOverseasStandard existingEntity = standardNumberToEntityMap.get(entity.getStandardNumber()); - if (existingEntity != null) { - // 如果存在,则执行更新操作 - // 删除替代 - lawsReplacedStandardService.removeRelation(existingEntity.getStandardNumber(), 1); - // 删除文件关联 - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(OSSFile::getStandardId, existingEntity.getId()); - ossFileService.remove(wrapper); - // 拼接老id - oldIds.append(existingEntity.getId()).append(","); - - entity.setId(existingEntity.getId()); - } - String tdbzh = entity.getSubstituteStandardNumber(); - String btdbzh = entity.getReplacedByStandardNumber(); - // 代替标准号 - if (StringUtils.isNotBlank(tdbzh)) { - lawsReplacedStandardService.addRelation(btdbzh, tdbzh, 1); - } - // 被代替标准号 - if (StringUtils.isNotBlank(btdbzh)) { - List replaceCodeList = Arrays.asList(btdbzh.split(";")); - replaceCodeList.forEach(replaceCode -> { - lawsReplacedStandardService.addRelation(replaceCode, btdbzh, 1); - }); - } - entity.setSubstituteStandardNumber(null); - entity.setReplacedByStandardNumber(null); - // 构建updateWrapper 将其余字段全部设为null - - overseasStandardService.saveOrUpdate(entity); - - String standardId = entity.getId(); - // 保存文件关联 -// List ossFiles = standardNumberToFileMap.get(entity.getStandardNumber()); -// if (ossFiles != null && !ossFiles.isEmpty()) { -// OSSFile ossFile = ossFiles.get(0); -// ossFile.setStandardId(standardId); -// ossFileService.save(ossFile); -// } - } - log.info("老法规外标覆盖导入完成"); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("代码执行时间:" + executionTime + " 毫秒"); - // es中删除数据 -// if (oldIds.length() > 0) { -// oldIds = new StringBuilder(oldIds.substring(0, oldIds.length() - 1)); -// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD, oldIds.toString(), LawsHomeSearchCommon.LAWS_ES_DELETE); -// } -// // 同步es数据库 -// if (newIds.length() > 0) { -// newIds = new StringBuilder(newIds.substring(0, newIds.length() - 1)); -// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_OVERSEAS_STANDARD, newIds.toString(), LawsHomeSearchCommon.LAWS_ES_ADD); -// } - } - - @Override - public void importOldESAuthAllExcel(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); - - // 获取数据 - List datalist; - try { - // 获取当前时间戳(毫秒) - long startTime = System.currentTimeMillis(); - @Cleanup - InputStream inputStream = file.getInputStream(); - datalist = ExcelImportUtil.importExcel(inputStream, ESAuthAll.class, params); - // 删除空行 - datalist.removeIf(ESAuthAll::isEmptyRow); - // 只取用企标数据 - // 区分数据 - log.info("获取数据成功,总数据条数:{}", datalist.size()); - datalist = datalist.stream().filter(data -> data.getStandardType().startsWith("企业标准")).collect(Collectors.toList()); - log.info("企标相关数据条数:{}", datalist.size()); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("数据转换执行时间:" + executionTime + " 毫秒"); - - // 筛选有oldSystemId的数据 - LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); - List esList = this.list(esWrapper.isNotNull(LawsEnterpriseStandard::getOldSystemId)); - Map esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getOldSystemId, o -> o)); - - // 遍历dataList 并且构造Update语句 - List updateList = new ArrayList<>(); - for (ESAuthAll data : datalist) { - try { - LawsEnterpriseStandard es = esMap.get(data.getStandardId()); - if (es != null) { - es.setGradeClassification("1"); - updateList.add(es); - } else { - throw new JeroBootException("未找到该企标,标准编号:" + data.getStandardNumber() + ",标准名称:" + data.getStandardName()); - } - } catch (Exception e) { - errImportList.add(data); - } - } - // 批量更新 - this.updateBatchById(updateList, updateList.size()); - log.info("企标所有人权限导入成功"); - } catch (Exception e) { - log.error("导入失败;{}", e.getMessage()); - } - if (!errImportList.isEmpty()) { - log.info("导入失败数据条数:{}", errImportList.size()); - this.exportWithExcel(response, errImportList, "ESAuthAllErrorData.xls"); - } - log.info("企标所有人权限导入结束"); - } - - @Override - public void importOldESAuthUserExcel(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); - - // 获取数据 - List datalist; - try { - // 获取当前时间戳(毫秒) - long startTime = System.currentTimeMillis(); - @Cleanup - InputStream inputStream = file.getInputStream(); - datalist = ExcelImportUtil.importExcel(inputStream, ESAuthUser.class, params); - // 删除空行 - datalist.removeIf(ESAuthUser::isEmptyRow); - // 只取用企标数据 - // 区分数据 - log.info("获取数据成功,总数据条数:{}", datalist.size()); - // 删选标准分类不为空且是企标的数据 - datalist = datalist.stream().filter(data -> StrUtil.isNotBlank(data.getStandardType())) - .filter(data -> data.getStandardType().startsWith("企业标准")).collect(Collectors.toList()); - log.info("企标相关数据条数:{}", datalist.size()); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("数据转换执行时间:" + executionTime + " 毫秒"); - - // 筛选有oldSystemId的数据 - LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); - List esList = this.list(esWrapper.isNotNull(LawsEnterpriseStandard::getOldSystemId)); - Map esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getOldSystemId, o -> o)); - Map> auMap = datalist.stream().collect(Collectors.groupingBy(ESAuthUser::getStandardId)); - List userlist = sysUserService.list(); - Map userMap = userlist.stream().collect(Collectors.toMap(u -> u.getRealname() + u.getUsername(), o -> o)); - - // 构造一个2099-12-31的Date时间 - Calendar calendar = Calendar.getInstance(); - - // 设置日期为2099年12月31日 - calendar.set(Calendar.YEAR, 2099); - calendar.set(Calendar.MONTH, Calendar.DECEMBER); // 12月,注意月份是从0开始的,所以12表示12月 - calendar.set(Calendar.DAY_OF_MONTH, 31); - calendar.set(Calendar.HOUR_OF_DAY, 23); // 设置小时为23(表示23:59:59) - calendar.set(Calendar.MINUTE, 59); // 设置分钟为59 - calendar.set(Calendar.SECOND, 59); // 设置秒钟为59 - - // 获取Date对象 - Date date = calendar.getTime(); - List authUserList = new ArrayList<>(); - // 遍历dataList 并且构造save语句 - for (ESAuthUser au : datalist) { - try { - String oldStandardId = au.getStandardId(); - LawsEnterpriseStandard es = esMap.get(oldStandardId); - if (es == null) { - throw new JeroBootException("未找到该企标,老标准编号:" + au.getStandardNumber() + ",标准名称:" + au.getStandardName()); - } - String standardId = es.getId(); - // 获取用户 - SysUser user = userMap.get(au.getRealName() + au.getWorkNumber()); - if (user == null) { - throw new JeroBootException("未找到该用户,姓名:" + au.getRealName() + ",工号:" + au.getWorkNumber() + "老标准编号:" + au.getStandardNumber()); - } - EnterpriseStandardAuthUser esAu = new EnterpriseStandardAuthUser(); - esAu.setStandardId(standardId); - esAu.setAuthUser(user.getId()); - esAu.setAuthExpireDate(date); - authUserList.add(esAu); - } catch (Exception e) { - au.setErrorInfo(e.getMessage()); - errImportList.add(au); - } - } - esAuthUserService.saveBatch(authUserList, authUserList.size()); - log.info("企标个人权限导入成功,成功条数{}", authUserList.size()); - } catch (Exception e) { - log.error("导入失败;{}", e.getMessage()); - } - if (!errImportList.isEmpty()) { - log.info("导入失败数据条数:{}", errImportList.size()); - this.exportWithExcel(response, errImportList, "ESAuthUserErrorData.xls"); - } - log.info("企标个人权限导入结束"); - } - - @Override - public void importOldESAuthDeptExcel(MultipartFile file, HttpServletResponse response) { - List errImportList = new ArrayList<>(); - // 验证文件是否为压缩格式 - if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { - throw new JeroBootException("文件格式不正确,请上传Excel。"); - } - ImportParams params = new ImportParams(); - params.setTitleRows(0); - params.setNeedSave(true); - - // 获取数据 - List datalist; - List correctList = new ArrayList<>(); - try { - // 获取当前时间戳(毫秒) - long startTime = System.currentTimeMillis(); - @Cleanup - InputStream inputStream = file.getInputStream(); - datalist = ExcelImportUtil.importExcel(inputStream, ESAuthDept.class, params); - // 删除空行 - datalist.removeIf(ESAuthDept::isEmptyRow); - // 区分数据 - log.info("获取数据成功,总数据条数:{}", datalist.size()); - // 删选标准分类不为空且是企标的数据 - datalist = datalist.stream().filter(data -> StrUtil.isNotBlank(data.getStandardType())) - .filter(data -> data.getStandardType().startsWith("企业标准")).collect(Collectors.toList()); - log.info("企标相关数据条数:{}", datalist.size()); - // 过滤掉新部门为空的数据 - datalist = datalist.stream().filter(dr -> dr.getDeptName() != null && !dr.getDeptName().isEmpty()).collect(Collectors.toList()); - log.info("过滤掉新部门为空的数据后数据条数:{}", datalist.size()); - - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("数据转换执行时间:" + executionTime + " 毫秒"); - - // 筛选有oldSystemId的数据 - LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); - List esList = this.list(esWrapper.isNotNull(LawsEnterpriseStandard::getOldSystemId)); - Map esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getOldSystemId, o -> o)); - - // 获取所有有关联的新部门 - LambdaQueryWrapper sysDeptWrapper = new LambdaQueryWrapper<>(); - sysDeptWrapper.eq(SysDepart::getDelFlag, YesOrNoEnum.NO.getValue()); - sysDeptWrapper.eq(SysDepart::getStatus, 1); - - List drList = oldSystemDepartRelationService.list(); - Map drMap = drList.stream().collect(Collectors.toMap(o -> o.getOldOrgName().trim() + "-" + o.getOldOrgSuperior().trim(), o -> o)); - - for (ESAuthDept ad : datalist) { - try { - LawsEnterpriseStandard es = esMap.get(ad.getStandardId()); - if (es == null) { - throw new JeroBootException("系统中未找到标准编号:" + ad.getStandardNumber()); - } - String oldDeptName = ad.getOldDeptName().trim(); - String oldHigherDeptName = ad.getOldHigherDeptName().trim(); - // 根据老部门名称从关系表中找到新部门名称 - OldSystemDepartRelation oldSystemDepartRelation = drMap.get(oldDeptName + "-" + oldHigherDeptName); - if (oldSystemDepartRelation == null) { - throw new JeroBootException("未找到该部门的现部门名称:" + oldDeptName + ",上级部门名称:" + oldHigherDeptName + ",标准编号:" + ad.getStandardNumber()); - } else { - EnterpriseStandardAuthDept authDept = new EnterpriseStandardAuthDept(); - authDept.setStandardId(es.getId()); - authDept.setAuthDept(oldSystemDepartRelation.getCurOrgId()); - correctList.add(authDept); - } - } catch (Exception e) { - log.error("导入部门对应出现错误:{}", e.getMessage()); - log.error("错误数据:{}", ad.toString()); - ad.setErrorInfo(e.getMessage()); - errImportList.add(ad); - } - } - } catch (Exception e) { - log.error("导入失败;{}", e.getMessage()); - } - // 打印成功数量 - log.info("企标部门权限导入成功,成功条数{}", correctList.size()); - // 批量保存 - esAuthDeptService.saveBatch(correctList, correctList.size()); - if (!errImportList.isEmpty()) { - log.info("导入失败数据条数:{}", errImportList.size()); - this.exportWithExcel(response, errImportList, "ESAuthDeptErrorData.xls"); - } - log.info("企标部门权限导入结束"); - } - - @Override - public void filterChineseStandardNo(MultipartFile file, HttpServletResponse response) throws IOException { - List chineseStandardNo = new ArrayList<>(); - // 验证文件是否为压缩格式 - if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { - throw new JeroBootException("文件格式不正确,请上传Excel。"); - } - ImportParams params = new ImportParams(); - params.setTitleRows(0); - params.setNeedSave(true); - - // 获取数据 - List datalist = new ArrayList<>(); - List emptyData = new ArrayList<>(); - List chineseData = new ArrayList<>(); - try { - // 获取当前时间戳(毫秒) - long startTime = System.currentTimeMillis(); - params.setSheetNum(1); - try (InputStream newInputStream = file.getInputStream()) { - datalist = ExcelImportUtil.importExcel(newInputStream, OldSystemImportDTO.class, params); - } - - // 空行数据 - emptyData = datalist.stream().filter(OldSystemImportDTO::isEmptyRow).collect(Collectors.toList()); - // 删除空行之后的数据 - datalist.removeIf(OldSystemImportDTO::isEmptyRow); - - datalist = datalist.stream().filter(data -> !this.containsChinese(data.getBzh())).collect(Collectors.toList()); - // 剔除不导入的数据 国家标准/GJB国家军用标准 -// datalist = datalist.stream().filter(data -> !data.getBzfl().equals("国家标准/GJB国家军用标准")).collect(Collectors.toList()); - // 删除政策 文件 之后的数据 - datalist = datalist.stream().filter(data -> !this.containsChinese(data.getBzh())).collect(Collectors.toList()); -//// // 只取用国标数据 -//// datalist = datalist.stream().filter(data -> data.getBzfl().startsWith("国家标准")).collect(Collectors.toList()); -// // 只取用外标数据 - datalist = datalist.stream().filter(data -> data.getBzfl().contains("国外") || - data.getBzfl().contains("ISO") || - data.getBzfl().contains("引进")) - .collect(Collectors.toList()); - - - // 区分数据 - log.info("获取数据成功,总数据条数:{}", datalist.size()); - // 删选标准分类不为空且是企标的数据 - - log.info("企标相关数据条数:{}", datalist.size()); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("数据转换执行时间:" + executionTime + " 毫秒"); - } catch (Exception e) { - log.error("导入失败;{}", e.getMessage()); - } - this.exportWithExcel(response, datalist, "needImportAllData.xls"); - if (false) { - this.exportWithExcel(response, chineseStandardNo, "ChineseStandardNo.xls"); - } - } - - @Override - public void importFileRelationExcel(MultipartFile file, HttpServletResponse response) { - List errImportList = new ArrayList<>(); - - // 验证文件是否为压缩格式 - if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { - throw new JeroBootException("文件格式不正确,请上传Excel。"); - } - ImportParams params = new ImportParams(); - params.setTitleRows(0); - params.setNeedSave(true); - // 获取数据 - List allDatalist = null; - - try { - // 获取当前时间戳(毫秒) - long startTime = System.currentTimeMillis(); - @Cleanup - InputStream inputStream = file.getInputStream(); - allDatalist = ExcelImportUtil.importExcel(inputStream, OldSystemImportDTO.class, params); - // 删除空行 - allDatalist.removeIf(OldSystemImportDTO::isEmptyRow); - log.info("获取数据成功,数据条数:{}", allDatalist.size()); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("数据转换执行时间:" + executionTime + " 毫秒"); - } catch (Exception e) { - log.error("导入失败;{}", e.getMessage()); - } - if (allDatalist == null) { - throw new JeroBootException("导入失败,数据为空"); - } - - // 查询所有企标 - LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); - esWrapper.eq(LawsEnterpriseStandard::getDelFlag, YesOrNoEnum.NO.getValue()); - List esList = this.list(esWrapper); - // 查询所有外标 - LambdaQueryWrapper fbWrapper = new LambdaQueryWrapper<>(); - fbWrapper.eq(LawsOverseasStandard::getDelFlag, YesOrNoEnum.NO.getValue()); - List fbList = overseasStandardService.list(fbWrapper); - // 查询所有国标 - LambdaQueryWrapper gbWrapper = new LambdaQueryWrapper<>(); - gbWrapper.eq(LawsDomesticStandard::getDelFlag, YesOrNoEnum.NO.getValue()); - List gbList = domesticStandardService.list(gbWrapper); - - Map standardMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, LawsEnterpriseStandard::getId)); - standardMap.putAll(fbList.stream().collect(Collectors.toMap(LawsOverseasStandard::getStandardNumber, LawsOverseasStandard::getId))); - standardMap.putAll(gbList.stream().collect(Collectors.toMap(LawsDomesticStandard::getStandardNumber, LawsDomesticStandard::getId))); - // 文件关联 - List ossFileList = new ArrayList<>(); - long startTime = System.currentTimeMillis(); - // 转换数据 - for (OldSystemImportDTO dto : allDatalist) { - try { - // 将标准号中的括号删除 - String standardFileType = StandardSplitUtils.getStandardFileTypeByBZH(dto.getBzh()); - String standardNo = StandardSplitUtils.extractStandardNumber(dto.getBzh()); - String standardId = null; - for (String s : standardMap.keySet()) { - if (s.contains(standardNo)) { - standardId = standardMap.get(s); - break; - } - } - if (StrUtil.isBlank(standardId)) { - throw new JeroBootException("未找到该标准,标准编号:" + dto.getBzh()); - } - // 根据文件路径获取文件Id - String originPath = dto.getSclj(); - if (StrUtil.isNotBlank(originPath)) { - String filePath = this.getFilePath(originPath); - if (MinioUtil.doesObjectExist(filePath)) { - // 存入关系表 - OSSFile ossFile = new OSSFile(); - ossFile.setUrl(filePath); - ossFile.setStandardNo(standardNo); - ossFile.setFileName(FileUtil.getName(filePath)); - ossFile.setStandardFileType(standardFileType); - ossFile.setStandardId(standardId); - ossFileList.add(ossFile); - } - } - } catch (Exception e) { - log.error("导入转换外标数据时发生错误:{}", e.getMessage()); - log.error("错误数据:{}", dto.toString()); - dto.setErrorInfo(e.getMessage()); - errImportList.add(dto); - } - } - - for (OSSFile ossfile : ossFileList) { - // 保存文件关联 - ossFileService.save(ossfile); - } - log.info("文件关系覆盖导入完成"); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("代码执行时间:" + executionTime + " 毫秒"); - if (!errImportList.isEmpty()) { - this.exportWithExcel(response, errImportList, "OldSystemStandardErrorData.xls"); - } - } - - @Override - public void findDuplicateStandardNoData(MultipartFile file, HttpServletResponse response) { - List duplicateDataList = new ArrayList<>(); - - // 验证文件是否为压缩格式 - if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { - throw new JeroBootException("文件格式不正确,请上传Excel。"); - } - ImportParams params = new ImportParams(); - params.setTitleRows(0); - params.setNeedSave(true); - // 获取数据 - List allDatalist = null; - - try { - // 获取当前时间戳(毫秒) - long startTime = System.currentTimeMillis(); - @Cleanup - InputStream inputStream = file.getInputStream(); - allDatalist = ExcelImportUtil.importExcel(inputStream, OldSystemImportDTO.class, params); - // 删除空行 - allDatalist.removeIf(OldSystemImportDTO::isEmptyRow); - log.info("获取数据成功,数据条数:{}", allDatalist.size()); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("数据转换执行时间:" + executionTime + " 毫秒"); - } catch (Exception e) { - log.error("导入失败;{}", e.getMessage()); - } - if (allDatalist == null) { - throw new JeroBootException("导入失败,数据为空"); - } - //找到所欲标准编号重复的数据 - Map> duplicateMap = allDatalist.stream().collect(Collectors.groupingBy(OldSystemImportDTO::getBzh)); - for (String key : duplicateMap.keySet()) { - List list = duplicateMap.get(key); - if (list.size() > 1) { - duplicateDataList.addAll(list); - } - } - // 导出 - this.exportWithExcel(response, duplicateDataList, "DuplicateStandardNoData.xls"); - } - - public boolean containsChinese(String text) { - Pattern pattern = Pattern.compile("[\u4E00-\u9FA5]"); - Matcher matcher = pattern.matcher(text); - return matcher.find(); - } - - public void exportWithExcel(HttpServletResponse response, List dtoList, String fileName) { - try { - // 设置导出参数 - ExportParams exportParams = new ExportParams(null, fileName); // 可以为标题添加更多的配置 - Workbook workbook = ExcelExportUtil.exportExcel(exportParams, dtoList.get(0).getClass(), dtoList); - - // 设置响应头和内容类型 - response.setContentType("application/vnd.ms-excel"); - response.setHeader("Content-Disposition", "attachment; filename=" + fileName); - - // 写出到响应流 - workbook.write(response.getOutputStream()); - workbook.close(); - } catch (Exception e) { - log.error("导出excel异常", e); - throw new JeroBootException(MessageUtils.getMessage(ResultCommon.EXPORT_ERROR), e); - } - } - - private void oldSysGBImport(List allDatalist, List errImportList) { - List gbDatalist = allDatalist.stream().filter(o -> - o.getBzfl().contains("国家标准/") || // “/”是为了避免匹配到“美国国家标准”这个外标 - o.getBzfl().contains("团体标准") || - o.getBzfl().contains("地方标准") || - o.getBzfl().contains("行业标准")).collect(Collectors.toList()); - log.info("国标相关数据条数:{}", gbDatalist.size()); - - // 过滤字段 根据标准号字段去重 - gbDatalist = gbDatalist.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() - -> new TreeSet<>(Comparator.comparing(OldSystemImportDTO::getBzh))), ArrayList::new)); - log.info("根据标准号去重后的国标相关数据条数:{}", gbDatalist.size()); - - // 找到所有人 并且用 姓名加工号做key - Map allUserMap = sysUserService.list().stream().collect(Collectors.toMap(o -> o.getRealname() + o.getUsername(), o -> o)); - - // 现所有部门 - List curDepartList = departService.list(); - Map> curDeptMap = curDepartList.stream().collect(Collectors.groupingBy(SysDepart::getDepartName)); - - // 部门关系列表 - List list = oldDeptService.list(); - list = list.stream().filter(o -> StrUtil.isNotBlank(o.getOldOrgName())).collect(Collectors.toList()); - Map> oldDeptMap = list.stream().collect(Collectors.groupingBy(OldSystemDepartRelation::getOldOrgName)); - - // 文件关联 - List ossFileList = new ArrayList<>(); - long startTime = System.currentTimeMillis(); - // 获取默认用户 - LambdaQueryWrapper userWrapper = new LambdaQueryWrapper<>(); - userWrapper.eq(SysUser::getRealname, "杨永鹏"); - userWrapper.eq(SysUser::getUsername, "077652"); - SysUser defaultUser = sysUserService.getOne(userWrapper); - if (defaultUser == null) { - throw new JeroBootException("未找到默认用户"); - } - // 转换数据 - List gbList = new ArrayList<>(); - for (OldSystemImportDTO dto : gbDatalist) { - try { - LawsDomesticStandard gb = new LawsDomesticStandard(); - - // 先将标准号中的中文横杠替换为英文横杠 - String newBzh = dto.getBzh().replace("—", "-"); - gb.setStandardNumber(newBzh); - String cybzh = dto.getCybzh(); - // 采用标准号为空跳过拆分 - if (StrUtil.isNotBlank(cybzh)) { - // 执行拆分 - Map map = StandardSplitUtils.simpleSplitStandardNumber(newBzh, cybzh); - gb.setStandardClass(map.get(FieldCommon.STANDARD_CLASS)); - gb.setStandardNumberTemp(map.get(FieldCommon.STANDARD_NUMBER_TEMP)); - gb.setYearNumber(map.get(FieldCommon.YEAR_NUMBER)); - } - - gb.setStandardName(dto.getBzmc()); - gb.setStandardEnglishName(dto.getBzywmc()); - - // 发布日期和实施日期入库之前需要校验 为空或者不符合规则的不入库 - String fbrq = dto.getFbrq(); - String ssrq = dto.getSsrq(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - if (StrUtil.isNotBlank(fbrq)) { - if (fbrq.length() == 6) { - fbrq = fbrq + "01"; - } - Date newDate = sdf.parse(fbrq.trim()); - if (newDate != null) { - gb.setReleaseDate(newDate); - } else { - throw new JeroBootException("发布日期格式不正确,标准编号:" + dto.getBzh()); - } - } - if (StrUtil.isNotBlank(ssrq)) { - if (ssrq.length() == 6) { - ssrq = ssrq + "01"; - } - Date newDate = sdf.parse(ssrq.trim()); - if (newDate != null) { - gb.setImplementationDate(newDate); - } else { - throw new JeroBootException("实施日期格式不正确,标准编号:" + dto.getBzh()); - } - } - - String standardState = dto.getBzzt(); - gb.setStandardState(standardState.equals("现行有效") ? "6" : "7"); - // 代替被代替特殊逻辑 - gb.setSubstituteStandardNumber(dto.getTdbzh()); - gb.setReplacedByStandardNumber(dto.getBtdbzh()); - - // 责任部门暂不导入 - String zrbm = dto.getZrbm(); - if (oldDeptMap.get(zrbm) != null && oldDeptMap.get(zrbm).get(0) != null) { - String curOrgName = oldDeptMap.get(zrbm).get(0).getCurOrgName(); - if (StrUtil.isNotBlank(curOrgName)) { - List departList = curDeptMap.get(curOrgName); - if (departList.size() == 1) { - gb.setResponsibleDepartment(departList.get(0).getId()); - } - } - } - String zrr = dto.getZrr(); - String zrrid = dto.getZrrid(); - if (StrUtil.isNotBlank(zrr) && StrUtil.isNotBlank(zrrid)) { - SysUser sysUser = allUserMap.get(zrr + zrrid); - if (sysUser != null) { - gb.setResponsibleDepartmentUser(sysUser.getId()); - } else { - gb.setResponsibleDepartmentUser(defaultUser.getId()); - } - } - - // 根据文件路径获取文件Id - String originPath = dto.getSclj(); - if (StrUtil.isNotBlank(originPath)) { - String filePath = this.getFilePath(originPath); - if (MinioUtil.doesObjectExist(filePath)) { - // 存入关系表 - OSSFile ossFile = new OSSFile(); - ossFile.setUrl(filePath); - ossFile.setStandardNo(dto.getBzh()); - ossFile.setFileName(FileUtil.getName(filePath)); - ossFile.setStandardFileType("publish_of_original"); - ossFileList.add(ossFile); - } - } - gb.setIsAsmsImport("0"); - gbList.add(gb); - } catch (Exception e) { - log.error("导入转换国标数据时发生错误:{}", e.getMessage()); - log.error("错误数据:{}", dto.toString()); - dto.setErrorInfo(e.getMessage()); - errImportList.add(dto); - } - } - // 保存数据 - // 1. 首先获取所有现有的国标标准号 - List existingEntities = domesticStandardService.list(); - - // 2. 创建一个Map,用于快速查找是否存在相同的标准号 - Map standardNumberToEntityMap = new HashMap<>(); - for (LawsDomesticStandard existingEntity : existingEntities) { - standardNumberToEntityMap.put(existingEntity.getStandardNumber(), existingEntity); - } - - // 3. 将文件关系列表转为Map,用于快速查找 - Map> standardNumberToFileMap = ossFileList.stream().collect(Collectors.groupingBy(OSSFile::getStandardNo)); - - // 4. 遍历待保存或更新的列表,设置ID - StringBuilder oldIds = new StringBuilder(); - StringBuilder newIds = new StringBuilder(); - for (LawsDomesticStandard entity : gbList) { - LawsDomesticStandard existingEntity = standardNumberToEntityMap.get(entity.getStandardNumber()); - if (existingEntity != null) { - // 如果存在,则执行更新操作 - // 删除替代 - lawsReplacedStandardService.removeRelation(existingEntity.getStandardNumber(), 1); - // 删除文件关联 - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(OSSFile::getStandardId, existingEntity.getId()); - ossFileService.remove(wrapper); - // 拼接老id - oldIds.append(existingEntity.getId()).append(","); - - entity.setId(existingEntity.getId()); - } - String tdbzh = entity.getSubstituteStandardNumber(); - String btdbzh = entity.getReplacedByStandardNumber(); - // 代替标准号 - if (StringUtils.isNotBlank(tdbzh)) { - lawsReplacedStandardService.addRelation(btdbzh, tdbzh, 1); - } - // 被代替标准号 - if (StringUtils.isNotBlank(btdbzh)) { - List replaceCodeList = Arrays.asList(btdbzh.split(";")); - replaceCodeList.forEach(replaceCode -> { - lawsReplacedStandardService.addRelation(replaceCode, btdbzh, 1); - }); - } - entity.setSubstituteStandardNumber(null); - entity.setReplacedByStandardNumber(null); - // 构建updateWrapper 将其余字段全部设为null - if (existingEntity != null) { - // 如果存在,则执行更新操作 - entity.setIsAsmsImport("0"); - UpdateWrapper updateWrapper = this.getDomesticUpdateWrapper(entity); - domesticStandardService.update(entity, updateWrapper); - } else { - // 如果不存在,则执行保存操作 - domesticStandardService.save(entity); - } - String standardId = entity.getId(); - // 保存文件关联 - List ossFiles = standardNumberToFileMap.get(entity.getStandardNumber()); - if (ossFiles != null && !ossFiles.isEmpty()) { - OSSFile ossFile = ossFiles.get(0); - ossFile.setStandardId(standardId); - ossFileService.save(ossFile); - } - } - log.info("老法规国标覆盖导入完成"); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("代码执行时间:" + executionTime + " 毫秒"); - // es中删除数据 -// if (oldIds.length() > 0) { -// oldIds = new StringBuilder(oldIds.substring(0, oldIds.length() - 1)); -// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD, oldIds.toString(), LawsHomeSearchCommon.LAWS_ES_DELETE); -// } -// // 同步es数据库 -// if (newIds.length() > 0) { -// newIds = new StringBuilder(newIds.substring(0, newIds.length() - 1)); -// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD, newIds.toString(), LawsHomeSearchCommon.LAWS_ES_ADD); -// } - } - - @SneakyThrows - private UpdateWrapper getDomesticUpdateWrapper(LawsDomesticStandard entity) { - // 遍历是实体类的所有字段,如果有值则不拼接update语句,如果没有值则拼接语句 - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", entity.getId()); - Field[] fields = entity.getClass().getDeclaredFields(); - // 创建一个不做处理的数组 - List ignoreFields = Arrays.asList("id", - "serialVersionUID", "delFlag", - "createBy", "createTime", "updateBy", "updateTime", "orgCode"); - for (Field field : fields) { - if (!ignoreFields.contains(field.getName())) { - field.setAccessible(true); - String dbColumnName = convertFieldNameToDbColumnName(field.getName()); - if (field.get(entity) == null) { - updateWrapper.set(dbColumnName, null); - } else { - updateWrapper.set(dbColumnName, field.get(entity)); - } - } - } - return updateWrapper; - } - - // 定义一个方法来执行字段名转换 - private String convertFieldNameToDbColumnName(String fieldName) { - StringBuilder dbColumnName = new StringBuilder(); - for (char c : fieldName.toCharArray()) { - if (Character.isUpperCase(c)) { - dbColumnName.append("_").append(Character.toLowerCase(c)); - } else { - dbColumnName.append(c); - } - } - return dbColumnName.toString(); - } - - private void oldSysESImport(List esDatalist, List errImportList) { - log.info("企标相关数据条数:{}", esDatalist.size()); - - // 过滤字段 根据标准号字段去重 -// esDatalist = esDatalist.stream() -// .collect(Collectors.collectingAndThen( -// Collectors.toCollection(() -> new TreeSet<>(Comparator -// .comparing(OldSystemImportDTO::getBzh) -// .thenComparing(dto -> !dto.getBzzt().equals("现行有效")))), // 确保“现行有效”状态的记录优先 -// ArrayList::new)); - - log.info("根据标准号和标准状态去重后的企标相关数据条数:{}", esDatalist.size()); - - long startTime = System.currentTimeMillis(); - // 转换数据 - List esList = new ArrayList<>(); - List listDict = commonAPI.getDictItemAll(); - // 文件关联 - List ossFileList = new ArrayList<>(); - // 导入企标 - for (OldSystemImportDTO dto : esDatalist) { - try { - LawsEnterpriseStandard es = new LawsEnterpriseStandard(); - es.setOldSystemId(dto.getId()); - es.setStandardNumber(dto.getBzh()); - es.setStandardName(dto.getBzmc()); - es.setStandardEnglishName(dto.getBzywmc()); - - // 发布日期和实施日期入库之前需要校验 为空或者不符合规则的不入库 - String fbrq = dto.getFbrq(); - String ssrq = dto.getSsrq(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - if (StrUtil.isNotBlank(fbrq)) { - Date newDate = sdf.parse(fbrq.trim()); - if (newDate != null) { - es.setReleaseDate(newDate); - } else { - throw new JeroBootException("发布日期格式不正确,标准编号:" + dto.getBzh()); - } - } - if (StrUtil.isNotBlank(ssrq)) { - Date newDate = sdf.parse(ssrq.trim()); - if (newDate != null) { - es.setImplementationDate(newDate); - } else { - throw new JeroBootException("实施日期格式不正确,标准编号:" + dto.getBzh()); - } - } - String standardState = dto.getBzzt(); - es.setStandardState(standardState.equals("现行有效") ? "6" : "7"); - es.setGradeClassification(null); - // 代替被代替特殊逻辑 - es.setSubstituteStandardNumber(dto.getTdbzh()); - es.setReplacedByStandardNumber(dto.getBtdbzh()); - - String standardNumber = dto.getBzh(); - // 如果标准号中有错误符号 则需要修正一下 - // 正则表达式用于检测是否存在错误的“-”作为分隔符 - String regex = "([A-Za-z]{1,2})-([A-Za-z]{1,2}) (\\d{4,5}(\\.\\d+)?)-([A-Za-z0-9]+)"; - - // 使用Pattern和Matcher检测是否匹配 - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(standardNumber); - if (matcher.find()) { - // 如果匹配,将第一个“-”替换为“/” - standardNumber = standardNumber.replaceFirst("-", "/"); - es.setStandardNumber(standardNumber); - } - if (StringUtils.isNotBlank(standardNumber)) { - Map map = EnterpriseStandardUtil.splitStandardNumber(standardNumber); - es.setStandardCode(map.get(FieldCommon.ENTERPRISE_STANDARD_CODE)); - es.setNameCode(map.get(FieldCommon.ENTERPRISE_NAME_CODE)); - es.setCategoryCode(map.get(FieldCommon.STANDARD_CATEGORY_CODE)); - es.setStandardNumberTemp(map.get(FieldCommon.STANDARD_NUMBER_TEMP)); - es.setYearNumber(map.get(FieldCommon.YEAR_NUMBER)); - } - - // 翻译 - String standardCode = es.getStandardCode(); - String nameCode = es.getNameCode(); - String categoryCode = es.getCategoryCode(); - if (StringUtils.isNotBlank(standardCode)) { - es.setStandardCode(excelUtils.translateDictValue("enterprise_standard_code", standardCode, listDict)); - } - if (StringUtils.isNotBlank(nameCode)) { - es.setNameCode(excelUtils.translateDictValue("enterprise_name_code", nameCode, listDict)); - } - if (StringUtils.isNotBlank(categoryCode)) { - es.setCategoryCode(excelUtils.translateDictValue("standard_category_code", categoryCode, listDict)); - } - // 根据文件路径获取文件Id - String originPath = dto.getSclj(); - if (StrUtil.isNotBlank(originPath)) { - String filePath = this.getFilePath(originPath); - if (MinioUtil.doesObjectExist(filePath)) { - // 存入关系表 - OSSFile ossFile = new OSSFile(); - ossFile.setUrl(filePath); - ossFile.setStandardNo(dto.getBzh()); - ossFile.setFileName(FileUtil.getName(filePath)); - ossFile.setStandardFileType("publish_of_original"); - ossFileList.add(ossFile); - } - } - esList.add(es); - } catch (Exception e) { - log.error("导入转换企标数据时发生错误:{}", e.getMessage()); - log.error("错误数据:{}", dto.toString()); - errImportList.add(dto); - } - } - // 保存数据 - // 1. 首先获取所有现有的企标标准号 - List existingEntities = this.list(); - - // 2. 创建一个Map,用于快速查找是否存在相同的标准号 - Map standardNumberToEntityMap = new HashMap<>(); - for (LawsEnterpriseStandard existingEntity : existingEntities) { - standardNumberToEntityMap.put(existingEntity.getStandardNumber(), existingEntity); - } - - // 3. 将文件关系列表转为Map,用于快速查找 - Map> standardNumberToFileMap = ossFileList.stream().collect(Collectors.groupingBy(OSSFile::getStandardNo)); - - // 4. 遍历待保存或更新的列表,设置ID - StringBuilder oldIds = new StringBuilder(); - StringBuilder newIds = new StringBuilder(); - for (LawsEnterpriseStandard entity : esList) { - String curStandardNumber = entity.getStandardNumber(); - LawsEnterpriseStandard existingEntity = standardNumberToEntityMap.get(entity.getStandardNumber()); - if (existingEntity != null) { - // 如果存在执行更新操作 - // 代替 - lawsReplacedStandardService.removeRelation(existingEntity.getStandardNumber(), 1); - // 删除文件关联 - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(OSSFile::getStandardId, existingEntity.getId()); - ossFileService.remove(wrapper); - // 拼接老id - oldIds.append(existingEntity.getId()).append(","); - - entity.setId(existingEntity.getId()); - } - String tdbzh = entity.getSubstituteStandardNumber(); - String btdbzh = entity.getReplacedByStandardNumber(); - // 代替标准号 - if (StringUtils.isNotBlank(tdbzh)) { - lawsReplacedStandardService.addRelation(tdbzh, curStandardNumber, 1); - } - // 被代替标准号 - if (StringUtils.isNotBlank(btdbzh)) { - List replaceCodeList = Arrays.asList(btdbzh.split(";")); - replaceCodeList.forEach(replaceCode -> { - lawsReplacedStandardService.addRelation(curStandardNumber, replaceCode, 1); - }); - } - entity.setSubstituteStandardNumber(null); - entity.setReplacedByStandardNumber(null); - // 保存标准 - saveOrUpdate(entity); - // 保存文件关联 - String standardId = entity.getId(); - // 保存文件关联 - List ossFiles = standardNumberToFileMap.get(entity.getStandardNumber()); - if (ossFiles != null && !ossFiles.isEmpty()) { - OSSFile ossFile = ossFiles.get(0); - ossFile.setStandardId(standardId); - ossFileService.save(ossFile); - } - entity.setId(standardId); - // 拼接新id - newIds.append(standardId).append(","); - } - log.info("老法规企标覆盖导入完成"); - // 获取当前时间戳(毫秒) - long endTime = System.currentTimeMillis(); - // 计算执行时间(毫秒) - long executionTime = endTime - startTime; - log.info("代码执行时间:" + executionTime + " 毫秒"); - // es中删除数据 -// if (oldIds.length() > 0) { -// oldIds = new StringBuilder(oldIds.substring(0, oldIds.length() - 1)); -// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD, oldIds.toString(), LawsHomeSearchCommon.LAWS_ES_DELETE); -// } -// // 同步es数据库 -// if (newIds.length() > 0) { -// newIds = new StringBuilder(newIds.substring(0, newIds.length() - 1)); -// lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD, newIds.toString(), LawsHomeSearchCommon.LAWS_ES_ADD); -// } - } - @Override public List getSequenceNumbers(String esCodeDictValue, String esNameCodeDictValue, String categoryCodeDictValue) { // 已经存在的标准 @@ -1363,27 +54,7 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl