瀏覽代碼

Merge remote-tracking branch 'origin/dev' into dev

cr 1 周之前
父節點
當前提交
7ef2e4bc2b

+ 37 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaReferenceDTO.java

@@ -0,0 +1,37 @@
+package org.springblade.manager.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 公式应用设置
+ * @author LHB
+ */
+@Data
+public class FormulaReferenceDTO {
+    @ApiModelProperty("表单pKeyId")
+    private Long pKeyId;
+
+    @ApiModelProperty(value = "节点pKeyId",required = true)
+    @NotNull(message = "节点pKeyId不能为空")
+    private Long pId;
+
+    @ApiModelProperty(value = "选择表格的元素key",required = true)
+    @NotBlank(message = "选择表格的元素key不能为空")
+    private String key;
+
+    @ApiModelProperty(value = "表单元素表名称",required = true)
+    @NotBlank(message = "表单元素表名称不能为空")
+    private String initTableName;
+
+    @ApiModelProperty(value = "状态 0禁用 1启用",required = true)
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+        @ApiModelProperty(value = "类型 1-质检 2-试验",required = true)
+    @NotNull(message = "类型")
+    private Integer type;
+}

+ 5 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreeContractExtend.java

@@ -64,4 +64,9 @@ public class WbsTreeContractExtend {
      *  修改人
      */
     private Long updateUser;
+
+    /**
+     * 哪些元素执行公式
+     */
+    private String formulaConfig;
 }

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

@@ -424,7 +424,7 @@ public class FormulaController {
             ContractInfo contract = this.contractInfoService.getById(fo.getContractId());
             WbsTreeContract parent = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getId,fo.getParentId()).eq(WbsTreeContract::getContractId,fo.getContractId()).last("limit 1"));
 
-            List<KeyMapper> kms = this.service.getKeyMapperList(Collections.singletonList(fo.getPkeyId()), contract.getPId(), parent.getPKeyId().toString(), ExecuteType.INSPECTION);
+            List<KeyMapper> kms = this.service.getKeyMapperList(Collections.singletonList(fo.getPkeyId()), contract.getPId(), parent.getPKeyId().toString(), ExecuteType.INSPECTION, null);
             KeyMapper keyMapper = null;
             if (Func.isNotEmpty(kms)) {
                 Optional<KeyMapper> optionalKeyMapper = kms.stream().filter(e -> StringUtils.isEquals(e.getField(), key)).findFirst();

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

@@ -41,6 +41,7 @@ import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
+import org.springblade.manager.dto.FormulaReferenceDTO;
 import org.springblade.manager.dto.MoveNodeDTO;
 import org.springblade.manager.dto.TableSortDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO2;
@@ -1223,5 +1224,11 @@ public class WbsTreeContractController extends BladeController {
     }
 
 
-
+    @PostMapping("/setFormulaReference")
+    @ApiOperation(value = "公式引用")
+    @ApiOperationSupport(order = 33)
+    public R setFormulaReference(@RequestBody FormulaReferenceDTO dto) {
+        iWbsTreeContractService.setFormulaReference(dto);
+        return R.success("成功");
+    }
 }

