Browse Source

实现知识库管理-更改知识库信息查询接口,修复查询父级名称的bug

lijie 3 years ago
parent
commit
e38ade2fc9

+ 5 - 1
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ExcelUtils.java

@@ -29,7 +29,11 @@ public class ExcelUtils {
                 String val = cell.getStringCellValue();
                 return val == null ? null : val.trim();
             } else if (cellType == CellType.NUMERIC) {
-                return cell.getNumericCellValue() + "";
+                String ss = cell.getNumericCellValue() + "";
+                if (ss.endsWith(".0")){
+                    return ss.substring(0,ss.length()-2);
+                }
+                return ss;
             }
         } else if ("integer".equalsIgnoreCase(type)) {
             if (cellType == CellType.STRING) {

+ 371 - 4
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/dic/ImportKnowledgeForEdit.java

@@ -62,14 +62,381 @@ public class ImportKnowledgeForEdit {
 //        initCityLocation(classes,"cityLocation","省市区编号");
 //        writeFuncSqlToFile(classes, "cityLocation");
 //        classes.clear();
-        // 气候分区
-        initCityLocation(classes,"cityLocation","气候分区");
-        writeFuncSqlToFile(classes, "cityLocation");
+//        // 气候分区
+//        initClimaticDivision(classes,"climaticDivision","气候分区");
+//        writeFuncSqlToFile(classes, "climaticDivision");
+//        classes.clear();
+//        // 信息点编码词汇
+//        initFuncidCodeVocabulary(classes,"funcidCodeVocabulary","Sheet1");
+//        writeFuncSqlToFile(classes, "funcidCodeVocabulary");
+//        classes.clear();
+//        // 地理分区
+//        initGeographicalDivision(classes,"geographicalDivision","地理分区");
+//        writeFuncSqlToFile(classes, "geographicalDivision");
+//        classes.clear();
+        // 城市发展水平
+        initCityDevelopmentLevel(classes,"cityDevelopmentLevel","城市发展水平");
+        writeFuncSqlToFile(classes, "cityDevelopmentLevel");
         classes.clear();
 
+
+    }
+
+    private void initCityDevelopmentLevel(List<RwdeditRefTypeInfosModel> models, String refKey, String sheetName) throws IOException {
+        String file = basepath + "/附表14-地域性信息表.xlsx";
+
+        FileInputStream inputStream = new FileInputStream(file);
+        Workbook workbook = new XSSFWorkbook(inputStream);
+        Sheet sheet = workbook.getSheet(sheetName);
+
+        // 行号从0开始, 从第2行开始读数据
+        int startRowNum = 3;
+        int lastRowNum = sheet.getLastRowNum();
+        Set<String> systemCodes = new HashSet<>();
+        Set<String> majorCodes = new HashSet<>();
+        Set<String> equipCodes = new HashSet<>();
+        Set<String> componentCodes = new HashSet<>();
+        CacheModel cache = new CacheModel();
+        for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+            Row row = sheet.getRow(rowIndex);
+            if (row == null) {
+                log.info("row[{}] is null", rowIndex);
+                continue;
+            }
+            // 0专业, 3系统编码, 5系统名称, 6设备编码, 8设备名称
+            CacheModel target = new CacheModel();
+            target.majorName = (String) ExcelUtils.parseCell(row.getCell(1), "string");// 一级名称
+            target.majorCode = (String) ExcelUtils.parseCell(row.getCell(2), "string");// 一级编码
+            target.systemName = (String) ExcelUtils.parseCell(row.getCell(3), "string");//二级名称
+            target.systemCode = (String) ExcelUtils.parseCell(row.getCell(4), "string");//二级编码
+            target.equipName = (String) ExcelUtils.parseCell(row.getCell(5), "string");//三级名称
+            target.equipCode = (String) ExcelUtils.parseCell(row.getCell(6), "string");//三级编码
+            target.componentName = (String) ExcelUtils.parseCell(row.getCell(7), "string");//二级名称
+            target.componentCode = (String) ExcelUtils.parseCell(row.getCell(8), "string");//二级编码
+            String commentsOnForm = (String) ExcelUtils.parseCell(row.getCell(9), "string");//备注
+
+            // 专业不为空
+            if (target.majorCode != null) {
+                cache.majorCode = target.majorCode;
+                cache.majorName = target.majorName;
+                cache.systemCode = null;
+                cache.systemName = null;
+                cache.equipCode = null;
+                cache.equipName = null;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.majorCode = cache.majorCode;
+                target.majorName = cache.majorName;
+            }
+            // 系统不为空
+            if (target.systemCode != null) {
+                cache.systemCode = target.systemCode;
+                cache.systemName = target.systemName;
+                cache.equipCode = null;
+                cache.equipName = null;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.systemCode = cache.systemCode;
+                target.systemName = cache.systemName;
+            }
+            // 三级不为空
+            if (target.equipCode != null) {
+                cache.equipCode = target.equipCode;
+                cache.equipName = target.equipName;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.equipCode = cache.equipCode;
+                target.equipName = cache.equipName;
+            }
+            // 四级
+            if (target.componentCode != null) {}
+
+            // 判断专业是否存在
+            if (!majorCodes.contains(target.majorCode)
+                    && StringUtils.isNotBlank(target.majorCode)
+                    && StringUtils.isNotBlank(target.majorName)) {
+                RwdeditRefTypeInfosModel major = new RwdeditRefTypeInfosModel();
+                major.setRefKey(refKey);
+                major.setCode(target.majorCode);
+                major.setName(target.majorName);
+                major.setParentCode("-9999");
+                major.setCreateUser(CREATE_USER_ID);
+                major.setUpdateUser(UPDATE_USER_ID);
+                if (StringUtils.isBlank(target.systemCode)
+                        && StringUtils.isBlank(target.equipCode)
+                        && StringUtils.isBlank(target.componentCode)
+                        && StringUtils.isNotBlank(commentsOnForm)){
+                    major.setDataSource(objectMapper.createObjectNode().put("commentsOnForm",commentsOnForm));
+                }
+                models.add(major);
+                majorCodes.add(target.majorCode);
+            }
+
+            // 判断系统是否存在
+            if (!systemCodes.contains(target.systemCode)
+                    && StringUtils.isNotBlank(target.systemCode)
+                    && StringUtils.isNotBlank(target.systemName)) {
+                RwdeditRefTypeInfosModel system = new RwdeditRefTypeInfosModel();
+                system.setRefKey(refKey);
+                system.setCode(target.systemCode);
+                system.setName(target.systemName);
+                system.setParentCode(target.majorCode);
+                if (StringUtils.isBlank(target.equipCode)
+                        && StringUtils.isBlank(target.componentCode)
+                        && StringUtils.isNotBlank(commentsOnForm)){
+                    system.setDataSource(objectMapper.createObjectNode().put("commentsOnForm",commentsOnForm));
+                }
+                system.setCreateUser(CREATE_USER_ID);
+                system.setUpdateUser(UPDATE_USER_ID);
+                models.add(system);
+                systemCodes.add(target.systemCode);
+            }
+            // 判断系统是否存在
+            if (!equipCodes.contains(target.equipCode)
+                    && StringUtils.isNotBlank(target.equipCode)
+                    && StringUtils.isNotBlank(target.equipName)) {
+                RwdeditRefTypeInfosModel system = new RwdeditRefTypeInfosModel();
+                system.setRefKey(refKey);
+                system.setCode(target.equipCode);
+                system.setName(target.equipName);
+                system.setParentCode(target.systemCode);
+                if (StringUtils.isBlank(target.componentCode)
+                        && StringUtils.isNotBlank(commentsOnForm)){
+                    system.setDataSource(objectMapper.createObjectNode().put("commentsOnForm",commentsOnForm));
+                }
+                system.setCreateUser(CREATE_USER_ID);
+                system.setUpdateUser(UPDATE_USER_ID);
+                models.add(system);
+                equipCodes.add(target.equipCode);
+            }
+            // 判断系统是否存在
+            if (!componentCodes.contains(target.componentCode)
+                    && StringUtils.isNotBlank(target.componentCode)
+                    && StringUtils.isNotBlank(target.componentName)) {
+                RwdeditRefTypeInfosModel system = new RwdeditRefTypeInfosModel();
+                system.setRefKey(refKey);
+                system.setCode(target.componentCode);
+                system.setName(target.componentName);
+                system.setParentCode(target.equipCode);
+                if (StringUtils.isNotBlank(commentsOnForm)){
+                    system.setDataSource(objectMapper.createObjectNode().put("commentsOnForm",commentsOnForm));
+                }
+                system.setCreateUser(CREATE_USER_ID);
+                system.setUpdateUser(UPDATE_USER_ID);
+                models.add(system);
+                componentCodes.add(target.componentCode);
+            }
+        }
+
+
+    }
+
+    private void initGeographicalDivision(List<RwdeditRefTypeInfosModel> models, String refKey, String sheetName) throws IOException {
+        String file = basepath + "/附表14-地域性信息表.xlsx";
+
+        FileInputStream inputStream = new FileInputStream(file);
+        Workbook workbook = new XSSFWorkbook(inputStream);
+        Sheet sheet = workbook.getSheet(sheetName);
+
+        // 行号从0开始, 从第2行开始读数据
+        int startRowNum = 2;
+        int lastRowNum = sheet.getLastRowNum();
+        Set<String> systemCodes = new HashSet<>();
+        Set<String> majorCodes = new HashSet<>();
+        CacheModel cache = new CacheModel();
+        for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+            Row row = sheet.getRow(rowIndex);
+            if (row == null) {
+                log.info("row[{}] is null", rowIndex);
+                continue;
+            }
+            // 0专业, 3系统编码, 5系统名称, 6设备编码, 8设备名称
+            CacheModel target = new CacheModel();
+            target.majorName = (String) ExcelUtils.parseCell(row.getCell(2), "string");// 名称
+            target.majorCode = (String) ExcelUtils.parseCell(row.getCell(1), "string");// 编码
+            target.systemName = (String) ExcelUtils.parseCell(row.getCell(4), "string");//名称
+            target.systemCode = (String) ExcelUtils.parseCell(row.getCell(3), "string");//编码
+            String inclusion = (String) ExcelUtils.parseCell(row.getCell(5), "string");//包含
+
+            // 专业不为空
+            if (target.majorCode != null) {
+                cache.majorCode = target.majorCode;
+                cache.majorName = target.majorName;
+                cache.systemCode = null;
+                cache.systemName = null;
+                cache.equipCode = null;
+                cache.equipName = null;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.majorCode = cache.majorCode;
+                target.majorName = cache.majorName;
+            }
+            // 系统不为空
+            if (target.systemCode != null) {}
+
+            // 判断专业是否存在
+            if (!majorCodes.contains(target.majorCode)) {
+                RwdeditRefTypeInfosModel major = new RwdeditRefTypeInfosModel();
+                major.setRefKey(refKey);
+                major.setCode(target.majorCode);
+                major.setName(target.majorName);
+                major.setParentCode("-9999");
+                major.setCreateUser(CREATE_USER_ID);
+                major.setUpdateUser(UPDATE_USER_ID);
+                if (StringUtils.isBlank(target.systemCode) && StringUtils.isNotBlank(inclusion)){
+                    major.setDataSource(objectMapper.createObjectNode().put("inclusion",inclusion));
+                }
+                models.add(major);
+                majorCodes.add(target.majorCode);
+            }
+
+            // 判断系统是否存在
+            if (!systemCodes.contains(target.systemCode) && StringUtils.isNotBlank(target.systemCode)) {
+                RwdeditRefTypeInfosModel system = new RwdeditRefTypeInfosModel();
+                system.setRefKey(refKey);
+                system.setCode(target.systemCode);
+                system.setName(target.systemName);
+                system.setParentCode(target.majorCode);
+                system.setDataSource(objectMapper.createObjectNode().put("inclusion",inclusion));
+                system.setCreateUser(CREATE_USER_ID);
+                system.setUpdateUser(UPDATE_USER_ID);
+                models.add(system);
+                systemCodes.add(target.systemCode);
+            }
+        }
+
+
+    }
+
+
+    private void initFuncidCodeVocabulary(List<RwdeditRefTypeInfosModel> models, String refKey, String sheetName) throws IOException {
+        String file = basepath + "/附表4-信息点编码词汇表.xlsx";
+
+        FileInputStream inputStream = new FileInputStream(file);
+        Workbook workbook = new XSSFWorkbook(inputStream);
+        Sheet sheet = workbook.getSheet(sheetName);
+
+        // 行号从0开始, 从第2行开始读数据
+        int startRowNum = 2;
+        int lastRowNum = sheet.getLastRowNum();
+        Set<String> codes = new HashSet<>();
+        for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+            Row row = sheet.getRow(rowIndex);
+            if (row == null) {
+                log.info("row[{}] is null", rowIndex);
+                continue;
+            }
+            String chineseWord = (String) ExcelUtils.parseCell(row.getCell(0), "string");//中文词汇
+            String code = (String) ExcelUtils.parseCell(row.getCell(1), "string");// 名称原文
+            String name = (String) ExcelUtils.parseCell(row.getCell(2), "string");// 名称缩写
+            if (codes.contains(code)){
+                log.info("code[{}] is exist", code);
+                continue;
+            }
+            if (StringUtils.isBlank(code) || StringUtils.isBlank(name)){
+                log.info("code[{}] or name[{}] is null", code,name);
+                continue;
+            }
+            codes.add(code);
+            RwdeditRefTypeInfosModel major = new RwdeditRefTypeInfosModel();
+            major.setRefKey(refKey);
+            major.setCode(code);
+            major.setName(name);
+            major.setParentCode("-9999");
+            major.setCreateUser(CREATE_USER_ID);
+            major.setUpdateUser(UPDATE_USER_ID);
+            if (StringUtils.isNotBlank(chineseWord)){
+                major.setDataSource(objectMapper.createObjectNode().put("chineseWord",chineseWord));
+            }
+            models.add(major);
+        }
+
+
+    }
+
+    private void initClimaticDivision(List<RwdeditRefTypeInfosModel> models, String refKey, String sheetName) throws IOException {
+        String file = basepath + "/附表14-地域性信息表.xlsx";
+
+        FileInputStream inputStream = new FileInputStream(file);
+        Workbook workbook = new XSSFWorkbook(inputStream);
+        Sheet sheet = workbook.getSheet(sheetName);
+
+        // 行号从0开始, 从第2行开始读数据
+        int startRowNum = 3;
+        int lastRowNum = sheet.getLastRowNum();
+        Set<String> systemCodes = new HashSet<>();
+        Set<String> majorCodes = new HashSet<>();
+        Set<String> equipmentCodes = new HashSet<>();
+        CacheModel cache = new CacheModel();
+        for (int rowIndex = startRowNum; rowIndex <= lastRowNum; rowIndex++) {
+            Row row = sheet.getRow(rowIndex);
+            if (row == null) {
+                log.info("row[{}] is null", rowIndex);
+                continue;
+            }
+            // 0专业, 3系统编码, 5系统名称, 6设备编码, 8设备名称
+            CacheModel target = new CacheModel();
+            target.majorName = (String) ExcelUtils.parseCell(row.getCell(1), "string");// 名称
+            target.majorCode = (String) ExcelUtils.parseCell(row.getCell(2), "string");// 编码
+            target.systemName = (String) ExcelUtils.parseCell(row.getCell(3), "string");//名称
+            target.systemCode = (String) ExcelUtils.parseCell(row.getCell(4), "string");//编码
+            String describe = (String) ExcelUtils.parseCell(row.getCell(5), "string");//分区依据(说明)
+
+            // 专业不为空
+            if (target.majorCode != null) {
+                cache.majorCode = target.majorCode;
+                cache.majorName = target.majorName;
+                cache.systemCode = null;
+                cache.systemName = null;
+                cache.equipCode = null;
+                cache.equipName = null;
+                cache.componentCode = null;
+                cache.componentName = null;
+            } else {
+                target.majorCode = cache.majorCode;
+                target.majorName = cache.majorName;
+            }
+            // 系统不为空
+            if (target.systemCode != null) {}
+
+            // 判断专业是否存在
+            if (!majorCodes.contains(target.majorCode)) {
+                RwdeditRefTypeInfosModel major = new RwdeditRefTypeInfosModel();
+                major.setRefKey(refKey);
+                major.setCode(target.majorCode);
+                major.setName(target.majorName);
+                major.setParentCode("-9999");
+                major.setCreateUser(CREATE_USER_ID);
+                major.setUpdateUser(UPDATE_USER_ID);
+                if (StringUtils.isBlank(target.systemCode) && StringUtils.isNotBlank(describe)){
+                    major.setDataSource(objectMapper.createObjectNode().put("zoningBasis",describe));
+                }
+                models.add(major);
+                majorCodes.add(target.majorCode);
+            }
+
+            // 判断系统是否存在
+            if (!systemCodes.contains(target.systemCode) && StringUtils.isNotBlank(target.systemCode)) {
+                RwdeditRefTypeInfosModel system = new RwdeditRefTypeInfosModel();
+                system.setRefKey(refKey);
+                system.setCode(target.systemCode);
+                system.setName(target.systemName);
+                system.setParentCode(target.majorCode);
+                system.setDataSource(objectMapper.createObjectNode().put("zoningBasis",describe));
+                system.setCreateUser(CREATE_USER_ID);
+                system.setUpdateUser(UPDATE_USER_ID);
+                models.add(system);
+                systemCodes.add(target.systemCode);
+            }
+        }
+
+
     }
 
