Quellcode durchsuchen

公式相关:节点参数查重及删除

yangyj vor 2 Jahren
Ursprung
Commit
2042d0c38f

+ 26 - 19
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -664,25 +664,32 @@ public class ExcelTabController extends BladeController {
         // 获取公式颜色
         String tabName = wbsTreeContract.getInitTableName();
         // 字段查询 获取公式字段
-        String colkeys = "SELECT e_key from m_table_info a ,m_wbs_form_element b WHERE a.tab_en_name = '" + tabName + "' and a.id=b.f_id and b.id  in(SELECT element_id from m_element_formula_mapping c where c.is_deleted=0) ";
-
-        List<Map<String, Object>> maps = jdbcTemplate.queryForList(colkeys);
-
-        if (maps != null) {
-            for (Map<String, Object> keys : maps) {
-                String key = keys.get("e_key") + "__";
-                Elements gscolor = doc.select("el-input[keyname~=^" + key + "]");
-                for (Element element : gscolor) {
-                    //System.out.println(element.parent());
-                    element.parent().attr("gscolor", "11");
-                }
-
-                Elements datecolor = doc.select("el-date-picker[keyname~=^" + key + "]");
-                for (Element element : datecolor) {
-                    //System.out.println(element.parent());
-                    element.parent().attr("gscolor", "11");
-                }
-            }
+//        String colkeys = "SELECT e_key from m_table_info a ,m_wbs_form_element b WHERE a.tab_en_name = '" + tabName + "' and a.id=b.f_id and b.id  in(SELECT element_id from m_element_formula_mapping c where c.is_deleted=0) ";
+//
+//        List<Map<String, Object>> maps = jdbcTemplate.queryForList(colkeys);
+//
+//        if (maps != null) {
+//            for (Map<String, Object> keys : maps) {
+//                String key = keys.get("e_key") + "__";
+//                Elements gscolor = doc.select("el-input[keyname~=^" + key + "]");
+//                for (Element element : gscolor) {
+//                    //System.out.println(element.parent());
+//                    element.parent().attr("gscolor", "11");
+//                }
+//
+//                Elements datecolor = doc.select("el-date-picker[keyname~=^" + key + "]");
+//                for (Element element : datecolor) {
+//                    //System.out.println(element.parent());
+//                    element.parent().attr("gscolor", "11");
+//                }
+//            }
+//        }
+        WbsTreeContract process = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery()
+                .eq(WbsTreeContract::getId,wbsTreeContract.getParentId())
+                .eq(WbsTreeContract::getContractId,wbsTreeContract.getContractId())
+                .eq(WbsTreeContract::getWbsId,wbsTreeContract.getWbsId()).last( "limit 1"));
+        if(process!=null) {
+            this.excelTabService.gsColor(pkeyId, process.getPKeyId().toString(), wbsTreeContract.getProjectId(), doc);
         }
         doc.select("Col").remove();
         fileInputStream.close();

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -466,7 +466,7 @@ public class FormulaController {
            String result = list.stream()
                    .map(item -> {
                        String line = indent[0] + item;
-                       indent[0] += "  ";
+                       indent[0] = "  "+indent[0];
                        return line;
                    })
                    .collect(Collectors.joining("\n"));

+ 50 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java

@@ -1,5 +1,7 @@
 package org.springblade.manager.controller;
 
+import cn.hutool.core.date.StopWatch;
+import cn.hutool.log.StaticLog;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -47,7 +49,7 @@ public class WbsParamController {
     private final JdbcTemplate jdbcTemplate;
     private final IFormulaService formulaService;
     private final IElementFormulaMappingService elementFormulaMappingService;
-    private final IWbsTreeService wbsTreeService;
+
 
     /**
      * 保存或修改
@@ -403,5 +405,52 @@ public class WbsParamController {
 
     }
 
+    @GetMapping("/del-duplicate")
+    public R<Object> duplicate() {
+       try {
+           StopWatch stopWatch = new StopWatch();
+           stopWatch.start("节点参数查重及删除");
+         List<Map<String,Object>> mapList=  this.jdbcTemplate.queryForList("select  node_id nodeId,k,count(*) num from m_wbs_param  where is_deleted=0 and type=1 GROUP BY node_id,k HAVING count(*)>2");
+         if(!mapList.isEmpty()){
+            List<WbsParam> list = this.service.list(Wrappers.<WbsParam>lambdaQuery().in(WbsParam::getNodeId,mapList.stream().map(m->m.get("nodeId")).collect(Collectors.toList())));
+            List<Long> removeWpIds= new ArrayList<>();
+            List<Long> removeMapingIds=new ArrayList<>();
+            List<Long> removeFormulaIds = new ArrayList<>();
+            Map<Long,Map<String,List<WbsParam>>> group= list.stream().collect(Collectors.groupingBy(WbsParam::getNodeId,LinkedHashMap::new,Collectors.groupingBy(WbsParam::getK)));
+             group.values().forEach(m->{
+                 m.forEach((k,v)->{
+                     List<Map<String,Object>> relationMap= this.jdbcTemplate.queryForList("select a.id paramId,b.id mappingId,b.formula_id formulaId from m_wbs_param a join m_element_formula_mapping b on a.id=b.param_id where b.scope=35 and a.id in("+v.stream().map(WbsParam::getId).map(String::valueOf).collect(Collectors.joining("','","'","'"))+") order by  b.update_time desc");
+                     if(!relationMap.isEmpty()){
+                         Object id=relationMap.get(0).get("paramId");
+                         removeWpIds.addAll(v.stream().map(WbsParam::getId).filter(eId ->!StringUtils.isNotEquals(id, eId)).collect(Collectors.toList()));
+                         /*同一道工序下,一个节点参数可能会关联多个元素,除了保留参数关联的以外全部添加到待删除列表*/
+                         relationMap.stream().filter(x->StringUtils.isNotEquals(x.get("paramId"),id)).forEach(e->{
+                             removeMapingIds.add(Long.parseLong(e.get("mappingId").toString()));
+                             removeFormulaIds.add(Long.parseLong(e.get("formulaId").toString()));
+                         });
+                     }else{
+                         removeWpIds.addAll(v.stream().skip(1).map(WbsParam::getId).collect(Collectors.toList()));
+                     }
+                 });
+             });
+             System.out.println("查找到重复参数"+list.size()+"个");
+             System.out.println("待删除参数"+removeWpIds.size()+"个");
+             System.out.println("待删除中间关联"+removeMapingIds.size()+"个");
+             System.out.println("待删除公式"+removeFormulaIds.size()+"个");
+             Map<String,Integer> result = new HashMap<>();
+             result.put("查找到重复参数",list.size());
+             result.put("待删除参数",removeWpIds.size());
+             result.put("待删除中间关联",removeMapingIds.size());
+             result.put("待删除公式",removeFormulaIds.size());
+             stopWatch.stop();
+             Long totalTime = stopWatch.getTotalTimeMillis();
+             StaticLog.info("公式执行用时:{}", totalTime);
+             return R.data(result);
+         }
+       }catch (Exception e){
+           e.printStackTrace();
+       }
+       return R.fail("执行异常");
+    }
 
 }

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java

