فهرست منبع

附表6、附表10的通用信息点,改动某一通用信息点后支持将改动信息更新至所有具有此通用信息点的对象上

lijie 3 سال پیش
والد
کامیت
7b23022670

+ 0 - 6
dmp-rwd-datautils/pom.xml

@@ -13,12 +13,6 @@
     <artifactId>dmp-rwd-datautils</artifactId>
 
     <dependencies>
-        <!-- mybatisPlus -->
-        <dependency>
-            <groupId>com.baomidou</groupId>
-            <artifactId>mybatis-plus-boot-starter</artifactId>
-            <version>3.3.1</version>
-        </dependency>
         <dependency>
             <groupId>com.persagy</groupId>
             <artifactId>dmp-common</artifactId>

+ 21 - 15
dmp-rwd-datautils/src/test/java/com/persagy/dmp/rwd/datautils/ImportFuncidForRwdEdit.java

@@ -1,6 +1,8 @@
 package com.persagy.dmp.rwd.datautils;
 
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.lang.generator.SnowflakeGenerator;
+import cn.hutool.core.util.IdUtil;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
@@ -56,6 +58,8 @@ public class ImportFuncidForRwdEdit {
     private AtomicInteger equipCommonSeq = new AtomicInteger(0);
     private AtomicInteger componentCommonSeq = new AtomicInteger(0);
 
+    private final static Snowflake SNOWFLAKE = IdUtil.createSnowflake(12,15);
+
     @Autowired
     private HttpUtils httpUtils;
 
@@ -72,13 +76,13 @@ public class ImportFuncidForRwdEdit {
     public void importFuncidDef() throws IOException {
         List<FuncidDefModel> funcids = new LinkedList<>();
 //        importBase(funcids);
-//        importSpace(funcids);
+        //importSpace(funcids);
         importSystem(funcids);
         importEquipment(funcids);
         importComponent(funcids);
         //importVirtual(funcids);
-        //importTool(funcids);
-        //importMaterial(funcids);
+//        importTool(funcids);
+//        importMaterial(funcids);
     }
 
     private void writeFuncSqlToFile(List<FuncidDefModel> funcids,String classCode) throws IOException {
@@ -112,7 +116,7 @@ public class ImportFuncidForRwdEdit {
         buff.append("first_tag,second_tag,priority,input_mode,unit,data_type,orig_data_type,is_multiple,is_region,formater,data_source,orig_data_source,note,sub_flag,weak_point,");
         buff.append("is_used,version,last_update_time,share_type,order_seq) \n");
         buff.append("values (");
-        buff.append("'").append(IdWorker.getIdStr()).append("',"); // id
+        buff.append("'").append(SNOWFLAKE.nextIdStr()).append("',"); // id
         buff.append("'").append(model.getCode()).append("',"); // code
         buff.append("'").append(model.getOrigCode()).append("',"); // orig_code
         buff.append("'").append(model.getName()).append("',"); // name
@@ -288,9 +292,7 @@ public class ImportFuncidForRwdEdit {
     }
 
     private void importSystem(List<FuncidDefModel> funcids) throws IOException {
-        analysisSheetDataAndWriteToFile("system", "/附表6-机电精装类对象通用属性点表.xlsx", "系统类","1",systemCommonSeq);
-        // 预留1000个坑位的通用信息点
-        this.systemCommonSeq.addAndGet(1000);
+        analysisSheetDataAndWriteToFile("system", "/附表6-机电精装类对象通用属性点表.xlsx", "系统类","1");
         AtomicInteger systemCommonSeq = new AtomicInteger(this.systemCommonSeq.intValue());
         analysisSheetDataAndWriteToFile("SETD", "/附表7-系统类对象分类属性点表/附表7.1-强电专业系统.xlsx", "TD变配电系统 ","2",systemCommonSeq);
         systemCommonSeq = new AtomicInteger(this.systemCommonSeq.intValue());
@@ -404,9 +406,7 @@ public class ImportFuncidForRwdEdit {
     }
 
     private void importEquipment(List<FuncidDefModel> funcids) throws IOException {
-        analysisSheetDataAndWriteToFile("equipment", "/附表6-机电精装类对象通用属性点表.xlsx", "设备类","1",equipCommonSeq);
-        // 预留1000个坑位的通用信息点
-        this.equipCommonSeq.addAndGet(1000);
+        analysisSheetDataAndWriteToFile("equipment", "/附表6-机电精装类对象通用属性点表.xlsx", "设备类","1");
         AtomicInteger equipCommonSeq = new AtomicInteger(this.equipCommonSeq.intValue());
         analysisSheetDataAndWriteToFile("SETDTF", "/附表8-设备类对象分类属性点表/附表8.1-强电专业设备/附表8.1.1-变配电系统设备.xlsx", "TDTF变压器","2",equipCommonSeq);
         equipCommonSeq = new AtomicInteger(this.equipCommonSeq.intValue());
@@ -1275,10 +1275,8 @@ public class ImportFuncidForRwdEdit {
     }
 
     private void importComponent(List<FuncidDefModel> funcids) throws IOException {
-        analysisSheetDataAndWriteToFile("component", "/附表6-机电精装类对象通用属性点表.xlsx", "部件类","1",componentCommonSeq);
-        // 预留1000个坑位的通用信息点
-        this.componentCommonSeq.addAndGet(1000);
-        AtomicInteger systemCommonSeq = new AtomicInteger(this.componentCommonSeq.intValue());
+        analysisSheetDataAndWriteToFile("component", "/附表6-机电精装类对象通用属性点表.xlsx", "部件类","1");
+        AtomicInteger componentCommonSeq = new AtomicInteger(this.componentCommonSeq.intValue());
         analysisSheetDataAndWriteToFile("SETDHSIP", "/附表9-部件类对象分类属性点表/附表9.1-强电专业部件.xlsx", "TDHSIP综合保护装置","2",componentCommonSeq);
         componentCommonSeq = new AtomicInteger(this.componentCommonSeq.intValue());
         analysisSheetDataAndWriteToFile("SETDLSDW", "/附表9-部件类对象分类属性点表/附表9.1-强电专业部件.xlsx", "TDLSDW低压配电抽屉","2",componentCommonSeq);
@@ -1447,6 +1445,14 @@ public class ImportFuncidForRwdEdit {
                 data.add(funcidDefModel);
             }
         }
+        if ("1".equals(shareType)){
+            //通用的信息点,则重置一下排序
+            int seq = -1;
+            for (int i = data.size() - 1; i >= 0; i--) {
+                FuncidDefModel funcidDefModel = data.get(i);
+                funcidDefModel.setOrderSeq(seq--);
+            }
+        }
         return data;
     }
 

+ 38 - 0
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/enumeration/FuncidShareTypeEnum.java

@@ -0,0 +1,38 @@
+package com.persagy.dmp.rwd.edit.enumeration;
+
+import lombok.Getter;
+
+/**
+ * @author sagadev
+ */
+
+public enum FuncidShareTypeEnum {
+
+    /**
+     * 通用信息点
+     */
+    COMMON("1", "通用信息点"),
+    /**
+     * 特有信息点
+     */
+    SELF("2", "特有信息点");
+
+    @Getter
+    private String value;
+    @Getter
+    private String desc;
+
+    FuncidShareTypeEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public static FuncidShareTypeEnum getByValue(Integer value) {
+        for (FuncidShareTypeEnum state : FuncidShareTypeEnum.values()) {
+            if (state.getValue().equals(value)) {
+                return state;
+            }
+        }
+        return null;
+    }
+}

+ 101 - 15
dmp-rwd-edit/src/main/java/com/persagy/dmp/rwd/edit/service/FuncidDefChangeRecordService.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.rwd.edit.service;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.JsonNode;
@@ -18,6 +19,7 @@ import com.persagy.dmp.rwd.edit.entity.*;
 import com.persagy.dmp.rwd.edit.entity.dto.FuncidDefChangeRecordDTO;
 import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
 import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
+import com.persagy.dmp.rwd.edit.enumeration.FuncidShareTypeEnum;
 import com.persagy.dmp.rwd.edit.model.DtDataModel;
 import com.persagy.dmp.rwd.edit.repository.FuncidDefChangeRecordRepository;
 import com.persagy.dmp.rwd.edit.repository.FuncidDefRepository;
@@ -560,34 +562,56 @@ public class FuncidDefChangeRecordService {
             funcidDef.setNote(item.getNote());
             funcidDef.setSubFlag(item.getSubFlag());
             funcidDef.setWeakPoint(item.getWeakPoint());
-//            if (!FuncidDataType.REFENUM.equals(item.getDataType())) {
             funcidDef.setDataType(item.getDataType());
             funcidDef.setDataSource(item.getDataSource());
-//            } else {
-//                funcidDef.setDataType(FuncidDataType.ENUM);
-//                ArrayNode dataSource = item.getDataSource();
-//                String refKey = dataSource.get(0).get("refKey").asText();
-//                JacksonCriteria queryRef = JacksonCriteria.newInstance();
-//                queryRef.add("refKey", refKey);
-//                List<RwdeditRefTypeInfos> refInfos = rwdeditRefTypeInfosService.query(queryRef).getData();
-//                funcidDef.setDataSource(JacksonMapper.toObject(JacksonMapper.toSimpleJson(refInfos), ArrayNode.class));
-//            }
             funcidDef.setIsUsed(1);//状态 0.历史版本 1.使用中
             funcidDef.setVersion(version);//版本
             funcidDef.setLastUpdateTime(new Date());//发布时间
             funcidDef.setOrderSeq(item.getOrderSeq());
+            JacksonCriteria jacksonCriteria = JacksonCriteria.newInstance();
+            ObjectNode criteria =jacksonCriteria.getCriteria();
+            criteria.put("classCode",item.getClassCode());
+            ListResponse<FuncidDefModel> response = funcidDefService.queryFuncid(jacksonCriteria);
+            // 查询信息点是否存在,如果存在则将旧的设置为不可用
             List<FuncidDefModel> funcidDefModelList = queryFuncidDef(item.getCode(), item.getClassCode(), null);
+            String oldFuncId = "";
             if (funcidDefModelList != null) {
                 FuncidDefModel funcidDefModel = funcidDefModelList.get(0);
                 funcidDefModel.setIsUsed(0);
                 funcidDefModel.setLastUpdateTime(new Date());
                 funcidDefList.add(FuncidDef.fromModel(funcidDefModel));
-
+                oldFuncId = funcidDefModel.getId();
                 funcidDef.setShareType(funcidDefModel.getShareType());
                 funcidDef.setOrderSeq(funcidDefModel.getOrderSeq());
-            }else{
-                //修改信息点位置
-                updateFuncidOrderSeq(funcidDef);
+            }
+            List<FuncidDefModel> funcidDefModels = response.getData();
+            if (CollUtil.isNotEmpty(funcidDefModels)){
+                // 获得所有通用信息点
+                List<FuncidDefModel> commonFuncidModels = funcidDefModels
+                        .stream()
+                        .filter(funcidDefModel -> FuncidShareTypeEnum.COMMON.getValue().equals(funcidDefModel.getShareType()))
+                        .sorted(Comparator.comparing(FuncidDefModel::getOrderSeq))
+                        .collect(Collectors.toList());
+                // 获得所有特有信息点
+                List<FuncidDefModel> selfFuncidModels = funcidDefModels
+                        .stream()
+                        .filter(funcidDefModel -> FuncidShareTypeEnum.SELF.getValue().equals(funcidDefModel.getShareType()))
+                        .sorted(Comparator.comparing(FuncidDefModel::getOrderSeq))
+                        .collect(Collectors.toList());
+
+                // 当排序序号为负或0时,代表通用信息点
+                if (item.getOrderSeq()<=0){
+                    if (CollUtil.isEmpty(commonFuncidModels)){
+                        // 错误情况,根据特有信息点重置该信息点排序
+                        resetSelfFuncidSeq(selfFuncidModels,funcidDef,funcidDefList,item.getOrderSeq(),oldFuncId);
+                    }else {
+                        // 根据通用信息点重置该信息点排序
+                        resetCommonFuncidSeq(commonFuncidModels,funcidDef,funcidDefList,item.getOrderSeq(),oldFuncId);
+                    }
+                }else {
+                    // 当排序序号为正时,代表自定义信息点
+                    resetSelfFuncidSeq(selfFuncidModels,funcidDef,funcidDefList,item.getOrderSeq(),oldFuncId);
+                }
             }
             if(StringUtils.isEmpty(funcidDef.getShareType())){
                 //默认自定义信息点
@@ -595,11 +619,73 @@ public class FuncidDefChangeRecordService {
             }else{
                 funcidDef.setShareType(funcidDef.getShareType());
             }
-            funcidDef.setOrderSeq(funcidDef.getOrderSeq()+1);
             funcidDefList.add(funcidDef);
         });
         funcidDefRepository.saveAll(funcidDefList);
     }
+    /***
+     * Description: 重置通用信息点的排序序号
+     * @param commonFuncidModels : 通用信息点的数据
+     * @param funcidDef : 需要修改的信息点
+     * @param funcidDefList : 保存信息点的列表
+     * @return : void
+     * @author : lijie
+     * @date :2021/7/7 13:52
+     * Update By lijie 2021/7/7 13:52
+     */
+    private void resetCommonFuncidSeq(List<FuncidDefModel> commonFuncidModels,
+                                      FuncidDef funcidDef,
+                                      List<FuncidDef> funcidDefList,
+                                      Integer orderSeq,
+                                      String oldFuncId) {
+        if (CollUtil.isEmpty(commonFuncidModels)){
+            funcidDef.setOrderSeq(-1);
+            return;
+        }
+        int compareSeq = orderSeq+1;
+        if (orderSeq>=0){
+            compareSeq = -commonFuncidModels.size();
+        }
+        funcidDef.setOrderSeq(compareSeq-1);
+        for (FuncidDefModel defModel : commonFuncidModels) {
+            if (defModel.getOrderSeq()<compareSeq
+                    && (StrUtil.isNotBlank(oldFuncId) && !oldFuncId.equals(defModel.getId()))){
+                defModel.setOrderSeq(defModel.getOrderSeq()-1);
+                funcidDefList.add(FuncidDef.fromModel(defModel));
+            }
+        }
+    }
+
+    /***
+     * Description: 重置特有信息点的排序序号
+     * @param selfFuncidModels : 特有信息点的数据
+     * @param funcidDef : 需要修改的信息点
+     * @param funcidDefList : 保存信息点的列表
+     * @return : void
+     * @author : lijie
+     * @date :2021/7/7 13:52
+     * Update By lijie 2021/7/7 13:52
+     */
+    private void resetSelfFuncidSeq(List<FuncidDefModel> selfFuncidModels, FuncidDef funcidDef,
+                                    List<FuncidDef> funcidDefList, Integer orderSeq,String oldFuncId) {
+        if (CollUtil.isEmpty(selfFuncidModels)){
+            // 当特有信息点为空时,设置序号为1
+            funcidDef.setOrderSeq(1);
+            return;
+        }
+        int compareSeq = orderSeq;
+        if (orderSeq<=0){
+            compareSeq = 0;
+        }
+        funcidDef.setOrderSeq(compareSeq+1);
+        for (FuncidDefModel defModel : selfFuncidModels) {
+            if (defModel.getOrderSeq()>compareSeq
+                    && (StrUtil.isNotBlank(oldFuncId) && !oldFuncId.equals(defModel.getId()))){
+                defModel.setOrderSeq(defModel.getOrderSeq()+1);
+                funcidDefList.add(FuncidDef.fromModel(defModel));
+            }
+        }
+    }
 
     /**
      * 修改信息点位置