+ 3 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -849,9 +849,9 @@ public class WbsTreePrivateController extends BladeController {
      */
     @GetMapping("/get-excel-html")
     @ApiOperationSupport(order = 23)
-    @ApiOperation(value = "试验-客户端获取表的HTML", notes = "传入节点primaryKeyId")
-    public Object getExcelHtml(@RequestParam String primaryKeyId) throws Exception {
-        return wbsTreePrivateService.getExcelHtml(primaryKeyId);
+    @ApiOperation(value = "试验-客户端获取表的HTML", notes = "传入节点primaryKeyId和试验id")
+    public Object getExcelHtml(@RequestParam String primaryKeyId, String id) throws Exception {
+        return wbsTreePrivateService.getExcelHtml(primaryKeyId, id);
     }
 
     /**

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

@@ -63,7 +63,7 @@ public interface IFormulaService extends BaseService<Formula> {
     /**
      * ids 表流水号 projectId项目 nodeId工序节点的pkeyId ExecuteType执行模式 质检或者试验 首件
      */
-    List<KeyMapper> getKeyMapperList(List<Long> ids, String projectId, String nodeId, ExecuteType executeType);
+    List<KeyMapper> getKeyMapperList(List<Long> ids, String projectId, String nodeId, ExecuteType executeType, String testGroupId);
 
    void formulaInto(List<FormData> curFormDatas, String projectId, String nodeId, ExecuteType executeType);
 

+ 3 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java

@@ -4,10 +4,7 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.springblade.business.dto.EKeyDto;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.tool.api.R;
-import org.springblade.manager.dto.MoveNodeDTO;
-import org.springblade.manager.dto.RangeInfo;
-import org.springblade.manager.dto.WbsTreeContractDTO;
-import org.springblade.manager.dto.WbsTreeContractDTO2;
+import org.springblade.manager.dto.*;
 import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreePrivate;
@@ -118,4 +115,6 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
     Object getWbsContractSubdivisionMeasurable(String projectId, String sectionId, String pid, Boolean judgment);
 
     List<QualityData> qualityDataAcquisition(String projectId, String sectionId, String codesId);
+
+    void setFormulaReference(FormulaReferenceDTO dto);
 }

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

@@ -84,7 +84,7 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
 
     List<WbsTreePrivateVO4> searchNodeAllTable(String primaryKeyId, String type, String tableType, String contractId, String projectId, Integer isAdd, Long id);
 
-    Object getExcelHtml(String primaryKeyId) throws Exception;
+    Object getExcelHtml(String primaryKeyId, String id) throws Exception;
 
     Object getExcelHtmlEntrust(String nodeId,String contractId) throws Exception;
 

+ 46 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -116,6 +116,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;
@@ -503,6 +504,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                 e.setClassify(example.getClassify());
                                 e.setProjectId(example.getProjectId());
                                 e.setGroupId(example.getGroupId());
+                                e.setTestGroupId(example.getTestGroupId());
                                 map.forEach((key, value) -> {
                                     if (key.startsWith("key_")) {
                                         e.getDataMap().put(key, Func.toStr(value));
@@ -516,7 +518,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     tableInfoList.sort(Comparator.comparingInt(a -> tableAllIds.indexOf(Long.parseLong(a.getPkeyId()))));
                 }
                 StopWatch stopWatch = new StopWatch();
-                List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableAll.stream().map(NodeTable::getPKeyId).filter(Func::isNotEmpty).collect(Collectors.toList()), tableInfoList.get(0).getProjectId(), String.valueOf(nodeId), type);
+                List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableAll.stream().map(NodeTable::getPKeyId).filter(Func::isNotEmpty).collect(Collectors.toList()), tableInfoList.get(0).getProjectId(), String.valueOf(nodeId), type, tableInfoList.get(0).getTestGroupId());
                 if (Func.isNotEmpty(keyMappers) && Func.isNotEmpty(tableAll)) {
                     Map<String, Map<String, String>> coordinateMap = createCoordinateMap(keyMappers, type);
                     stopWatch.start("公式处理");
@@ -1089,13 +1091,35 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     @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);
+            List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(Collections.singletonList(pKeyId), projectId, nodeId, ExecuteType.INSPECTION, "1");
+            //扩展----根据父节点查询不允许执行的公式
+            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().filter(Objects::nonNull).forEach(element -> element.attr("clearFormula", "1"));
+                            }else{
+                                select.stream().filter(Objects::nonNull).forEach(element -> element.attr("clearFormula", "0"));
+                                processElements(select);
+                            }
                         });
             }
         } catch (Exception e) {
@@ -1834,6 +1858,15 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     }
                 }
             }
