|
@@ -1,6 +1,7 @@
|
|
|
package com.persagy.dmp.rwd.service.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.text.CharSequenceUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.poi.excel.ExcelReader;
|
|
@@ -15,7 +16,9 @@ import com.persagy.common.web.ListResponse;
|
|
|
import com.persagy.common.web.PagedResponse;
|
|
|
import com.persagy.dmp.config.DmpParameterStorage;
|
|
|
import com.persagy.dmp.rwd.constants.*;
|
|
|
+import com.persagy.dmp.rwd.entity.FuncidDef;
|
|
|
import com.persagy.dmp.rwd.entity.ObjectInstance;
|
|
|
+import com.persagy.dmp.rwd.entity.RelationInstance;
|
|
|
import com.persagy.dmp.rwd.enums.ObjType;
|
|
|
import com.persagy.dmp.rwd.feign.DicClient;
|
|
|
import com.persagy.dmp.rwd.handler.BusinessException;
|
|
@@ -24,7 +27,9 @@ import com.persagy.dmp.rwd.handler.SpringHelper;
|
|
|
import com.persagy.dmp.rwd.model.ClassDefModel;
|
|
|
import com.persagy.dmp.rwd.model.FuncidDefModel;
|
|
|
import com.persagy.dmp.rwd.model.rwd.RelCodeDTO;
|
|
|
+import com.persagy.dmp.rwd.model.rwd.RelDTO;
|
|
|
import com.persagy.dmp.rwd.model.rwd.UploadDTO;
|
|
|
+import com.persagy.dmp.rwd.repository.FuncidDefMapper;
|
|
|
import com.persagy.dmp.rwd.repository.ObjectInstanceRepository;
|
|
|
import com.persagy.dmp.rwd.repository.ProjectDao;
|
|
|
import com.persagy.dmp.rwd.service.*;
|
|
@@ -39,6 +44,7 @@ import org.apache.poi.ss.usermodel.Name;
|
|
|
import org.apache.poi.ss.usermodel.Sheet;
|
|
|
import org.apache.poi.ss.usermodel.Workbook;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
@@ -65,6 +71,8 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
private final FuncidDefService funcidDefService;
|
|
|
/**类型定义逻辑处理类*/
|
|
|
private final ClassDefService classDefService;
|
|
|
+ /**功能点定义*/
|
|
|
+ private final FuncidDefMapper funcidDefMapper;
|
|
|
/**字典服务客户端*/
|
|
|
private final DicClient dicClient;
|
|
|
/**物理世界对象批量导入模板的位置*/
|
|
@@ -215,13 +223,13 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
// 4.检验数据合法性
|
|
|
// 4.1 查询相关数据
|
|
|
// 4.1.1 获取已存在的项目id,建筑本地编码,楼层本地编码,空间本地编码
|
|
|
- Map<String,ObjectInstance> projectMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> buildMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> floorMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> spaceMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> equipMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> systemMap = new HashMap<>();
|
|
|
queryExistDatas(uploadDTO);
|
|
|
+ // 4.1.2 如果项目为空,则直接返回
|
|
|
+// if (CollUtil.isEmpty(uploadDTO.getProjectMap().keySet())){
|
|
|
+// errorList.add()
|
|
|
+// FileUtil.writeErrorContentToResponse(errorList,response,request, CommonConstant.UPLOAD_ERR_FILE_NAME);
|
|
|
+// return;
|
|
|
+// }
|
|
|
// 4.1 校验基础对象录入
|
|
|
commonFileCheckService.checkDataIsValid(errorList,uploadDTO);
|
|
|
// 4.2 校验设备对象录入
|
|
@@ -236,12 +244,86 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
// 5.1 处理基础对象录入
|
|
|
commonFileCheckService.batchHandleUploadDatas(uploadDTO);
|
|
|
// 5.2 处理设备对象录入
|
|
|
-
|
|
|
+ // 5.2.1 校验空间本地编码是否存在
|
|
|
+ equipFileCheckService.secondCheckSpaceDataIsValid(errorList,uploadDTO);
|
|
|
+ if (CollUtil.isNotEmpty(errorList)){
|
|
|
+ FileUtil.writeErrorContentToResponse(errorList,response,request, CommonConstant.UPLOAD_ERR_FILE_NAME);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 5.2.2 根据空间信息查询其楼层,建筑关系
|
|
|
+ querySpaceRels(uploadDTO);
|
|
|
+ // 5.2.3 设备对象录入
|
|
|
+ equipFileCheckService.batchHandleUploadDatas(uploadDTO);
|
|
|
// 5.3 处理系统对象录入
|
|
|
-
|
|
|
+ // 5.3.1 校验建筑本地编码是否存在
|
|
|
+ systemFileCheckService.secondCheckSpaceDataIsValid(errorList,uploadDTO);
|
|
|
+ if (CollUtil.isNotEmpty(errorList)){
|
|
|
+ FileUtil.writeErrorContentToResponse(errorList,response,request, CommonConstant.UPLOAD_ERR_FILE_NAME);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 5.3.2 系统对象录入
|
|
|
+ systemFileCheckService.batchHandleUploadDatas(uploadDTO);
|
|
|
response.addHeader(CommonConstant.UPLOAD_FLAG,CommonConstant.SUCCESS_FLAG_ONE);
|
|
|
}
|
|
|
/***
|
|
|
+ * Description: 根据空间信息查询其楼层关系,楼层与建筑关系
|
|
|
+ * @param uploadDTO : 上传数据
|
|
|
+ * @return : void
|
|
|
+ * @author : lijie
|
|
|
+ * @date :2021/9/27 22:43
|
|
|
+ * Update By lijie 2021/9/27 22:43
|
|
|
+ */
|
|
|
+ private void querySpaceRels(UploadDTO uploadDTO) {
|
|
|
+ Map<String, Map<String, List<ObjectInstance>>> spaceMap = uploadDTO.getSpaceMap();
|
|
|
+ if (MapUtil.isEmpty(spaceMap)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Set<Map.Entry<String, Map<String, List<ObjectInstance>>>> entries = spaceMap.entrySet();
|
|
|
+ List<RelDTO> relDTOS = new ArrayList<>();
|
|
|
+ // 1.收集查询参数
|
|
|
+ for (Map.Entry<String, Map<String, List<ObjectInstance>>> entry : entries) {
|
|
|
+ Map<String, List<ObjectInstance>> projectMap = entry.getValue();
|
|
|
+ if (MapUtil.isEmpty(projectMap)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Set<Map.Entry<String, List<ObjectInstance>>> projectEntries = projectMap.entrySet();
|
|
|
+ for (Map.Entry<String, List<ObjectInstance>> projectEntry : projectEntries) {
|
|
|
+ if (StrUtil.isBlank(projectEntry.getKey())
|
|
|
+ || CollUtil.isEmpty(projectEntry.getValue())){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ relDTOS.add(RelDTO.builder()
|
|
|
+ .projectId(projectEntry.getKey())
|
|
|
+ .spaceIds(projectEntry.getValue()
|
|
|
+ .stream()
|
|
|
+ .map(ObjectInstance::getId)
|
|
|
+ .collect(Collectors.toSet()))
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (CollUtil.isEmpty(relDTOS)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 2.查询关系对象
|
|
|
+ List<RelationInstance> relationInstances = projectDao.queryObjRelBySpaceIdsAndProjectId(relDTOS,uploadDTO.getGroupCode());
|
|
|
+ if (CollUtil.isEmpty(relationInstances)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Map<String, String> spaceFloorMap = new HashMap<>();
|
|
|
+ Map<String, String> floorBuildMap = new HashMap<>();
|
|
|
+ for (RelationInstance relationInstance : relationInstances) {
|
|
|
+ if (RelCodeEnum.FL_2_SP.getIndex().equals(relationInstance.getRelCode())){
|
|
|
+ spaceFloorMap.put(relationInstance.getObjTo(),relationInstance.getObjFrom());
|
|
|
+ }
|
|
|
+ if (RelCodeEnum.BD_2_FL.getIndex().equals(relationInstance.getRelCode())){
|
|
|
+ floorBuildMap.put(relationInstance.getObjTo(),relationInstance.getObjFrom());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ uploadDTO.setSpaceFloorMap(spaceFloorMap);
|
|
|
+ uploadDTO.setFloorBuildMap(floorBuildMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
* Description: 解析关系类型的对象
|
|
|
* @param relCodesListList : 关系类型对象列表
|
|
|
* @return : java.util.Map<java.lang.String,com.persagy.dmp.rwd.model.rwd.RelCodeDTO>
|
|
@@ -278,6 +360,12 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
* Update By lijie 2021/9/24 20:43
|
|
|
*/
|
|
|
private Set<String> queryExistDatas(UploadDTO uploadDTO) {
|
|
|
+ uploadDTO.setProjectMap(new HashMap<>());
|
|
|
+ uploadDTO.setBuildMap(new HashMap<>());
|
|
|
+ uploadDTO.setFloorMap(new HashMap<>());
|
|
|
+ uploadDTO.setSpaceMap(new HashMap<>());
|
|
|
+ uploadDTO.setSystemMap(new HashMap<>());
|
|
|
+ uploadDTO.setEquipMap(new HashMap<>());
|
|
|
// 1.获得有效的项目id
|
|
|
Set<String> transferProjectIds = new HashSet<>();
|
|
|
Set<String> validTableNames = queryValidTableNames(uploadDTO.getCommonObjectUploadData(),
|
|
@@ -299,38 +387,26 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
return new HashSet<>();
|
|
|
}
|
|
|
// 4.解析查询的对象
|
|
|
- Map<String,ObjectInstance> projectMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> buildMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> floorMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> spaceMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> equipMap = new HashMap<>();
|
|
|
- Map<String, Map<String,List<ObjectInstance>>> systemMap = new HashMap<>();
|
|
|
for (ObjectInstance objectInstance : objectInstances) {
|
|
|
if (ObjType.project.name().equals(objectInstance.getObjType())){
|
|
|
- projectMap.put(objectInstance.getId(),objectInstance);
|
|
|
+ uploadDTO.getProjectMap().put(objectInstance.getId(),objectInstance);
|
|
|
}
|
|
|
if (ObjType.building.name().equals(objectInstance.getObjType())){
|
|
|
- fillObjectInstanceMap(buildMap,objectInstance);
|
|
|
+ fillObjectInstanceMap(uploadDTO.getBuildMap(),objectInstance);
|
|
|
}
|
|
|
if (ObjType.floor.name().equals(objectInstance.getObjType())){
|
|
|
- fillObjectInstanceMap(floorMap,objectInstance);
|
|
|
+ fillObjectInstanceMap(uploadDTO.getFloorMap(),objectInstance);
|
|
|
}
|
|
|
if (ObjType.space.name().equals(objectInstance.getObjType())){
|
|
|
- fillObjectInstanceMap(spaceMap,objectInstance);
|
|
|
+ fillObjectInstanceMap(uploadDTO.getSpaceMap(),objectInstance);
|
|
|
}
|
|
|
if (ObjType.equipment.name().equals(objectInstance.getObjType())){
|
|
|
- fillObjectInstanceMap(equipMap,objectInstance);
|
|
|
+ fillObjectInstanceMap(uploadDTO.getEquipMap(),objectInstance);
|
|
|
}
|
|
|
if (ObjType.system.name().equals(objectInstance.getObjType())){
|
|
|
- fillObjectInstanceMap(systemMap,objectInstance);
|
|
|
+ fillObjectInstanceMap(uploadDTO.getSystemMap(),objectInstance);
|
|
|
}
|
|
|
}
|
|
|
- uploadDTO.setProjectMap(projectMap);
|
|
|
- uploadDTO.setBuildMap(buildMap);
|
|
|
- uploadDTO.setFloorMap(floorMap);
|
|
|
- uploadDTO.setSpaceMap(spaceMap);
|
|
|
- uploadDTO.setEquipMap(equipMap);
|
|
|
- uploadDTO.setSystemMap(systemMap);
|
|
|
return new HashSet<>();
|
|
|
}
|
|
|
/***
|
|
@@ -346,7 +422,7 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
Map<String,List<ObjectInstance>> buildingMap = objectMap.getOrDefault(objectInstance.getLocalId(), new HashMap<>());
|
|
|
List<ObjectInstance> buildings = buildingMap.getOrDefault(objectInstance.getProjectId(), new ArrayList<>());
|
|
|
buildings.add(objectInstance);
|
|
|
- buildingMap.put(objectInstance.getLocalId(),buildings);
|
|
|
+ buildingMap.put(objectInstance.getProjectId(),buildings);
|
|
|
objectMap.put(objectInstance.getLocalId(),buildingMap);
|
|
|
}
|
|
|
|
|
@@ -364,9 +440,9 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
List<List<Object>> equipObjectUploadData,
|
|
|
List<List<Object>> systemObjectUploadData) {
|
|
|
Set<String> localIds = new HashSet<>();
|
|
|
- analysisLocalIdFromExcel(commonObjectUploadData,2,CollUtil.newHashSet(1,4,7),localIds);
|
|
|
- analysisLocalIdFromExcel(commonObjectUploadData,7,CollUtil.newHashSet(2,4),localIds);
|
|
|
- analysisLocalIdFromExcel(commonObjectUploadData,7,CollUtil.newHashSet(2,4),localIds);
|
|
|
+ analysisLocalIdFromExcel(commonObjectUploadData,3,CollUtil.newHashSet(1,4,7),localIds);
|
|
|
+ analysisLocalIdFromExcel(equipObjectUploadData,7,CollUtil.newHashSet(2,4),localIds);
|
|
|
+ analysisLocalIdFromExcel(systemObjectUploadData,7,CollUtil.newHashSet(2,4),localIds);
|
|
|
return localIds;
|
|
|
}
|
|
|
|
|
@@ -413,26 +489,36 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
List<List<Object>> systemObjectUploadData,
|
|
|
String groupCode,
|
|
|
Set<String> transferProjectIds) {
|
|
|
- // 1.获取所有的rwd_object表
|
|
|
- Set<String> tableNames = objectInstanceRepository.queryAllProjectTableNames(StrUtil.format(CommonConstant.RWD_OBJECT_TABLE_NAME_FORMAT,groupCode));
|
|
|
+ // 1.获取所有的rwd_object表和rwd_relation表(因为自测过程中发现有些rwd_object表有但rwd_relation表没有)
|
|
|
+ // 1.1 获取所有的rwd_object表
|
|
|
+ Set<String> tableNames = objectInstanceRepository
|
|
|
+ .queryAllProjectTableNames(StrUtil.format(CommonConstant.RWD_OBJECT_TABLE_NAME_FORMAT,groupCode));
|
|
|
if (CollUtil.isEmpty(tableNames)){
|
|
|
return new HashSet<>();
|
|
|
}
|
|
|
+ // 1.获取所有的rwd_object表
|
|
|
+ Set<String> tableRelationNames = objectInstanceRepository
|
|
|
+ .queryAllProjectTableNames(StrUtil.format(CommonConstant.RWD_RELATION_TABLE_NAME_FORMAT,groupCode));
|
|
|
+ if (CollUtil.isEmpty(tableRelationNames)){
|
|
|
+ return new HashSet<>();
|
|
|
+ }
|
|
|
+ Map<String, String> objTableNameMap = tableNames.stream().collect(Collectors.toMap(tableName -> tableName
|
|
|
+ .substring(StrUtil.lastIndexOfIgnoreCase(tableName, "Pj")), tableName -> tableName, (k1, k2) -> k1));
|
|
|
+ Map<String, String> relTableNameMap = tableRelationNames.stream().collect(Collectors.toMap(tableName -> tableName
|
|
|
+ .substring(StrUtil.lastIndexOfIgnoreCase(tableName, "Pj")), tableName -> tableName, (k1, k2) -> k1));
|
|
|
// 2.获得Excel中传值的项目id
|
|
|
// 2.1 获得基础对象导入表的项目id
|
|
|
- analysisProjectFromExcel(commonObjectUploadData,2,0,transferProjectIds);
|
|
|
+ analysisProjectFromExcel(commonObjectUploadData,3,0,transferProjectIds);
|
|
|
// 2.2 获得设备对象导入表的项目id
|
|
|
analysisProjectFromExcel(equipObjectUploadData,7,1,transferProjectIds);
|
|
|
// 2.3 获得基础对象导入表的项目id
|
|
|
analysisProjectFromExcel(systemObjectUploadData,7,1,transferProjectIds);
|
|
|
// 3. 过滤表名称
|
|
|
Set<String> validProjectIds = new HashSet<>();
|
|
|
- for (String next : tableNames) {
|
|
|
- for (String projectId : transferProjectIds) {
|
|
|
- if (next.endsWith(projectId)) {
|
|
|
- validProjectIds.add(next);
|
|
|
- break;
|
|
|
- }
|
|
|
+ for (String projectId : transferProjectIds) {
|
|
|
+ if (objTableNameMap.containsKey(projectId.toLowerCase())
|
|
|
+ && relTableNameMap.containsKey(projectId.toLowerCase())){
|
|
|
+ validProjectIds.add(objTableNameMap.get(projectId.toLowerCase()));
|
|
|
}
|
|
|
}
|
|
|
return validProjectIds;
|
|
@@ -465,51 +551,6 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
}
|
|
|
|
|
|
/***
|
|
|
- * Description: 校验本地编码是否存在
|
|
|
- * @param errorList : 错误列表
|
|
|
- * @param localId : 本地编码
|
|
|
- * @param projectId : 项目id
|
|
|
- * @param objectMap : 对象映射
|
|
|
- * @param relCol : 真实行前缀
|
|
|
- * @param realName : 真实名称
|
|
|
- * @return : void
|
|
|
- * @author : lijie
|
|
|
- * @date :2021/9/25 0:35
|
|
|
- * Update By lijie 2021/9/25 0:35
|
|
|
- */
|
|
|
- private void checkLocalIdExists(List<String> errorList, String localId, String projectId,
|
|
|
- Map<String, Map<String, List<ObjectInstance>>> objectMap, String relCol,
|
|
|
- String realName) {
|
|
|
- // 1.校验是否为空
|
|
|
- checkContentBlank(errorList,localId,relCol,realName);
|
|
|
- // 2.校验是否重复
|
|
|
- if (StrUtil.isNotBlank(localId) && StrUtil.isNotBlank(projectId)){
|
|
|
- Map<String, List<ObjectInstance>> projectMap = objectMap.getOrDefault(localId, new HashMap<>());
|
|
|
- List<ObjectInstance> instances = projectMap.getOrDefault(projectId, new ArrayList<>());
|
|
|
- if (instances.size()>1){
|
|
|
- errorList.add(StrUtil.appendIfMissing(relCol, realName,ErrorEnum.REPEAT_ERROR.getDesc()));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- /***
|
|
|
- * Description: 校验内容为空
|
|
|
- * @param errorList : 错误列表
|
|
|
- * @param content : 校验内容
|
|
|
- * @param relCol : 真实列名称
|
|
|
- * @param realName : 真实名称
|
|
|
- * @return : void
|
|
|
- * @author : lijie
|
|
|
- * @date :2021/9/25 0:38
|
|
|
- * Update By lijie 2021/9/25 0:38
|
|
|
- */
|
|
|
- private void checkContentBlank(List<String> errorList, String content, String relCol, String realName) {
|
|
|
- if (StrUtil.isNotBlank(content)){
|
|
|
- return;
|
|
|
- }
|
|
|
- errorList.add(StrUtil.appendIfMissing(relCol, realName,ErrorEnum.CONTENT_BLANK_ERROR.getDesc()));
|
|
|
- }
|
|
|
-
|
|
|
- /***
|
|
|
* Description: 创建映射关系
|
|
|
* @param dataListList : 数据列表
|
|
|
* @return : java.util.Map<java.lang.String,java.lang.String>
|
|
@@ -906,12 +947,11 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
private List<FuncidDefModel> queryDefFuncidByClassCodes(Set<String> classCodeSet,String groupCode) {
|
|
|
JacksonCriteria jacksonCriteria = JacksonCriteria.newInstance();
|
|
|
jacksonCriteria.add("classCode").in(new ArrayList<>(classCodeSet));
|
|
|
- ListResponse<FuncidDefModel> modelListResponse =
|
|
|
- funcidDefService.queryFuncid(groupCode, null, null, null, jacksonCriteria);
|
|
|
- if (!modelListResponse.success() || CollUtil.isEmpty(modelListResponse.getData())){
|
|
|
+ List<FuncidDef> list = funcidDefMapper.queryFuncidByClassCodesAndGroupCode(classCodeSet,groupCode);
|
|
|
+ if (CollUtil.isEmpty(list)){
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
- return modelListResponse.getData();
|
|
|
+ return list.stream().map(FuncidDef::toModel).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
/***
|
|
@@ -976,7 +1016,7 @@ public class BatchHandleObjectServiceImpl extends BaseService implements BatchHa
|
|
|
JacksonCriteria jacksonCriteria = JacksonCriteria.newInstance();
|
|
|
jacksonCriteria.add("majorCode").in(domainCodes);
|
|
|
ListResponse<ClassDefModel> queryClass =
|
|
|
- classDefService.queryClass(groupCode, null, null, null, true, jacksonCriteria);
|
|
|
+ classDefService.queryClass(groupCode, null, null, null, false, jacksonCriteria);
|
|
|
if (!queryClass.success()){
|
|
|
throw new BusinessException(ResponseCode.B0001.getCode(),"查询系统设备类数据失败");
|
|
|
}
|