@@ -17,6 +17,7 @@
 package org.springblade.manager.service;
 
 import com.alibaba.fastjson.JSONArray;
+import org.jsoup.nodes.Document;
 import org.springblade.business.dto.TrialSelfInspectionRecordDTO;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.bean.TableInfo;
@@ -166,4 +167,7 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
 
     // 校验合同段数据问题
     R updateContractById(String contractId);
+
+    /**已经关联公式元素的单元格灰色背景设置*/
+    void gsColor(Long pKeyId, String nodeId, String projectId, Document doc);
 }

+ 20 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -651,6 +651,26 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         return R.data("成功");
     }
 
+    @Override
+    public void gsColor(Long pKeyId,String nodeId,String projectId,Document doc) {
+        try{
+            List<KeyMapper> keyMappers=this.formulaService.getKeyMapperList(Collections.singletonList(pKeyId),projectId,nodeId,ExecuteType.INSPECTION);
+            if (!keyMappers.isEmpty()) {
+                keyMappers.stream()
+                        .filter(e -> e.getFormulaId() != null)
+                        .forEach(e -> {
+                            String key = e.getField() + "__";
+                            processElements(doc.select("el-input[keyname^=" + key + "]"));
+                            processElements(doc.select("el-date-picker[keyname^=" + key + "]"));
+                        });
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+    private void processElements(Elements elements) {
+        elements.forEach(element -> element.parent().attr("gscolor", "11"));
+    }
 
     public void dataInfo(List<WbsTreeContract> collect, Map<Long, String> lastList, Map<String, List<WbsTreeContract>> Data) {
 

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -867,7 +867,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     /*把附表数据刷入对应的附表元素对象*/
                     sta.flush();
                 }
-                String mainTableName = this.tec.getTableAll().stream().filter(e -> e.getNodeName().contains("检验单") || e.getNodeName().contains("评定表")).map(NodeTable::getInitTableName).findFirst().orElse("");
+                String mainTableName = this.tec.getTableAll().stream().filter(e -> e.getNodeName().contains("检验单") || e.getTableType().equals(5)).map(NodeTable::getInitTableName).findFirst().orElse("");
                 if(Func.isNotBlank(mainTableName)){
                     List<FormData> sourceFds=tec.getFormDataMap().values().stream().filter(s->!s.empty()).filter(s->StringUtils.isEquals(s.getTableName(),mainTableName)).collect(Collectors.toList());
                     Map<String,Object> copyMap= new HashMap<>();
@@ -1144,7 +1144,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
 
     @Override
     public List<KeyMapper> getKeyMapperList(List<Long> ids, String projectId, String nodeId, ExecuteType executeType) {
-        /*表名,pkeyId,元素名,元素id 映射对象*/
+        /**ids 表流水号 projectId项目 nodeId工序节点的pkeyId ExecuteType执行模式 质检或者试验 首件*/
         if(executeType.equals(ExecuteType.INSPECTION)){
             return listForContract(ids,projectId,nodeId);
         }else if(executeType.equals(ExecuteType.TESTING)){