Explorar o código

修改对象接口bug修复

linhuili %!s(int64=3) %!d(string=hai) anos
pai
achega
ecea9b5a1e

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectDigitalService.java

@@ -53,5 +53,5 @@ public interface IObjectDigitalService {
      * 删除
      * @param idList 主键
      */
-    void delete(List<String> idList);
+    void delete(List<String> idList) ;
 }

+ 61 - 9
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java

@@ -93,22 +93,24 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
 
 
     @Override
-    public List<ObjectDigital> update(List<ObjectDigital> voList) {
+    public List<ObjectDigital> update(List<ObjectDigital> voList){
         if(CollUtil.isEmpty(voList)) {
             return null;
         }
         //获取$remove字段
         Map<String, Object> removeMap = getRemoveInfo(voList);
-
-        //信息点校验
-        Map<String, Map<String, ObjectInfoDefine>> allInfoMap = validateOnSave(voList, true);
-
         //获取基础属性
         Set<String> fieldSet = ReflectUtil.getFieldMap(ObjectDigital.class).keySet();
-
+        //查询数据库中存在的数据
         List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
         List<ObjectDigital> dbList = dao.selectBatchIds(idList);
         Map<String, ObjectDigital> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+
+        //填充classCode
+        fillClassCodeForUpdate(voList,dbMap);
+        //信息点校验
+        Map<String, Map<String, ObjectInfoDefine>> allInfoMap = validateOnSave(voList, true);
+
         voList.forEach(vo -> {
             ObjectDigital dbVO = MapUtil.get(dbMap, vo.getId(), ObjectDigital.class);
             // 容错处理
@@ -148,12 +150,26 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
      * @param voList
      */
     private Map<String, Map<String, ObjectInfoDefine>> validateInfoCode(List<ObjectDigital> voList) {
-        // 查询信息点定义
+        //获取该信息点当前classCode
         List<String> typeCodeList = CollUtil.getFieldValues(voList, "classCode", String.class);
+
+        //查询通用类型:equipment,building,floor,space等
+        Map<String, String> objTypeMap = typeService.queryObjTypeMap();
+        queryParentClassCode(typeCodeList,objTypeMap);
+
+        // 查询信息点定义
         Map<String, Map<String, ObjectInfoDefine>> allInfoMap = infoService.queryByTypes(typeCodeList);
         // 信息点校验器
         for(ObjectDigital vo:voList) {
             Map<String, ObjectInfoDefine> infoMap = allInfoMap.get(vo.getClassCode());
+            String objType = objTypeMap.get(vo.getClassCode());
+            //设置通用信息点
+            if(!objType.equals(vo.getClassCode())){
+                Map<String, ObjectInfoDefine> commonInfoDefineMap = allInfoMap.get(objType);
+                if(commonInfoDefineMap!=null || commonInfoDefineMap.size()>0){
+                    infoMap.putAll(commonInfoDefineMap);
+                }
+            }
             if(MapUtil.isEmpty(infoMap)) {
                 continue;
             }
@@ -197,6 +213,29 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
     }
 
     /**
+     * 查询对应的通用类型
+     * @param typeCodeList
+     */
+    private void  queryParentClassCode(List<String> typeCodeList,Map<String, String> objTypeMap){
+        if(typeCodeList == null || typeCodeList.size()<=0){
+            return ;
+        }
+        //查询classCode对应点objType
+        List<String> parentCodes = new ArrayList<>();
+        for (String classCode : typeCodeList) {
+            String objType = objTypeMap.get(classCode);
+            if(StringUtils.isEmpty(objType) || "0".equals(objType) || parentCodes.contains(objType)){
+                return ;
+            }
+            parentCodes.add(objType);
+        }
+
+        if(parentCodes!=null && parentCodes.size()>0){
+            typeCodeList.addAll(parentCodes);
+        }
+        return ;
+    }
+    /**
      * 数据合并
      * @param dbVO 源数据
      * @param vo 目标数据
@@ -305,8 +344,21 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
         });
     }
 
-    private void getDefaultValue(List<ObjectDigital> voList){
-
+    /**
+     * 修改时填充classCode
+     * @param voList
+     * @param dbMap
+     */
+    private void fillClassCodeForUpdate(List<ObjectDigital> voList,Map<String, ObjectDigital> dbMap){
+        if(voList == null || voList.size()<=0){
+            return;
+        }
+        for (ObjectDigital digital : voList) {
+            ObjectDigital dbDigital = dbMap.get(digital.getId());
+            if(dbDigital!=null){
+                digital.setClassCode(dbDigital.getClassCode());
+            }
+        }
     }
 
 }