Procházet zdrojové kódy

质检-表单设置
1、表单保存时判断是否执行公式

LHB před 1 týdnem
rodič
revize
57a3c576ae

+ 23 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -122,6 +122,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
     private final InformationQueryClient informationQueryClient;
     private final IWbsTreeContractService wbsTreeContractService;
+    private final WbsTreeContractExtendService wbsTreeContractExtendService;
     private final IFormulaService formulaService;
     @Autowired
     private JdbcTemplate jdbcTemplate;
@@ -1087,12 +1088,33 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     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);
+            //扩展----根据父节点查询不允许执行的公式
+            WbsTreeContractExtend byId = wbsTreeContractExtendService.getById(nodeId);
+            List<String> list;
+
+            if(byId != null){
+                String formulaConfig = byId.getFormulaConfig();
+                if(StringUtils.isNotEmpty(formulaConfig)){
+                    list = Arrays.asList(formulaConfig.split(","));
+                } else {
+                    list = new ArrayList<>();
+                }
+            } else {
+                list = new ArrayList<>();
+            }
+
             if (!keyMappers.isEmpty()) {
                 keyMappers.stream()
                         .filter(e -> e.getFormulaId() != null)
                         .forEach(e -> {
                             String key = e.getField() + "__";
-                            processElements(doc.select("table").first().select("[keyname^=" + key + "]"));
+                            Elements select = doc.select("table").first().select("[keyname^=" + key + "]");
+                            if(list.contains(e.getTableName() + ":" + e.getField())){
+                                //当前元素不执行公式
+                                select.stream().map(this::findParentTd).filter(Objects::nonNull).forEach(element -> element.attr("clearFormula", "1"));
+                            }else{
+                                processElements(select);
+                            }
                         });
             }
         } catch (Exception e) {

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

@@ -131,6 +131,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     private final IWbsParamService wpService;
     private final FormulaStrategyFactory formulaStrategyFactory;
     private final IWbsTreeContractService wbsTreeContractService;
+    private final WbsTreeContractExtendService wbsTreeContractExtendService;
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
     private final IElementFormulaMappingService elementFormulaMappingService;
     private final JdbcTemplate jdbcTemplate;
@@ -5219,6 +5220,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     /*表id,项目id,节点Id*/
     public List<KeyMapper> listForContract(List<Long> ids, String projectId, String nodeId) {
         List<Map<String, Object>> listMap = listMap(ids, ExecuteType.INSPECTION);
+        //根据节点id查询 合同段扩展表
+        WbsTreeContractExtend byId = wbsTreeContractExtendService.getById(nodeId);
+        if (byId != null && StringUtils.isNotEmpty(byId.getFormulaConfig())) {
+            List<String> list = Arrays.asList(byId.getFormulaConfig().split(","));
+            listMap = listMap.stream().filter(m -> !list.contains(m.get("tableName").toString() + ":" + m.get("field").toString())).collect(Collectors.toList());
+        }
+
         WbsTreePrivate wtp = wtpId(Long.parseLong(nodeId));
         if (Func.isNotEmpty(listMap)) {
             /*当前节点的某个元素存在多种作用域的公式,作用域范围越小优先级越高*/