Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

liuyc 2 gadi atpakaļ
vecāks
revīzija
fd167ef810

+ 17 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ChartOption.java

@@ -0,0 +1,17 @@
+package org.springblade.manager.dto;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author yangyj
+ * @Date 2023/7/12 15:31
+ * @description TODO
+ */
+@Data
+public class ChartOption{
+     private Long pkeyId;
+     private String id;
+     private Map data;
+}

+ 6 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/MetadataClassificationServiceImpl.java

@@ -420,8 +420,9 @@ public class MetadataClassificationServiceImpl
                         valueBuild.append(" NULL ");
                     }
                 }
+                //注意,user有可能获取不到,出错关注一下这个
                 sqlBuild.append("(id,tenant_id, create_user, create_time, update_user, update_time, status, is_deleted,contract_id, file_id " + fieldBuild.toString() + " ) ");
-                sqlBuild.append("values('" + SnowFlakeUtil.getId() + "','" + user.getTenantId() + "','" + user.getUserId() + "', '" + DateUtil.formatDateTime(new Date()) + "', '" + user.getUserId() + "', '" + DateUtil.formatDateTime(new Date()) + "', '0', '0','" + byId.getContractId() + "', '" + fileId + "' " + valueBuild.toString() + ")");
+                sqlBuild.append("values('" + SnowFlakeUtil.getId() + "','" +user==null?-1:user.getTenantId() + "','" + user==null?-1:user.getUserId() + "', '" + DateUtil.formatDateTime(new Date()) + "', '" + user==null?-1:user.getUserId() + "', '" + DateUtil.formatDateTime(new Date()) + "', '0', '0','" + byId.getContractId() + "', '" + fileId + "' " + valueBuild.toString() + ")");
             } else {
                 sqlBuild.append("update u_metadata_file set ");
                 for (MetadataClassification key : metadataClassifications) {
@@ -429,11 +430,13 @@ public class MetadataClassificationServiceImpl
                         sqlBuild.append(" " + key.getFieldKey() + " = '" + keyValue.get(key.getContainerName()) + "' , ");
                     }
                 }
-                sqlBuild.append(" update_user = '" + user.getUserId() + "' , ");
+                if(user != null && user.getUserId()!=null) {
+                    sqlBuild.append(" update_user = '" + user==null?-1:user.getUserId() + "' , ");
+                }
                 sqlBuild.append(" update_time = '" + DateUtil.formatDateTime(new Date()) + "' ");
                 sqlBuild.append(" where id = " + metadataMap.get("id"));
             }
-            jdbcTemplate.execute(sqlBuild.toString());
+            jdbcTemplate.execute(sqlBuild.toString().replaceAll("\\\\",""));
         }
     }
 }

+ 2 - 2
blade-service/blade-control/src/main/java/org/springblade/control/controller/ProjectCostBudgetController.java

@@ -85,8 +85,8 @@ public class ProjectCostBudgetController {
             @ApiImplicitParam(name = "endDate", value = "结束日期", required = true),
     })
     public R<Integer> getWorkDays(@RequestParam("startDate") @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate startDate,
-                         @RequestParam("endDate") @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate endDate){
-        return R.data(budgetService.getWorkDays(startDate,endDate));
+                         @RequestParam("endDate") @DateTimeFormat(pattern="yyyy-MM-dd")LocalDate endDate,@RequestParam("planTaskType")Long planTaskType){
+        return R.data(budgetService.getWorkDays(startDate,endDate,planTaskType));
     }
 
 //    /**

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -42,7 +42,7 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     //根据id修改状态
     void updateStatus(Long id, int status);
 
-    Integer getWorkDays(LocalDate startDate, LocalDate endDate);
+    Integer getWorkDays(LocalDate startDate, LocalDate endDate,Long planTaskType);
 
     ProjectCostBudgetVO3 planOverview();
 

+ 73 - 46
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -29,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -306,16 +307,17 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                     vo2.setPlanEndTime(endDate);
                     //根据任务类型设置父计划的工作天数,固定任务1,临时任务2
                     if (taskMap.get(vo2.getPlanTaskType()).get(0).getDictValue().intValue() == 1){
-                        vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate)));
+                        vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate) + 1));
                     }else {
-                        if (endDate.compareTo(startDate) > 35){
-                            //工作天数,工具只能获取50天之内的
-                            int i = 0;
-                            while (endDate.compareTo(startDate) > 0){
-                                i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
-                                startDate = startDate.plusDays(36L);
-                            }
-                            vo2.setPlanDays(new BigDecimal(i));
+                        if (startDate.until(endDate,ChronoUnit.DAYS) > 35){
+                            throw new ServiceException("请不要制定超过一个月的临时计划");
+//                            //工作天数,工具只能获取50天之内的
+//                            int i = 0;
+//                            while (endDate.compareTo(startDate) > 0){
+//                                i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
+//                                startDate = startDate.plusDays(36L);
+//                            }
+//                            vo2.setPlanDays(new BigDecimal(i));
                         }else {
                             vo2.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(startDate, endDate)));
                         }