-    
 
     public void initCityLocation(List<RwdeditRefTypeInfosModel> models, String refKey, String sheetName) throws Exception {
         String file = basepath + "/附表14-地域性信息表.xlsx";

+ 8 - 2
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/RwdeditRefTypeInfosService.java

@@ -71,10 +71,16 @@ public class RwdeditRefTypeInfosService {
             PagedResponse<RwdeditRefTypeInfos> allRefTypeInfos = criteriaUtils.query(QRwdeditRefTypeInfos.rwdeditRefTypeInfos, this::parse, allCriteria);
             List<RwdeditRefTypeInfos> allRefTypeInfosData = allRefTypeInfos.getData();
             Map<String, String> nameMap = allRefTypeInfosData.stream()
-                    .collect(Collectors.toMap(RwdeditRefTypeInfos::getCode, RwdeditRefTypeInfos::getName, (k1, k2) -> k1));
+                    .collect(Collectors
+                            .toMap(rwdeditRefTypeInfo -> rwdeditRefTypeInfo.getRefKey()
+                                    +"-"+rwdeditRefTypeInfo.getCode()
+                                    +"-"+rwdeditRefTypeInfo.getParentCode(), RwdeditRefTypeInfos::getName, (k1, k2) -> k1));
             List<RwdeditRefTypeInfosModel> collect = dataList.stream().map(entity -> {
                 RwdeditRefTypeInfosModel model = entity.toModel();
-                model.setParentName(nameMap.getOrDefault(model.getParentCode(),""));
+                model.setParentName(nameMap
+                        .getOrDefault(model.getRefKey()
+                                +"-"+model.getCode()
+                                +"-"+model.getParentCode(),""));
                 return model;
             }).collect(Collectors.toList());
             result.setData(collect);