|
@@ -27,6 +27,7 @@ import com.diagbot.vo.IdVO;
|
|
|
import com.diagbot.vo.LisConfigListVO;
|
|
|
import com.diagbot.vo.LisConfigPageVO;
|
|
|
import com.google.common.collect.Lists;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
@@ -172,7 +173,7 @@ public class LisConfigFacade{
|
|
|
// 验证数据是否已存在,已存在的先删除
|
|
|
// 没id的删除重新插入,有id的更新
|
|
|
List<Long> deleteIds = Lists.newLinkedList();
|
|
|
- Map<String, Map<String, Map<String, Long>>> configMap
|
|
|
+ Map<String, Map<String, Map<String, List<Long>>>> configMap
|
|
|
= getConfigMap(hosptialId, null, null);
|
|
|
lisConfigList.forEach(lisConfig -> {
|
|
|
lisConfig.setModifier(userId);
|
|
@@ -181,12 +182,12 @@ public class LisConfigFacade{
|
|
|
if (configMap.containsKey(lisConfig.getHisName())) {
|
|
|
if (lisConfig.getHisDetailName() == null
|
|
|
&& configMap.get(lisConfig.getHisName()).containsKey("")) {
|
|
|
- if (configMap.get(lisConfig.getHisName()).get("").containsKey(lisConfig.getUniqueName())) {
|
|
|
- deleteIds.add(configMap.get(lisConfig.getHisName()).get("").get(lisConfig.getUniqueName()));
|
|
|
+ if (ListUtil.isNotEmpty(configMap.get(lisConfig.getHisName()).get("").get(lisConfig.getUniqueName()))) {
|
|
|
+ deleteIds.addAll(configMap.get(lisConfig.getHisName()).get("").get(lisConfig.getUniqueName()));
|
|
|
}
|
|
|
} else if (configMap.get(lisConfig.getHisName()).containsKey(lisConfig.getHisDetailName())) {
|
|
|
- if (configMap.get(lisConfig.getHisName()).get(lisConfig.getHisDetailName()).containsKey(lisConfig.getUniqueName())) {
|
|
|
- deleteIds.add(configMap
|
|
|
+ if (ListUtil.isNotEmpty(configMap.get(lisConfig.getHisName()).get(lisConfig.getHisDetailName()).get(lisConfig.getUniqueName()))) {
|
|
|
+ deleteIds.addAll(configMap
|
|
|
.get(lisConfig.getHisName())
|
|
|
.get(lisConfig.getHisDetailName())
|
|
|
.get(lisConfig.getUniqueName()));
|
|
@@ -301,6 +302,9 @@ public class LisConfigFacade{
|
|
|
if (StringUtil.isNotBlank(lisConfigList.get(i).getHisName())) {
|
|
|
lisConfigList.get(i).setHisName(lisConfigList.get(i).getHisName().trim());
|
|
|
}
|
|
|
+ if (StringUtil.isNotBlank(lisConfigList.get(i).getHisDetailName())) {
|
|
|
+ lisConfigList.get(i).setHisDetailName(lisConfigList.get(i).getHisDetailName().trim());
|
|
|
+ }
|
|
|
if (StringUtil.isNotBlank(lisConfigList.get(i).getUniqueName())) {
|
|
|
lisConfigList.get(i).setUniqueName(lisConfigList.get(i).getUniqueName().trim());
|
|
|
}
|
|
@@ -329,7 +333,7 @@ public class LisConfigFacade{
|
|
|
// 验证数据是否已存在,已存在的先删除
|
|
|
// 没id的删除重新插入,有id的更新
|
|
|
List<Long> deleteIds = Lists.newLinkedList();
|
|
|
- Map<String, Map<String, Map<String, Long>>> configMap
|
|
|
+ Map<String, Map<String, Map<String, List<Long>>>> configMap
|
|
|
= getConfigMap(Long.valueOf(hospitalId), hisNames, uniqueNames);
|
|
|
lisConfigList.forEach(lisConfig -> {
|
|
|
lisConfig.setHospitalId(Long.valueOf(hospitalId));
|
|
@@ -339,12 +343,12 @@ public class LisConfigFacade{
|
|
|
if (configMap.containsKey(lisConfig.getHisName())) {
|
|
|
if (lisConfig.getHisDetailName() == null
|
|
|
&& configMap.get(lisConfig.getHisName()).containsKey("")) {
|
|
|
- if (configMap.get(lisConfig.getHisName()).get("").containsKey(lisConfig.getUniqueName())) {
|
|
|
- deleteIds.add(configMap.get(lisConfig.getHisName()).get("").get(lisConfig.getUniqueName()));
|
|
|
+ if (ListUtil.isNotEmpty(configMap.get(lisConfig.getHisName()).get("").get(lisConfig.getUniqueName()))) {
|
|
|
+ deleteIds.addAll(configMap.get(lisConfig.getHisName()).get("").get(lisConfig.getUniqueName()));
|
|
|
}
|
|
|
} else if (configMap.get(lisConfig.getHisName()).containsKey(lisConfig.getHisDetailName())) {
|
|
|
- if (configMap.get(lisConfig.getHisName()).get(lisConfig.getHisDetailName()).containsKey(lisConfig.getUniqueName())) {
|
|
|
- deleteIds.add(configMap
|
|
|
+ if (ListUtil.isNotEmpty(configMap.get(lisConfig.getHisName()).get(lisConfig.getHisDetailName()).get(lisConfig.getUniqueName()))) {
|
|
|
+ deleteIds.addAll(configMap
|
|
|
.get(lisConfig.getHisName())
|
|
|
.get(lisConfig.getHisDetailName())
|
|
|
.get(lisConfig.getUniqueName()));
|
|
@@ -379,7 +383,7 @@ public class LisConfigFacade{
|
|
|
}
|
|
|
if (ListUtil.isNotEmpty(errorNumList)) {
|
|
|
throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
|
|
|
- "以下行数(不计入空行)标准术语与数据库术语不匹配:"
|
|
|
+ "以下行数(不计空行)标准术语在数据库中不存在:"
|
|
|
+ errorNumList.stream().collect(Collectors.joining("、"))
|
|
|
+ "。导入取消,请修改后再试。");
|
|
|
}
|
|
@@ -407,8 +411,8 @@ public class LisConfigFacade{
|
|
|
* @param uniqueNames
|
|
|
* @return
|
|
|
*/
|
|
|
- public Map<String, Map<String, Map<String, Long>>> getConfigMap(Long hospitalId, List<String> hisNames, List<String> uniqueNames) {
|
|
|
- Map<String, Map<String, Map<String, Long>>> retMap = new HashMap<>();
|
|
|
+ public Map<String, Map<String, Map<String, List<Long>>>> getConfigMap(Long hospitalId, List<String> hisNames, List<String> uniqueNames) {
|
|
|
+ Map<String, Map<String, Map<String, List<Long>>>> retMap = new HashMap<>();
|
|
|
QueryWrapper<LisConfig> queryWrapper = new QueryWrapper<>();
|
|
|
queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
|
|
|
.eq("hospital_id", hospitalId);
|
|
@@ -432,14 +436,18 @@ public class LisConfigFacade{
|
|
|
Map<String, List<LisConfig>> hisNameMap = EntityUtil.makeEntityListMap(records, "hisName");
|
|
|
for (Map.Entry<String, List<LisConfig>> entry : hisNameMap.entrySet()) {
|
|
|
if (ListUtil.isNotEmpty(entry.getValue())) {
|
|
|
- Map<String, Map<String, Long>> detailNameMap = new HashMap<>();
|
|
|
+ Map<String, Map<String, List<Long>>> detailNameMap = new HashMap<>();
|
|
|
//his名称映射到标准词,1:n
|
|
|
Map<String, List<LisConfig>> hisDetailNameMap
|
|
|
= EntityUtil.makeEntityListMap(entry.getValue(), "hisDetailName");
|
|
|
for (Map.Entry<String, List<LisConfig>> detailEntry : hisDetailNameMap.entrySet()) {
|
|
|
if (ListUtil.isNotEmpty(detailEntry.getValue())) {
|
|
|
- detailNameMap.put(detailEntry.getKey(),
|
|
|
- EntityUtil.makeMapWithKeyValue(detailEntry.getValue(), "uniqueName", "id"));
|
|
|
+ Map<String, List<LisConfig>> thirdMap = EntityUtil.makeEntityListMap(detailEntry.getValue(), "uniqueName");
|
|
|
+ Map<String, List<Long>> idMap = new HashMap<>();
|
|
|
+ for (Map.Entry<String, List<LisConfig>> thirdEntry : thirdMap.entrySet()) {
|
|
|
+ idMap.put(thirdEntry.getKey(), thirdEntry.getValue().stream().map(i -> i.getId()).distinct().collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+ detailNameMap.put(detailEntry.getKey(), idMap);
|
|
|
}
|
|
|
}
|
|
|
retMap.put(entry.getKey(), detailNameMap);
|
|
@@ -483,4 +491,142 @@ public class LisConfigFacade{
|
|
|
String fileName = "检验映射模板.xls";
|
|
|
ExcelUtils.exportExcel(new ArrayList<>(), null, "sheet1", LisConfig.class, fileName, response, 12.8f);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导入数据预匹配
|
|
|
+ * @param file
|
|
|
+ * @param response
|
|
|
+ */
|
|
|
+ public void precDataMatch(MultipartFile file,HttpServletResponse response) {
|
|
|
+ List<LisConfig> originList = ExcelUtils.importExcel(file, 0, 1, LisConfig.class);
|
|
|
+ List<LisConfig> retList = dataProcess(originList);
|
|
|
+
|
|
|
+ String fileName = "检验关联数据(预匹配).xls";
|
|
|
+ ExcelUtils.exportExcel(retList, null, "sheet1", LisConfig.class, fileName, response, 12.8f);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导入数据验证
|
|
|
+ *
|
|
|
+ * @param file
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Boolean dataVerify(MultipartFile file) {
|
|
|
+ List<LisConfig> originList = ExcelUtils.importExcel(file, 0, 1, LisConfig.class);
|
|
|
+ List<LisConfig> retList = dataProcess(originList);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 数据处理
|
|
|
+ *
|
|
|
+ * @param originList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<LisConfig> dataProcess(List<LisConfig> originList) {
|
|
|
+ List<LisConfig> retList = Lists.newLinkedList();
|
|
|
+ List<String> hisNameList = originList.stream().map(i -> i.getHisName()).distinct().collect(Collectors.toList());
|
|
|
+ Map<String, Map<String, List<LisConfig>>> allMap = getAll(hisNameList);
|
|
|
+
|
|
|
+ //去除空格
|
|
|
+ originList.forEach(item -> {
|
|
|
+ item.setHisName(item.getHisName().trim());
|
|
|
+ if(StringUtil.isNotBlank(item.getHisDetailName())) {
|
|
|
+ item.setHisDetailName(item.getHisDetailName().trim());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ //标准术语校验
|
|
|
+ List<String> precUniqueName = Lists.newArrayList();
|
|
|
+ if (allMap != null) {
|
|
|
+ for (Map.Entry<String, Map<String, List<LisConfig>>> entry : allMap.entrySet()) {
|
|
|
+ for (Map.Entry<String, List<LisConfig>> subEntry : entry.getValue().entrySet()) {
|
|
|
+ if (ListUtil.isNotEmpty(subEntry.getValue())) {
|
|
|
+ precUniqueName.addAll(subEntry.getValue().stream().map(i -> i.getUniqueName()).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ precUniqueName = precUniqueName.stream().distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ ConceptVO conceptVO = new ConceptVO();
|
|
|
+ conceptVO.setNames(precUniqueName);
|
|
|
+ conceptVO.setType(ConceptTypeEnum.LisPack.getKey());
|
|
|
+ RespDTO<List<String>> respLisPackDTO = cdssCoreClient.getConceptNames(conceptVO);
|
|
|
+ RespDTOUtil.respNGDealCover(respLisPackDTO, "标准术语校验失败");
|
|
|
+ List<String> lisPackNames = respLisPackDTO.data;
|
|
|
+ conceptVO.setType(ConceptTypeEnum.Lis.getKey());
|
|
|
+ RespDTO<List<String>> respLisDTO = cdssCoreClient.getConceptNames(conceptVO);
|
|
|
+ RespDTOUtil.respNGDealCover(respLisDTO, "标准术语校验失败");
|
|
|
+ List<String> lisNames = respLisDTO.data;
|
|
|
+
|
|
|
+ if (ListUtil.isNotEmpty(originList)) {
|
|
|
+ for (LisConfig originItem : originList) {
|
|
|
+ if (StringUtils.isBlank(originItem.getHisDetailName())) {
|
|
|
+ originItem.setHisDetailName("");
|
|
|
+ }
|
|
|
+ if (allMap.containsKey(originItem.getHisName())
|
|
|
+ && allMap.get(originItem.getHisName()).containsKey(originItem.getHisDetailName())) {
|
|
|
+ List<LisConfig> items = allMap.get(originItem.getHisName()).get(originItem.getHisDetailName());
|
|
|
+ boolean flag = false;
|
|
|
+ for (LisConfig item : items) {
|
|
|
+ if (lisPackNames.contains(item.getUniqueName())
|
|
|
+ || lisNames.contains(item.getUniqueName())) {
|
|
|
+ retList.add(item);
|
|
|
+ flag = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!flag) {
|
|
|
+ retList.add(originItem);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ retList.add(originItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ retList = retList.stream()
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ return retList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有医院映射数据
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map<String,Map<String,List<LisConfig>>> getAll(List<String> hisNameList) {
|
|
|
+ Map<String, Map<String, List<LisConfig>>> retMap = new HashMap<>();
|
|
|
+ QueryWrapper<LisConfig> queryWrapper = new QueryWrapper<>();
|
|
|
+ if (ListUtil.isNotEmpty(hisNameList)) {
|
|
|
+ queryWrapper.in("his_name", hisNameList);
|
|
|
+ }
|
|
|
+ List<LisConfig> records = lisConfigService.list(queryWrapper);
|
|
|
+ if (ListUtil.isEmpty(records)) {
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ records.forEach(record -> {
|
|
|
+ record.setHospitalId(null);
|
|
|
+ record.setId(null);
|
|
|
+ record.setHisDetailName(StringUtils.isBlank(record.getHisDetailName()) ? "" : record.getHisDetailName());
|
|
|
+ record.setUniqueCode(StringUtils.isBlank(record.getUniqueCode()) ? "" : record.getUniqueCode());
|
|
|
+ });
|
|
|
+
|
|
|
+ records = records
|
|
|
+ .stream()
|
|
|
+ .filter(record -> record.getIsDeleted().equals(IsDeleteEnum.N.getKey()))
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (ListUtil.isEmpty(records)) {
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
+ Map<String, List<LisConfig>> hisNameMap = EntityUtil.makeEntityListMap(records, "hisName");
|
|
|
+
|
|
|
+ for (Map.Entry<String, List<LisConfig>> entry : hisNameMap.entrySet()) {
|
|
|
+ retMap.put(entry.getKey(),
|
|
|
+ EntityUtil.makeEntityListMap(entry.getValue(), "hisDetailName"));
|
|
|
+ }
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
}
|