+            //取消公式执行 的单元格不自动获取html上的数据到表格中
+            WbsTreeContractExtend byId = wbsTreeContractExtendService.getById(nodeId);
+            if(byId != null && StringUtils.isNotEmpty(byId.getFormulaConfig())){
+                List<String> notFormula = Arrays.asList(byId.getFormulaConfig().split(","));
+                reData.keySet().removeIf(key -> {
+                    String[] keyParts = key.split("__");
+                    return keyParts.length > 1 && notFormula.contains(wbsTreeContract.getInitTableName() + ":" + keyParts[0]);
+                });
+            }
 
             //电签默认值
             if (defText.size() >= 1) {
@@ -3229,6 +3262,16 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         break;
                     }
                 }
+                //取消公式执行 过滤html数据
+                WbsTreeContractExtend byId = wbsTreeContractExtendService.getById(record.getId());
+                if(byId != null && StringUtils.isNotEmpty(byId.getFormulaConfig())){
+                    List<String> notFormula = Arrays.asList(byId.getFormulaConfig().split(","));
+                    reData.keySet().removeIf(key -> {
+                        String[] keyParts = key.split("__");
+                        return keyParts.length > 1 && notFormula.contains(wbsTreePrivate.getInitTableName() + ":" + keyParts[0]);
+                    });
+
+                }
 
                 ProjectInfo projectInfo = jdbcTemplate.query("select project_name from m_project_info where id = " + wbsTreePrivate.getProjectId(), new BeanPropertyRowMapper<>(ProjectInfo.class)).stream().findAny().orElse(null);
                 if (projectInfo != null) {

+ 31 - 5
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;
@@ -2284,12 +2285,12 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
     @Override
-    public List<KeyMapper> getKeyMapperList(List<Long> ids, String projectId, String nodeId, ExecuteType executeType) {
+    public List<KeyMapper> getKeyMapperList(List<Long> ids, String projectId, String nodeId, ExecuteType executeType, String testGroupId) {
         /*ids 表流水号 projectId项目 nodeId工序节点的pkeyId ExecuteType执行模式 质检或者试验 首件*/
         if (executeType.equals(ExecuteType.INSPECTION)) {
-            return listForContract(ids, projectId, nodeId);
+            return listForContract(ids, projectId, nodeId, testGroupId);
         } else if (executeType.equals(ExecuteType.TESTING) ) {
-            return listForPrivate(ids, projectId, nodeId);
+            return listForPrivate(ids, projectId, nodeId, testGroupId);
         } else if (executeType.equals(ExecuteType.LOGINFO) ) {
             return listForPrivateByLog(ids, projectId, nodeId);
         }
@@ -4962,8 +4963,18 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
     /*表id,项目id,节点Id*/
-    public List<KeyMapper> listForContract(List<Long> ids, String projectId, String nodeId) {
+    public List<KeyMapper> listForContract(List<Long> ids, String projectId, String nodeId, String testGroupId) {
         List<Map<String, Object>> listMap = listMap(ids, ExecuteType.INSPECTION);
+        //质检这个参数为0,表示过滤公式,为1,表示html渲染表格
+        if(!"1".equals(testGroupId)){
+            //根据节点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)) {
             /*当前节点的某个元素存在多种作用域的公式,作用域范围越小优先级越高*/
@@ -5048,9 +5059,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     }
 
-    private List<KeyMapper> listForPrivate(List<Long> ids, String projectId, String nodeId) {
+    private List<KeyMapper> listForPrivate(List<Long> ids, String projectId, String nodeId, String testGroupId) {
         /**/
         List<Map<String, Object>> listMap = listMap(ids, ExecuteType.TESTING);
+        if(StringUtil.isNotBlank(testGroupId)){
+            //根据节点id查询 合同段扩展表
+            WbsTreeContractExtend byId = wbsTreeContractExtendService.getById(testGroupId);
+            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());
+            }
+        }
         List<KeyMapper> list = listMap.stream().map(m -> BeanUtil.toBean(m, KeyMapper.class)).collect(Collectors.toList());
         if (Func.isNotEmpty(listMap)) {
             WbsTreePrivate wtp = this.wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, nodeId));
@@ -6208,6 +6227,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 });
             }*/
             fds.removeIf(f -> f.getFormula() == null);
+            //取消公式执行
+            WbsTreeContractExtend byId = wbsTreeContractExtendService.getById(wtc.getPId());
+            if(byId != null && org.apache.commons.lang.StringUtils.isNotEmpty(byId.getFormulaConfig())){
+                List<String> list = Arrays.asList(byId.getFormulaConfig().split(","));
+                fds = fds.stream().filter(f -> !list.contains(f.getCode())).collect(Collectors.toList());
+            }
+
             if (fds.size() > 0) {
                 /*执行结果放回数据集合*/
                 Map<String, Object> currentMap = new HashMap<>(30);

+ 58 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -70,6 +70,7 @@ import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.INodeBaseInfoService;
 import org.springblade.manager.service.ITableFileService;
 import org.springblade.manager.service.IWbsTreeContractService;
+import org.springblade.manager.service.WbsTreeContractExtendService;
 import org.springblade.manager.util.DataStructureFormatUtils;
 import org.springblade.manager.utils.CompositeKey;
 import org.springblade.manager.vo.*;
@@ -140,6 +141,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     private final TrialCyAccessoriesClient trialCyAccessoriesClient;
     private final WbsTreeContractStatisticsClient wbsTreeContractStatisticsClient;
     private final FormulaDataBlockMapper formulaDataBlockMapper;
+    private final WbsTreeContractExtendService wbsTreeContractExtendService;
 
 
 
@@ -6101,4 +6103,60 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         // 如果共同部分都相同,长度短的排在前面(父级在子级前面)
         return Integer.compare(arr1.length, arr2.length);
     }
+
+    @Override
+    public void setFormulaReference(FormulaReferenceDTO dto) {
+        try {
+            dto.setKey(dto.getKey().split("__")[0]);
+            WbsTreeContract parentNode = null;
+            if(dto.getType() == 1){
+                //查询父节点
+                parentNode = wbsTreeContractMapper.selectById(dto.getPId());
+            }
+
+            //查询父节点的扩展信息
+            WbsTreeContractExtend byId = wbsTreeContractExtendService.getById(dto.getPId());
+
+            if(byId != null){
+                String formulaConfig = byId.getFormulaConfig();
+                if(StringUtils.isNotEmpty(formulaConfig)){
+                    List<String> list = Arrays.asList(formulaConfig.split(","));
+                    HashSet<String> strings = new HashSet<>(list);
+                    if(dto.getStatus() == 1){
+                        strings.remove(dto.getInitTableName() + ":" + dto.getKey());
+                    }else{
+                        strings.add(dto.getInitTableName() + ":" + dto.getKey());
+                    }
+                    byId.setFormulaConfig(StringUtils.join(strings, ","));
+                }else{
+                    if(dto.getStatus() == 0){
+                        byId.setFormulaConfig(dto.getInitTableName() + ":" + dto.getKey());
+                    }
+                }
+                wbsTreeContractExtendService.updateById(byId);
+            }else{
+                if(dto.getStatus() == 0){
+                    WbsTreeContractExtend wbsTreeContractExtend = new WbsTreeContractExtend();
+                    if(dto.getType() == 1){
+                        if(parentNode == null){
+                            throw new ServiceException("父节点不存在");
+                        }
+                        wbsTreeContractExtend.setPKeyId(parentNode.getPKeyId());
+                        wbsTreeContractExtend.setContractId(Long.valueOf(parentNode.getContractId()));
+                        wbsTreeContractExtend.setAncestors(parentNode.getAncestorsPId());
+                    }
+                    if(dto.getType() == 2){
+                        wbsTreeContractExtend.setPKeyId(dto.getPId());
+                    }
+                    wbsTreeContractExtend.setType(null);
+                    wbsTreeContractExtend.setIsSync(0);
+                    wbsTreeContractExtend.setFormulaConfig(dto.getInitTableName() + ":" + dto.getKey());
+                    wbsTreeContractExtendService.save(wbsTreeContractExtend);
+                }
+            }
+        } catch (NumberFormatException e) {
+            e.printStackTrace();
+            throw new RuntimeException("失败");
+        }
+    }
 }