@@ -508,8 +510,13 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
      * 根据起止日期获取工作日
      */
     @Override
-    public Integer getWorkDays(LocalDate startDate, LocalDate endDate) {
-        return CommonUtil.getWorkDays(startDate,endDate);
+    public Integer getWorkDays(LocalDate startDate, LocalDate endDate,Long planTaskType) {
+        DictInfo info = baseMapper.getTaskType(planTaskType);
+        if (info.getDictValue().intValue() == 1){
+            return new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)).intValue() + 1 ;
+        }else {
+            return CommonUtil.getWorkDays(startDate, endDate);
+        }
     }
 
     /**
@@ -937,8 +944,10 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
     @Override
     public ProjectCostBudgetVO2 updateMainPlan(ProjectCostBudgetVO2 vo2) {
         //先判断如果数据都没填写,则设置可以分解子计划
-        if (vo2.getPlanTaskType() == null && StringUtils.isBlank(vo2.getPlanTaskDesc()) && StringUtils.isBlank(vo2.getPlanTarget()) && vo2.getPlanDays() == null){
+        if (vo2.getPlanTaskType() == null && StringUtils.isBlank(vo2.getPlanTaskDesc()) && StringUtils.isBlank(vo2.getPlanTarget())
+                && vo2.getPlanStartTime() == null && vo2.getPlanEndTime() == null){
             vo2.setPlanTaskTypeValue(null);
+            vo2.setPlanDays(null);
             vo2.setIsShowChildren(1);
             return vo2;
         }
@@ -959,18 +968,19 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         int type = taskType.getDictValue().intValue();
         //根据任务类型设置父计划的工作天数,固定任务1,临时任务2
         if (type == 1){
-            vo2.setPlanDays(new BigDecimal(vo2.getPlanEndTime().compareTo(vo2.getPlanStartTime())));
+            vo2.setPlanDays(new BigDecimal(vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) + 1));
         }else {
-            if (vo2.getPlanEndTime().compareTo(vo2.getPlanStartTime()) > 35){
-                //工作天数,工具只能获取50天之内的
-                LocalDate startDate = vo2.getPlanStartTime();
-                LocalDate endDate = vo2.getPlanEndTime();
-                int i = 0;
-                while (endDate.compareTo(startDate) > 0){
-                    i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
-                    startDate = startDate.plusDays(36L);
-                }
-                vo2.setPlanDays(new BigDecimal(i));
+            if (vo2.getPlanStartTime().until(vo2.getPlanEndTime(),ChronoUnit.DAYS) > 35){
+                throw new ServiceException("请不要制定超过一个月的临时计划");
+//                //工作天数,工具只能获取50天之内的
+//                LocalDate startDate = vo2.getPlanStartTime();
+//                LocalDate endDate = vo2.getPlanEndTime();
+//                int i = 0;
+//                while (endDate.compareTo(startDate) > 0){
+//                    i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
+//                    startDate = startDate.plusDays(36L);
+//                }
+//                vo2.setPlanDays(new BigDecimal(i));
             }else {
                 vo2.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(vo2.getPlanStartTime(), vo2.getPlanEndTime())));
             }
@@ -978,6 +988,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         if (vo2.getPlanDays().intValue() > vo2.getBudgetDays().intValue()){
             vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长("+(vo2.getPlanDays().intValue() - vo2.getBudgetDays().intValue())+")天");
             vo2.setTaskFinishedStatus(1);
+        }else {
+            vo2.setTaskFinishedStatus(0);
         }
         vo2.setIsShowChildren(0);
         return vo2;
@@ -999,7 +1011,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             }else {
                 taskType = budgetVO2.getPlanTaskType();
             }
-            DictInfo task = baseMapper.getTaskType(vo2.getPlanTaskType());
+            DictInfo task = baseMapper.getTaskType(taskType);
             //拼接父计划信息
             BigDecimal workDays = new BigDecimal(0);
             LocalDate startDate = LocalDate.MAX;
@@ -1007,6 +1019,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             StringBuilder descStr = new StringBuilder();
             StringBuilder targetStr = new StringBuilder();
             int j = 1;
+            Boolean isFinished = true;
             for (ProjectCostBudgetVO2 l : list) {
                 //校验数据
                 if (l.getPlanTaskType() == null){
@@ -1022,14 +1035,17 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 if (!taskType.equals(l.getPlanTaskType())){
                     throw new ServiceException("子计划任务类型不一致");
                 }
+                if (budgetVO2.getTaskApprove() == null || budgetVO2.getTaskApprove() != 1){
+                    isFinished = false;
+                }
                 //计算总天数
                 if (l.getPlanDays() != null) {
                     workDays = workDays.add(l.getPlanDays());
                 }else {
                     if (task.getDictValue().intValue() == 1) {
-                        l.setPlanDays(new BigDecimal(endDate.compareTo(startDate)));
+                        l.setPlanDays(new BigDecimal(l.getPlanStartTime().until(l.getPlanEndTime(),ChronoUnit.DAYS) + 1));
                     } else {
-                        if (l.getPlanEndTime().compareTo(budgetVO2.getPlanStartTime()) > 35) {
+                        if (l.getPlanStartTime().until(l.getPlanEndTime(), ChronoUnit.DAYS) > 35) {
                             throw new ServiceException("请不要制定超过一个月的临时计划");
                         }else {
                             l.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(budgetVO2.getPlanStartTime(), budgetVO2.getPlanEndTime())));
@@ -1049,10 +1065,19 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 targetStr.append(j+"."+l.getPlanTarget()+"。");
                 j++;
             }
+
+            //所有子计划完成,设置父计划为绿色
+            if (isFinished){
+                vo2.setTaskFinishedStatus(2);
+            }
             //计算是否超过预算
-            if (workDays.intValue() > vo2.getBudgetDays().intValue()){
-                vo2.setTaskFinishedStatus(1);
-                vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长("+(workDays.intValue() - vo2.getBudgetDays().intValue())+"天)");
+            if (vo2.getTaskFinishedStatus() == null || vo2.getTaskFinishedStatus() != 2) {
+                if (workDays.intValue() > vo2.getBudgetDays().intValue()) {
+                    vo2.setTaskFinishedStatus(1);
+                    vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长(" + (workDays.intValue() - vo2.getBudgetDays().intValue()) + "天)");
+                } else {
+                    vo2.setTaskFinishedStatus(null);
+                }
             }
 
             //根据子计划设置父计划任务类型
@@ -1068,16 +1093,17 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             vo2.setPlanEndTime(endDate);
             //根据任务类型设置父计划的工作天数,固定任务1,临时任务2
             if (task.getDictValue().intValue() == 1){
-                vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate)));
+                vo2.setPlanDays(new BigDecimal(startDate.until(endDate,ChronoUnit.DAYS)+ 1));
             }else {
-                if (endDate.compareTo(startDate) > 35){
-                    //工作天数,工具只能获取50天之内的
-                    int i = 0;
-                    while (endDate.compareTo(startDate) > 0){
-                        i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
-                        startDate = startDate.plusDays(36L);
-                    }
-                    vo2.setPlanDays(new BigDecimal(i));
+                if (startDate.until(endDate,ChronoUnit.DAYS) > 35){
+                    throw new ServiceException("请不要制定超过一个月的临时计划");
+//                    //工作天数,工具只能获取50天之内的
+//                    int i = 0;
+//                    while (endDate.compareTo(startDate) > 0){
+//                        i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
+//                        startDate = startDate.plusDays(36L);
+//                    }
+//                    vo2.setPlanDays(new BigDecimal(i));
                 }else {
                     vo2.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(startDate, endDate)));
                 }
@@ -1085,14 +1111,15 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             vo2.setIsShowEdit(0);
 
         }else {
-         vo2.setPlanTaskType(null);
-         vo2.setPlanTaskDesc(null);
-         vo2.setPlanTarget(null);
-         vo2.setPlanStartTime(null);
-         vo2.setPlanEndTime(null);
-         vo2.setPlanDays(null);
-         vo2.setIsShowEdit(1);
-         return vo2;
+            vo2.setPlanTaskTypeValue(null);
+             vo2.setPlanTaskType(null);
+             vo2.setPlanTaskDesc(null);
+             vo2.setPlanTarget(null);
+             vo2.setPlanStartTime(null);
+             vo2.setPlanEndTime(null);
+             vo2.setPlanDays(null);
+             vo2.setIsShowEdit(1);
+             return vo2;
         }
         return vo2;
     }

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

@@ -498,9 +498,11 @@ public class FormulaController {
         return R.data(map);
     }
 
-    @GetMapping("/chart-init")
+    @PostMapping("/chart-init")
     @ApiOperationSupport(order = 11)
-    public R<Object> chartInit(Long pkeyId,String id){
+    public R<Object> chartInit(@RequestBody ChartOption option){
+            Long pkeyId=option.getPkeyId();
+            String id=option.getId();
             WbsTreePrivate wtp = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId,pkeyId));
             if(wtp!=null&&Func.isNotEmpty(id)){
                 /*获取配置*/