+ 44 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -39,10 +39,7 @@ import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO3;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.*;
-import org.springblade.manager.service.IElementFormulaMappingService;
-import org.springblade.manager.service.IFormulaService;
-import org.springblade.manager.service.ITableInfoService;
-import org.springblade.manager.service.IWbsTreePrivateService;
+import org.springblade.manager.service.*;
 import org.springblade.manager.utils.CompositeKey1;
 import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.vo.*;
@@ -76,6 +73,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
     private final WbsTreeContractMapper wbsTreeContractMapper;
     private final WbsTreeContractServiceImpl wbsTreeContractService;
+    private final WbsTreeContractExtendService wbsTreeContractExtendService;
     private final ITableInfoService tableInfoService;
     private final WbsTreeMapper wbsTreeMapper;
     private final ContractInfoMapper contractInfoMapper;
@@ -2901,7 +2899,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     }
 
     @Override
-    public Object getExcelHtml(String primaryKeyId) throws Exception {
+    public Object getExcelHtml(String primaryKeyId, String id) throws Exception {
 
         WbsTreePrivate wbsTreePrivate = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
                 .eq(WbsTreePrivate::getPKeyId, primaryKeyId));
@@ -2957,18 +2955,51 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         //字段查询、获取公式字段
         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);
+        //扩展----根据父节点查询不允许执行的公式
+        List<String>  list = new ArrayList<>();;
+        if(StringUtil.isNotBlank(id)){
+            WbsTreeContractExtend byId = wbsTreeContractExtendService.getById(id);
+            if(byId != null){
+                String formulaConfig = byId.getFormulaConfig();
+                if(StringUtils.isNotEmpty(formulaConfig)){
+                    list = Arrays.asList(formulaConfig.split(","));
+                }
+            }
+        }
+
         if (maps.size() > 0) {
             for (Map<String, Object> keys : maps) {
                 String key = keys.get("e_key") + "__";
-                Elements gsColor = doc.select("el-input[keyname~=^" + key + "]");
-                for (Element element : gsColor) {
-                    element.parent().attr("gscolor", "11");
+                //采用质检html渲染方式获取表单数据
+                Elements select = doc.select("table").first().select("[keyname^=" + key + "]");
+                if(list.contains(tabName + ":" + keys.get("e_key"))){
+                    //当前元素不执行公式
+                    select.stream().filter(Objects::nonNull).forEach(element -> element.attr("clearFormula", "1"));
+                }else{
+                    //当前元素不执行公式
+                    select.stream().filter(Objects::nonNull).forEach(element -> element.attr("clearFormula", "0"));
+                    for (Element element : select) {
+                        element.parent().attr("gscolor", "11");
+                    }
                 }
 
-                Elements dateColor = doc.select("el-date-picker[keyname~=^" + key + "]");
-                for (Element element : dateColor) {
-                    element.parent().attr("gscolor", "11");
-                }
+//                Elements gsColor = doc.select("el-input[keyname~=^" + key + "]");
+//                if(list.contains(tabName + ":" + keys.get("e_key"))){
+//                    gsColor.stream().filter(Objects::nonNull).forEach(element -> element.attr("clearFormula", "1"));
+//                }else{
+//                    for (Element element : gsColor) {
+//                        element.parent().attr("gscolor", "11");
+//                    }
+//                }
+//                Elements dateColor = doc.select("el-date-picker[keyname~=^" + key + "]");
+//                if(list.contains(tabName + ":" + keys.get("e_key"))){
+//                    dateColor.stream().filter(Objects::nonNull).forEach(element -> element.attr("clearFormula", "1"));
+//                }else{
+//                    for (Element element : dateColor) {
+//                        element.parent().attr("gscolor", "11");
+//                    }
+//                }
+
             }
         }
         doc.select("Col").remove();
@@ -3003,7 +3034,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         } else {
             return R.fail("该合同段没有委托单权限业务");
         }
-        Object excelHtml = getExcelHtml(pkeyId);
+        Object excelHtml = getExcelHtml(pkeyId, null);
         return excelHtml;
     }