@@ -514,7 +516,33 @@ public class FormulaController {
                        String[] rely = Func.toStr(config.get("rely")).split(",");
                        String ky=rely[0].split(":")[1];
                        String kx=rely[1].split(":")[1];
-                       List<Map<String,Object>> dataMap= this.jdbcTemplate.queryForList("select "+ky+","+kx+" from "+wtp.getInitTableName() +" where group_id="+id+" and p_key_id ="+pkeyId);
+                       Map<String,Object> formData = option.getData();
+                       List<Map<String,Object>> dataMap;
+                       if(formData!=null&&formData.size()>0){
+                           dataMap=new ArrayList<>();
+                           Map<String,Object> md= new HashMap<>();
+                           dataMap.add(md);
+                           StringBuilder sy= new StringBuilder();
+                           StringBuilder sx = new StringBuilder();
+                           formData.forEach((k,v)->{
+                               String[] ka=k.split("__");
+                               if(ky.equals(ka[0])){
+                                   sy.append(v).append("_^_").append(ka[1]).append("☆");
+                               }else if(kx.equals(ka[0])){
+                                   sx.append(v).append("_^_").append(ka[1]).append("☆");
+                               }
+                           });
+                           if(sy.length()>1){
+                               sy.deleteCharAt(sy.length()-1);
+                           }
+                           if(sx.length()>1){
+                               sx.deleteCharAt(sx.length()-1);
+                           }
+                           md.put(ky,sy.toString());
+                           md.put(kx,sx.toString());
+                       }else{
+                            dataMap= this.jdbcTemplate.queryForList("select "+ky+","+kx+" from "+wtp.getInitTableName() +" where group_id="+id+" and p_key_id ="+pkeyId);
+                       }
                        if(Func.isNotEmpty(dataMap)){
                            Map<String,Object> data = dataMap.get(0);
                            String dy= Func.toStr(data.get(ky));
@@ -523,7 +551,7 @@ public class FormulaController {
                               Map<String,String> coordsMap = FormulaUtils.getElementCell(wtp.getHtmlUrl());
                               List<ElementData> ly = FormulaUtils.getElementDataList(coordsMap.get(ky),dy);
                               List<ElementData> lx = FormulaUtils.getElementDataList(coordsMap.get(kx),dx);
-                               JSONArray jsonArray =new JSONArray();
+                              JSONArray jsonArray =new JSONArray();
                               for(int i=0;i< Math.min(ly.size(),lx.size());i++){
                                      ElementData edy= ly.get(i);
                                      ElementData edx = lx.get(i);
@@ -534,7 +562,7 @@ public class FormulaController {
                               if(!jsonArray.isEmpty()){
                                   JSONObject chartData= job.getJSONArray("series").getJSONObject(0);
                                   chartData.put("data",jsonArray);
-                                  return R.data(job.toJSONString());
+                                  return R.data(job);
                               }
                            }
                        }

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

@@ -1966,10 +1966,39 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         reData.remove("contractId");
         reData.remove("pkeyId");
         reData.remove("projectId");
+        chart(reData,wbsTreePrivate);
         list.add(reData);
         return list;
     }
-
+    private void  chart(Map<String,Object> reData,WbsTreePrivate wtp){
+        try {
+            if(reData.size()>0&&wtp!=null) {
+                List<Map<String, Object>> configList = this.jdbcTemplate.queryForList("select d.rely ,b.e_key ekey from m_wbs_tree_private a join  m_wbs_form_element b on a.init_table_id=b.f_id join m_element_formula_mapping c on b.id=c.element_id join m_formula d on c.formula_id=d.id  where p_key_id=" + wtp.getPKeyId() + " and b.is_deleted=0 and d.formula like 'FC.chart%' limit 1");
+                if (Func.isNotEmpty(configList)) {
+                    Map<String, Object> config = configList.get(0);
+                    String[] rely = Func.toStr(config.get("rely")).split(",");
+                    String ky = rely[0].split(":")[1];
+                    String kx = rely[1].split(":")[1];
+                    Map<String,String> coordsMap = FormulaUtils.getElementCell(wtp.getHtmlUrl());
+                    List<String> ly= Arrays.stream((coordsMap.get(ky)).split(";")).filter(Func::isNotBlank).map(k->ky+"__"+k).collect(Collectors.toList());
+                    List<String> lx= Arrays.stream((coordsMap.get(ky)).split(";")).filter(Func::isNotBlank).map(k->kx+"__"+k).collect(Collectors.toList());
+                    List<String> fct= new ArrayList<>();
+                    if(ly.size()>0){
+                        fct.addAll(ly);
+                    }
+                    if(lx.size()>0){
+                        fct.addAll(lx);
+                    }
+                    String formChartKey= String.join(",", fct);
+                    if(Func.isNotEmpty(formChartKey)){
+                        reData.put("formChartKey",formChartKey);
+                    }
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
 
     /**
      * 试验 获取填报信息 - 施工关联试验数据

+ 22 - 18
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -2174,24 +2174,28 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return R.data(table + "");
     }
 
-    private void  chart(  Element table,WbsTreePrivate wtp){
-       List<Map<String,Object>>  configList= this.jdbcTemplate.queryForList("select d.rely ,b.e_key ekey from m_wbs_tree_private a join  m_wbs_form_element b on a.init_table_id=b.f_id join m_element_formula_mapping c on b.id=c.element_id join m_formula d on c.formula_id=d.id  where p_key_id="+wtp.getPKeyId()+" and b.is_deleted=0 and d.formula like 'FC.chart%' limit 1");
-       if(Func.isNotEmpty(configList)){
-           Map<String,Object> config =configList.get(0);
-           String[] rely = Func.toStr(config.get("rely")).split(",");
-           String ky=rely[0].split(":")[1];
-           String kx=rely[1].split(":")[1];
-           String kt=Func.toStr(config.get("ekey"));
-           Element inputElement = table.select("el-input[keyname^="+kt+"__").first();
-           String keyname=inputElement.attr("keyname");
-           Element echartElement = new Element("hc-echart");
-           echartElement.attr(":option", "formData."+keyname);
-           echartElement.attr("id", keyname);
-           echartElement.attr("keyname", keyname);
-           inputElement.replaceWith(echartElement);
-           table.select("el-input[keyname^="+ky+"__").forEach(e->e.attr("chartX","").attr("@blur","setChartData"));
-           table.select("el-input[keyname^="+kx+"__").forEach(e->e.attr("@blur","setChartData").attr("chartY",""));
-       }
+    private void  chart(Element table,WbsTreePrivate wtp){
+        try {
+            List<Map<String, Object>> configList = this.jdbcTemplate.queryForList("select d.rely ,b.e_key ekey from m_wbs_tree_private a join  m_wbs_form_element b on a.init_table_id=b.f_id join m_element_formula_mapping c on b.id=c.element_id join m_formula d on c.formula_id=d.id  where p_key_id=" + wtp.getPKeyId() + " and b.is_deleted=0 and d.formula like 'FC.chart%' limit 1");
+            if (Func.isNotEmpty(configList)) {
+                Map<String, Object> config = configList.get(0);
+                String[] rely = Func.toStr(config.get("rely")).split(",");
+                String ky = rely[0].split(":")[1];
+                String kx = rely[1].split(":")[1];
+                String kt = Func.toStr(config.get("ekey"));
+                Element inputElement = table.select("el-input[keyname^=" + kt + "__").first();
+                String keyname = inputElement.attr("keyname");
+                Element echartElement = new Element("hc-echart");
+                echartElement.attr(":option", "formData." + keyname);
+                echartElement.attr("id", keyname);
+                echartElement.attr("keyname", keyname);
+                inputElement.replaceWith(echartElement);
+                table.select("el-input[keyname^=" + ky + "__").forEach(e -> e.attr("@blur", "getRegularExpression($event,'','请输入字符串',22,1, 'chart', 1, 0)"));
+                table.select("el-input[keyname^=" + kx + "__").forEach(e -> e.attr("@blur", "getRegularExpression($event,'','请输入字符串',22,1, 'chart', 0, 1)"));
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
 
     }