Browse Source

Merge remote-tracking branch 'origin/master'

liuyc 2 năm trước cách đây
mục cha
commit
80880ed99f

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/RangeInfo.java

@@ -2,6 +2,7 @@ package org.springblade.manager.dto;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.Func;
 
@@ -14,7 +15,12 @@ import java.util.stream.Collectors;
  * @Date 2022/9/22 17:52
  * @description TODO
  */
+@Data
 public class RangeInfo {
+
+    @ApiModelProperty( value = "方向",required = true)
+    private String direction;
+
     @ApiModelProperty(
             value = "设计值",
             required = true

+ 6 - 3
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -1573,7 +1573,10 @@ public class CustomFunction {
     }
 
 /*    public static void main(String[] args) {
-        Double[] a = scopeParse("≤30",0,1);
+        Double[] a = scopeParse("≤5",0,1);
+        Double[] b = scopeParse("≦5",0,1);
+        Double[] c = scopeParse("≤5",0,1);
+
         System.out.println(a);
     }*/
 
@@ -1588,8 +1591,8 @@ public class CustomFunction {
             double min = 0;
             double max = 0;
             devStr = devStr.replaceAll("\\s+", "");
-            if (devStr.contains("≤") || devStr.contains("<=") || devStr.contains("<")) {
-                devStr = devStr.replace("≤", "").replace("<=", "");
+            if (devStr.contains("≤") || devStr.contains("<=") || devStr.contains("<")||devStr.contains("≦")) {
+                devStr = devStr.replace("≤", "").replace("<=", "").replace("≦","");
                 max = designD + Double.parseDouble(devStr) * xND;
             } else if (devStr.contains("≥") || devStr.contains(">=") || devStr.contains(">")) {
                 devStr = devStr.replace("≥", "").replace(">=", "");

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

@@ -454,8 +454,6 @@ public class ExcelTabController extends BladeController {
     })
     public R<List<ExceTabTreVO>> saveLinkeTab(Long exceTabId, Long tabId) throws IOException {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        //String file_path = "C:\\Users\\泓创开发\\Desktop";
-
         // 关联 私有项目 wbs 数据信息
         WbsTreePrivate wbsTree = new WbsTreePrivate();
         wbsTree.setPKeyId(tabId);
@@ -474,7 +472,6 @@ public class ExcelTabController extends BladeController {
 
         // 复制模版htmlURL
         File file_in = ResourceUtil.getFile(excelTab.getHtmlUrl());
-        // File file_in = ResourceUtil.getFile(file_path+"1542338623020961794.html");
         String filecode = SnowFlakeUtil.getId() + "";
         String thmlUrl = file_path + "/privateUrl/" + filecode + ".html";
         File file_out = ResourceUtil.getFile(thmlUrl);

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

@@ -499,6 +499,10 @@ public class FormulaController {
     @PostMapping("/chart-init")
     @ApiOperationSupport(order = 11)
     public R<Object> chartInit(@RequestBody ChartOption option){
+           /*1.获取公式配置,如果存在子公式,则一直查找到最终公式*/
+           /*2.查找所有依赖元素的所有数据,按表单排序*/
+           /*3.计算结果*/
+           /*4.查找当前表对应返回配置模版结合计算结果生成option*/
             Long pkeyId=option.getPkeyId();
             String id=option.getId();
             WbsTreePrivate wtp = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId,pkeyId));
@@ -572,5 +576,77 @@ public class FormulaController {
             return R.data("{}");
     }
 
+    public Formula formulaAct(Long pkeyId){
+        List<Map<String,Object>>  configList= this.jdbcTemplate.queryForList("select d.rely,d.formula ,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="+pkeyId+" 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 relyStr=config.get("rely").toString();
+            String[] rely = relyStr.split(",");
+            String ky=rely[0].split(":")[1];
+            String kx=rely[1].split(":")[1];
+            Formula formulaY =new Formula();
+            formulaY.setFormula(config.get("formula").toString());
+            formulaY.setRely(relyStr);
+            formulaY.setFormula(nest(formulaY.getFormula(),formulaY.getRely()));
+            this.service.relyParse(formulaY);
+        }
+        return null;
+    }
+
+
+    /**
+     * @Description 根据元素码和当前工序pkeyId返回元素数据
+     * @Param [codes, pkeyId]
+     * @return java.util.Map<java.lang.String,java.util.List<org.springblade.manager.dto.ElementData>>
+     * @Author yangyj
+     * @Date 2023.08.01 14:53
+     **/
+    public Map<String,List<ElementData>> getDataFromCodes(List<String> codes,WbsTreePrivate wtp,String id){
+        String s = codes.stream().collect(Collectors.joining("','","'","'"));
+        List<Map<String,Object>> listMap = this.jdbcTemplate.queryForList("select a.id elementId,a.e_key ekey,a.e_name eName,b.init_table_name tableName,b.html_url url,b.p_key_id pkeyId,b.node_name nodeName,CONCAT(b.init_table_name,':',a.e_key) tk from m_wbs_form_element a join m_wbs_tree_private b on a.f_id=b.init_table_id where b.parent_id="+wtp.getParentId()
+                +" and b.project_id="+wtp.getProjectId()+" and b.is_deleted=0 and a.is_deleted=0  and CONCAT(b.init_table_name,':',a.e_key) in("+s+") ORDER BY b.sort,b.create_time");
+        if(listMap.size()>codes.size()){
+            Map<String,Map<String,String>> coordsMap = new HashMap<>();
+            for(Map<String,Object> m:listMap){
+                String tableName = m.get("tableName").toString();
+                if(!coordsMap.containsKey(tableName)){
+                    coordsMap.put(tableName,FormulaUtils.getElementCell(m.get("url").toString()));
+                }
+            }
+            Map<String,List<Map<String,Object>>> group=   listMap.stream().collect(Collectors.groupingBy(m->m.get("tableName").toString()));
+            Map<String,String> codeDataMap= new HashMap<>();
+            group.forEach((k,v)->{
+                String sql ="select "+ v.stream().map(m->m.get("ekey").toString()).distinct().collect(Collectors.joining(","))+" from "
+                        +k+" where p_key_id in("+v.stream().map(m->m.get("pkeyId").toString()).distinct().collect(Collectors.joining(","))
+                        +" and group id ="+id;
+                List<Map<String,Object>> dataListMap = this.jdbcTemplate.queryForList(sql);
+                if(dataListMap.size()>0){
+                    for(Map<String,Object> dm:listMap){
+                       dm.forEach((ek,ev)->{
+                           codeDataMap.merge(k+":"+ek,ev.toString(),(v1,v2)->v1+";;"+v2);
+                       });
+                    }
+                }
+            });
+        }
+        Map<String,List<ElementData>> result = new HashMap<>();
+        return  result;
+    }
+
+
+    public String nest(String formula,String rely){
+        if(Func.isNotBlank(rely)) {
+            String s = Arrays.stream(rely.replaceAll("[\\s]+", "").split(",")).collect(Collectors.joining(",',", "'", "'"));
+            List<Map<String, Object>> listMap = this.jdbcTemplate.queryForList("select CONCAT(a.tab_en_name,':',b.e_key) ek,b.id,b.e_name ename,c.formula_id formulaId,d.formula,d.rely from m_table_info a join m_wbs_form_element b on a.id=b.f_id join m_element_formula_mapping c on b.id=c.element_id left join m_formula d on c.formula_id=d.id where concat(a.tab_en_name,':',b.e_key) in(" + s + ") and b.is_deleted =0 and c.is_deleted=0 ");
+            for (Map<String, Object> m : listMap) {
+                if (StringUtils.isNotEmpty(m.get("formulaId"))) {
+                    String ek = m.get("ek").toString();
+                    String formulaSub = nest(m.get("formula").toString(), m.get("rely").toString());
+                    formula = formula.replace(ek, formulaSub);
+                }
+            }
+        }
+        return formula;
+    }
 
 }

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

@@ -318,7 +318,7 @@ public class TextdictInfoController extends BladeController {
                 element.empty().append(checkbox);
             }
         } else if (textdictInfo.getTextId().equals("date")) { // 日期--年月日时分秒
-            element.empty().append("<el-date-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='datetime' format='YYYY年MM月DD日 HH:mm:ss' value-format='YYYY年MM月DD日 hh:mm:ss' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-date-picker>");
+            element.empty().append("<el-date-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='datetime' format='YYYY年MM月DD日 HH:mm:ss' value-format='YYYY年MM月DD日 HH:mm:ss' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-date-picker>");
         } else if (textdictInfo.getTextId().equals("dateYMD")) { // 日期--年月日
             element.empty().append("<el-date-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='date' format='YYYY年MM月DD日' value-format='YYYY年MM月DD日' placeholder=" + placeholder + " keyname=" + keyname + " weighing=" + weighing + "  @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%'   placeholder='" + placeholder + "'> </el-date-picker>");
         } else if (textdictInfo.getTextId().equals("dateHMS")) { // 日期--时分秒

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ExcelTabMapper.xml

@@ -22,6 +22,7 @@
         <result column="attach_size" property="attachSize"/>
         <result column="tab_type" property="tabType"/>
         <result column="sort" property="sort"/>
+        <result column="tab_id" property="tabId"/>
     </resultMap>
 
     <resultMap id="treeNodeResultMap" type="org.springblade.manager.vo.ExceTabTreVO">

+ 225 - 200
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -298,7 +298,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         String lastStr = dataInfo2.getString(ziduan[0]) + "_^_" + ziduan[0].split("__")[1];
                         for (int i = 1; i < ziduan.length; i++) {
                             String keyData = dataInfo2.getString(ziduan[i]);
-                            if (StringUtils.isNotEmpty(keyData)&&!keyData.equals("")) {
+                            if (StringUtils.isNotEmpty(keyData) && !keyData.equals("")) {
                                 lastStr += "☆" + dataInfo2.getString(ziduan[i]) + "_^_" + ziduan[i].split("__")[1];
                             }
 
@@ -959,6 +959,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         transactionManager1.rollback(transactionStatus);
                         log.append(e.getMessage()).append("@@");
                         e.printStackTrace();
+                        return R.fail(wbsTreeContract.getNodeName());
                     }
                 }
 
@@ -1085,105 +1086,117 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
         // 匹配关联
         try {
-            File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
-            if (file1.exists()) {
-
-                String htmlString = IoUtil.readToString(new FileInputStream(file1));
-                Document doc = Jsoup.parse(htmlString);
-
-                // 解析
-                // 模糊匹配
-                Elements dwtitle = doc.select("el-input[placeholder~=.*承包单位]");
-                Elements sgtitle = doc.select("el-input[placeholder~=^施工单位]");
-                Elements sgtitle1 = doc.select("el-input[placeholder=安装单位]");
-                sgtitle.addAll(sgtitle1);
-
-                Elements htdtitle = doc.select("el-input[placeholder~=.*合同段.*]");
-                Elements htdtitle1 = doc.select("el-input[placeholder~=合同名称.*]");
-                htdtitle.addAll(htdtitle1);
-
-                Elements jltitle = doc.select("el-input[placeholder~=监理单位.*]");
-
-                Elements bhtitle = doc.select("el-input[placeholder~=^编号]");
-                Elements bhtitle1 = doc.select("el-input[placeholder~=合同编号.*]");
-                bhtitle.addAll(bhtitle1);
-
-
-                Elements xmtitle = doc.select("el-input[placeholder~=^项目名称]");
-
+            InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsTreeContract.getHtmlUrl());
 
-                // Elements title = doc.select("el-input[placeholder~=^编号]");
+            String htmlString = IoUtil.readToString(inputStreamByUrl);
+            Document doc = Jsoup.parse(htmlString);
 
-                /**
-                 * 承包单位 承包单位、施工单位:引用施工单位名称 ,
-                 * 监理单位:引用监理单位名称
-                 * 合同段、所属建设项目(合同段):引用合同段编号
-                 *
-                 * 施工单位:施工单位 和 安装单位
-                 *
-                 */
-                ContractInfo contractInfo = contractInfoService.getById(wbsTreeContract.getContractId());
-                // 施工单位名称
-                if (dwtitle.size() >= 1) {
-                    int y = Integer.parseInt(dwtitle.attr("trindex"));
-                    if (y <= 10) {
-                        reData.put(dwtitle.attr("keyName"), contractInfo.getConstructionUnitName());
-                    }
+            // 解析
+            // 模糊匹配
+            Elements dwtitle = doc.select("el-input[placeholder~=.*承包单位]");
+            Elements sgtitle = doc.select("el-input[placeholder~=^施工单位]");
+            Elements sgtitle1 = doc.select("el-input[placeholder=安装单位]");
+            sgtitle.addAll(sgtitle1);
+
+            //合同段显示合同编号
+            Elements htdtitle = doc.select("el-input[placeholder~=.*合同段.*]");
+            //合同名称显示合同名称
+            Elements htdtitle1 = doc.select("el-input[placeholder~=合同名称.*]");
+//            htdtitle.addAll(htdtitle1);
+
+            Elements jltitle = doc.select("el-input[placeholder~=监理单位.*]");
+
+            //编号为父节点划分编号
+            Elements bhtitle = doc.select("el-input[placeholder~=^编号]");
+            //合同编号为合同编号
+            Elements bhtitle1 = doc.select("el-input[placeholder~=合同编号.*]");
+            bhtitle1.addAll(htdtitle);
+
+            Elements xmtitle = doc.select("el-input[placeholder~=^项目名称]");
+
+
+            // Elements title = doc.select("el-input[placeholder~=^编号]");
+
+            /**
+             * 承包单位 承包单位、施工单位:引用施工单位名称 ,
+             * 监理单位:引用监理单位名称
+             * 合同段、所属建设项目(合同段):引用合同段编号
+             *
+             * 施工单位:施工单位 和 安装单位
+             *
+             */
+            ContractInfo contractInfo = contractInfoService.getById(wbsTreeContract.getContractId());
+            // 施工单位名称
+            if (dwtitle.size() >= 1) {
+                int y = Integer.parseInt(dwtitle.attr("trindex"));
+                if (y <= 10) {
+                    reData.put(dwtitle.attr("keyName"), contractInfo.getConstructionUnitName());
+                }
 
+            }
+            if (sgtitle.size() >= 1) {
+                int y = Integer.parseInt(sgtitle.attr("trindex"));
+                if (y <= 10) {
+                    reData.put(sgtitle.attr("keyName"), contractInfo.getConstructionUnitName());
                 }
-                if (sgtitle.size() >= 1) {
-                    int y = Integer.parseInt(sgtitle.attr("trindex"));
-                    if (y <= 10) {
-                        reData.put(sgtitle.attr("keyName"), contractInfo.getConstructionUnitName());
+            }
+
+            // 合同段名称
+            if (htdtitle1.size() >= 1) {
+                for (Element element : htdtitle1) {
+                    int trindex = Integer.parseInt(element.attr("trindex"));
+                    if (trindex <= 8) {
+                        reData.put(element.attr("keyName"), contractInfo.getContractName());
                     }
                 }
+            }
+            // 监理单位名称
+            if (jltitle.size() >= 1) {
 
-                // 合同段名称
-                if (htdtitle.size() >= 1) {
-                    for (Element element : htdtitle) {
-                        int trindex = Integer.parseInt(element.attr("trindex"));
-                        if (trindex <= 8) {
-                            reData.put(element.attr("keyName"), contractInfo.getContractNumber());
-                        }
+                for (Element element : jltitle) {
+                    int trindex = Integer.parseInt(element.attr("trindex"));
+                    if (trindex <= 10) {
+                        reData.put(element.attr("keyName"), contractInfo.getSupervisionUnitName());
                     }
                 }
-                // 监理单位名称
-                if (jltitle.size() >= 1) {
-
-                    for (Element element : jltitle) {
-                        int trindex = Integer.parseInt(element.attr("trindex"));
-                        if (trindex <= 10) {
-                            reData.put(element.attr("keyName"), contractInfo.getSupervisionUnitName());
-                        }
+            }
+            //获取父节点划分编号
+            WbsTreeContract node = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
+                    .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
+                    .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId()));
+            // 编号
+            if (bhtitle.size() >= 1 && contractInfo.getIsReferenceNumber() == 1) {
+                for (Element element : bhtitle) {
+                    int trindex = Integer.parseInt(element.attr("trindex"));
+                    if (trindex <= 10) {
+                        reData.put(element.attr("keyName"), node.getPartitionCode() == null ? "" : node.getPartitionCode());
                     }
                 }
-                //获取父节点划分编号
-                WbsTreeContract node = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
-                        .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
-                        .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId()));
-                // 编号
-                if (bhtitle.size() >= 1 && contractInfo.getIsReferenceNumber() == 1) {
-                    for (Element element : bhtitle) {
-                        int trindex = Integer.parseInt(element.attr("trindex"));
-                        if (trindex <= 10) {
-                            reData.put(element.attr("keyName"), node.getPartitionCode() == null ? "" : node.getPartitionCode());
-                        }
+            }
+            //获取合同编号
+            if (bhtitle1.size() >= 1) {
+                for (Element element : bhtitle1) {
+                    int trindex = Integer.parseInt(element.attr("trindex"));
+                    if (trindex <= 10) {
+                        reData.put(element.attr("keyName"), contractInfo.getContractNumber());
                     }
                 }
+            }
 
-                // 项目名称
-                if (xmtitle.size() >= 1) {
-                    for (Element element : xmtitle) {
-                        int trindex = Integer.parseInt(element.attr("trindex"));
-                        if (trindex <= 6) {
-                            ProjectInfo projectInfo = projectInfoService.getById(wbsTreeContract.getProjectId());
-                            reData.put(element.attr("keyName"), projectInfo.getProjectName());
-                        }
+            // 项目名称
+            if (xmtitle.size() >= 1) {
+                for (Element element : xmtitle) {
+                    int trindex = Integer.parseInt(element.attr("trindex"));
+                    if (trindex <= 6) {
+                        ProjectInfo projectInfo = projectInfoService.getById(wbsTreeContract.getProjectId());
+                        reData.put(element.attr("keyName"), projectInfo.getProjectName());
                     }
                 }
             }
         } catch (FileNotFoundException e) {
             e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
         }
 
         if (dataIn != null && dataIn.size() >= 1) {
@@ -1308,7 +1321,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
         //获取清表信息
         ExcelTab excelTab = this.getById(wbsTreeContract.getExcelId());
-
         if (excelTab == null) {
             return R.fail("失败");
         }
@@ -1365,6 +1377,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             }
         }
 
+        if(pkeyId == 1644218999589830668L){
+          //  System.out.println("12321");
+        }
         //数据不为空
         if (StringUtils.isNotEmpty(wbsTreeContract.getHtmlUrl())) {
             InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsTreeContract.getHtmlUrl());
@@ -1377,115 +1392,122 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
             if (ObjectUtil.isNotEmpty(DataInfo)) {
                 for (String val : DataInfo.keySet()) {
-                    if (val.indexOf("__") >= 0) {
-                        String[] DataVal = val.split("__");
-                        String[] xy = DataVal[1].split("_");
-                        if (Integer.parseInt(xy[0]) < trs.size()) {
-                            Element ytzData = trs.get(Integer.parseInt(xy[0]));
-                            if (ytzData != null) {
-                                Elements tdsx = ytzData.select("td");
-                                if (Integer.parseInt(xy[1]) < tdsx.size()) {
-                                    Element data=  ytzData.getElementById(val);
-                                    //Element data = ytzData.select("td").get(Integer.parseInt(xy[1]));
-                                    if (data != null) {
-                                        if (data.html().indexOf("x1") >= 0 && data.html().indexOf("y1") >= 0) {
-                                            int x1 = 0;
-                                            int x2 = 0;
-                                            int y1 = 0;
-                                            int y2 = 0;
-
-                                            if (data.html().indexOf("el-tooltip") >= 0) {
-                                                x1 = Integer.parseInt(data.children().get(0).children().get(0).attr("x1"));
-                                                x2 = Integer.parseInt(data.children().get(0).children().get(0).attr("x2"));
-                                                y1 = Integer.parseInt(data.children().get(0).children().get(0).attr("y1"));
-                                            } else {
-                                                x1 = Integer.parseInt(data.children().get(0).attr("x1"));
-                                                y1 = Integer.parseInt(data.children().get(0).attr("y1"));
-                                            }
-                                            if (x1 == 0) {
-                                                x1 = 1;
-                                            }
-                                            String myData = DataInfo.get(val) + "";
-                                            if ((myData.indexOf("T") >= 0 && myData.indexOf("-") >= 0) || (myData.indexOf(",") >= 0 && myData.indexOf("]") >= 0)) {
-                                                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
-                                                sdf.setTimeZone(TimeZone.getTimeZone("GTM+8"));
-                                                SimpleDateFormat formatStr = new SimpleDateFormat("yyyy年MM月dd日");
-                                                if (myData.indexOf(",") >= 0 && myData.indexOf("]") >= 0) {
-
-                                                    myData = myData.replace("[", "").replace("]", "").replaceAll("'", "");
-                                                    String[] dataVal = myData.split(",");
-
-                                                    Date Start_dataStr = sdf.parse(dataVal[0]);
-                                                    Date end_dataStr = sdf.parse(dataVal[1]);
-                                                    String StartDate = formatStr.format(Start_dataStr);
-                                                    String endDate = formatStr.format(end_dataStr);
-                                                    if (StartDate.equals(endDate)) {
-                                                        myData = StartDate;
-                                                    } else {
-                                                        myData = StartDate + "-" + endDate;
-                                                    }
-                                                } else {
-                                                    String[] dataStr = myData.split("T")[0].split("-");
-                                                    if (dataStr.length == 3) {
-                                                        myData = StringUtil.format("{}年{}月{}日", dataStr[0], dataStr[1], Integer.parseInt(dataStr[2]));
-                                                    }
-                                                }
-                                            }
+                    Elements datas = doc.getElementsByAttributeValue("keyname", val);
+                    Element data = null;
+                    if(val.equals("key_12__25_0")){
+                        //System.out.println("1231");
+                    }
+                    if (datas.size() >= 1) {
+                        data = datas.get(0);
+                    }
 
-                                            if (myData.indexOf("lang.String") >= 0) {
-                                                Object obj = DataInfo.get(val);
-                                                if (obj instanceof String[]) {
-                                                    String[] dataDate = (String[]) obj;
-                                                    myData = dataDate[0] + "-" + dataDate[1].trim();
-                                                }
-                                            }
+                    if (data != null) {
+                        if (data.hasAttr("x1") && data.hasAttr("y1")) {
+                            int x1 = 0;
+                            int x2 = 0;
+                            int y1 = 0;
+                            int y2 = 0;
 
-                                            //https:bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20220819/b53cb6700db369381e3b03d7737bcdec.jpg__16_1
-                                            if ((myData.indexOf("https") >= 0 || myData.indexOf("http") >= 0) && myData.indexOf("aliyuncs") >= 0) {
-
-                                                InputStream imageIn = CommonUtil.getOSSInputStream(myData);
-                                                byte[] byteNew = IOUtils.toByteArray(imageIn);
-                                                byte[] bytes = CommonUtil.compressImage(byteNew);
-                                                // 这里根据实际需求选择图片类型
-                                                int pictureIdx = workbook.addPicture(bytes, 6);
-                                                CreationHelper helper = workbook.getCreationHelper();
-                                                ClientAnchor anchor = helper.createClientAnchor();
-                                                anchor.setCol1(x1); // param1是列号
-                                                anchor.setCol2(x2);
-                                                anchor.setRow1(y1); // param2是行号
-                                                anchor.setRow2(y2); // param2是行号
-                                                //
-                                                Drawing drawing = sheet.createDrawingPatriarch();
-                                                anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
-                                                // 插入图片
-                                                Picture pict = drawing.createPicture(anchor, pictureIdx); // 调整图片占单元格百分比的大小,1.0就是100%
-                                                pict.resize(1, 1);
-                                                FileUtils.imageOrientation(sheet, anchor, new DataVO(x1 - 1, y1 - 1));
-
-                                            } else if (myData.equals("1") && data.html().indexOf("hc-form-checkbox-group") >= 0) {
-                                                Row row = sheet.getRow(y1 - 1);
-                                                if (row != null) {
-                                                    Cell cell = row.getCell(x1 - 1);
-                                                    if (cell != null || ObjectUtils.isNotEmpty(cell)) {
-                                                        String exceVal = cell.getStringCellValue().replaceAll(" ", "");
-                                                        short fontIndex = cell.getCellStyle().getFontIndex();
-                                                        Font fontAt = workbook.getFontAt(fontIndex);
-                                                        fontAt.setFontName("EUDC");
-                                                        cell.setCellValue(exceVal.replace("□", "\u2611"));
-                                                    }
-                                                }
-                                            } else {
-                                                Row row = sheet.getRow(y1 - 1);
-                                                if (row != null) {
-                                                    Cell cell = row.getCell(x1 - 1);
-                                                    if (cell != null || ObjectUtils.isNotEmpty(cell)) {
-                                                        cell.setCellValue(myData);
-                                                    }
+                            x1 = Integer.parseInt(data.attr("x1"));
+                            y1 = Integer.parseInt(data.attr("y1"));
+
+                            if (x1 == 0) {
+                                x1 = 1;
+                            }
+
+                            String myData = DataInfo.get(val) + "";
+                            if ((myData.indexOf("T") >= 0 && myData.indexOf("-") >= 0) || (myData.indexOf(",") >= 0 && myData.indexOf("]") >= 0)) {
+                                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+                                sdf.setTimeZone(TimeZone.getTimeZone("GTM+8"));
+                                SimpleDateFormat formatStr = new SimpleDateFormat("yyyy年MM月dd日");
+                                if (myData.indexOf(",") >= 0 && myData.indexOf("]") >= 0) {
+
+                                    myData = myData.replace("[", "").replace("]", "").replaceAll("'", "");
+                                    String[] dataVal = myData.split(",");
+
+                                    Date Start_dataStr = sdf.parse(dataVal[0]);
+                                    Date end_dataStr = sdf.parse(dataVal[1]);
+                                    String StartDate = formatStr.format(Start_dataStr);
+                                    String endDate = formatStr.format(end_dataStr);
+                                    if (StartDate.equals(endDate)) {
+                                        myData = StartDate;
+                                    } else {
+                                        myData = StartDate + "-" + endDate;
+                                    }
+                                } else {
+                                    String[] dataStr = myData.split("T")[0].split("-");
+                                    if (dataStr.length == 3) {
+                                        myData = StringUtil.format("{}年{}月{}日", dataStr[0], dataStr[1], Integer.parseInt(dataStr[2]));
+                                    }
+                                }
+                            }
+
+                            if (myData.indexOf("lang.String") >= 0) {
+                                Object obj = DataInfo.get(val);
+                                if (obj instanceof String[]) {
+                                    String[] dataDate = (String[]) obj;
+                                    myData = dataDate[0] + "-" + dataDate[1].trim();
+                                }
+                            }
+
+                            //https:bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20220819/b53cb6700db369381e3b03d7737bcdec.jpg__16_1
+                            if ((myData.indexOf("https") >= 0 || myData.indexOf("http") >= 0) && myData.indexOf("aliyuncs") >= 0) {
+
+                                InputStream imageIn = CommonUtil.getOSSInputStream(myData);
+                                byte[] byteNew = IOUtils.toByteArray(imageIn);
+                                byte[] bytes = CommonUtil.compressImage(byteNew);
+                                // 这里根据实际需求选择图片类型
+                                int pictureIdx = workbook.addPicture(bytes, 6);
+                                CreationHelper helper = workbook.getCreationHelper();
+                                ClientAnchor anchor = helper.createClientAnchor();
+                                anchor.setCol1(x1); // param1是列号
+                                anchor.setCol2(x2);
+                                anchor.setRow1(y1); // param2是行号
+                                anchor.setRow2(y2); // param2是行号
+                                //
+                                Drawing drawing = sheet.createDrawingPatriarch();
+                                anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
+                                // 插入图片
+                                Picture pict = drawing.createPicture(anchor, pictureIdx); // 调整图片占单元格百分比的大小,1.0就是100%
+                                pict.resize(1, 1);
+                                FileUtils.imageOrientation(sheet, anchor, new DataVO(x1 - 1, y1 - 1));
+
+                            } else if (data.tagName().equals("hc-form-checkbox-group")) {
+                                Row row = sheet.getRow(y1 - 1);
+                                if (row != null) {
+                                    Cell cell = row.getCell(x1 - 1);
+                                    if (cell != null || ObjectUtils.isNotEmpty(cell)) {
+                                        String exceVal = cell.getStringCellValue().replaceAll(" ", "");
+                                        //如果有□ 代表 自动生成  如果没有 代表后期添加 需要显示html 中的值
+                                        if(exceVal.indexOf("□")>=0 ){
+                                            if(myData.equals("1")){
+                                                short fontIndex = cell.getCellStyle().getFontIndex();
+                                                Font fontAt = workbook.getFontAt(fontIndex);
+                                                fontAt.setFontName("EUDC");
+                                                cell.setCellValue(exceVal.replace("□", "\u2611"));
+                                            }
+                                        }else{
+                                            String dataJson = data.attr(":objs");
+                                            if(StringUtils.isNotEmpty(dataJson)){
+                                                JSONArray jsonArray = JSONArray.parseArray(dataJson);
+                                                List<Integer> idList = Func.toIntList(myData);
+                                                String dataInfo = jsonArray.getJSONObject(0).getString("name");
+                                                for(int inx=1 ; inx<idList.size() ; inx++){
+                                                    dataInfo = dataInfo+","+jsonArray.getJSONObject(inx).getString("name");
                                                 }
+                                                cell.setCellValue(dataInfo);
                                             }
                                         }
                                     }
                                 }
+                            } else {
+                                Row row = sheet.getRow(y1 - 1);
+                                if (row != null) {
+                                    Cell cell = row.getCell(x1 - 1);
+                                    if (cell != null || ObjectUtils.isNotEmpty(cell)) {
+                                        cell.setCellValue(myData);
+                                    }
+                                }
                             }
                         }
                     }
@@ -1509,6 +1531,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                             Elements tdsx = ytzData.select("td");
                             if (Integer.parseInt(trtd[1]) < tdsx.size()) {
                                 Element data = ytzData.select("td").get(Integer.parseInt(trtd[1]));
+
                                 if (data.html().indexOf("el-tooltip") >= 0) {
                                     data = data.children().get(0);
                                 }
@@ -1549,6 +1572,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         FileOutputStream outputStream = new FileOutputStream(excelPath);
         workbook.write(outputStream);
         FileUtils.setExcelScaleToPdf(excelPath, pdfPath);
+
         BladeFile bladeFile = newIOSSClient.uploadFile(pkeyId + ".pdf", pdfPath);
 
         //附件
@@ -1595,8 +1619,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         if (exceInp != null) {
             IoUtil.closeQuietly(exceInp);
         }
+         return R.data(bladeFile2.getLink());
 
-        return R.data(bladeFile2.getLink());
     }
 
     @Override
@@ -1967,38 +1991,39 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         reData.remove("contractId");
         reData.remove("pkeyId");
         reData.remove("projectId");
-        chart(reData,wbsTreePrivate);
+        chart(reData, wbsTreePrivate);
         list.add(reData);
         return list;
     }
-    private void  chart(Map<String,Object> reData,WbsTreePrivate wtp){
+
+    private void chart(Map<String, Object> reData, WbsTreePrivate wtp) {
         try {
-            if(reData.size()>0&&wtp!=null) {
+            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(kx)).split(";")).filter(Func::isNotBlank).map(k->kx+"__"+k).collect(Collectors.toList());
-                    List<String> fct= new ArrayList<>();
-                    if(ly.size()>0){
+                    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(kx)).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){
+                    if (lx.size() > 0) {
                         fct.addAll(lx);
                     }
-                    String formChartKey= String.join(",", fct);
-                    if(Func.isNotEmpty(formChartKey)){
-                        reData.put("formChartKey",formChartKey);
-                        String key=Func.toStr(config.get("ekey"));
-                        reData.put("formchartKeyShow",key+"__"+coordsMap.get(key).split(";")[0]);
+                    String formChartKey = String.join(",", fct);
+                    if (Func.isNotEmpty(formChartKey)) {
+                        reData.put("formChartKey", formChartKey);
+                        String key = Func.toStr(config.get("ekey"));
+                        reData.put("formchartKeyShow", key + "__" + coordsMap.get(key).split(";")[0]);
                     }
                 }
             }
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
     }

+ 9 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -21,6 +21,7 @@ import org.springblade.manager.mapper.TableInfoMapper;
 import org.springblade.manager.mapper.WbsFormElementMapper;
 import org.springblade.manager.mapper.WbsTreeMapper;
 import org.springblade.manager.mapper.WbsTreePrivateMapper;
+import org.springblade.manager.service.IExcelTabService;
 import org.springblade.manager.service.ITableInfoService;
 import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.manager.utils.WbsElementUtil;
@@ -51,6 +52,8 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 
     private final ITableInfoService tableInfoService;
 
+    private final IExcelTabService excelTabService;
+
     //元素字符串、数值、时间类型默认长度
     public static final Integer DEFAULT_ELEMENT_LENGTH_VARCHAR = 250;
     public static final Integer DEFAULT_ELEMENT_LENGTH_NUMBER = 50;
@@ -754,6 +757,12 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                         if (formElementDTO.getSubmitStatus() == 2) {
                             baseMapper.insertWbsTabRelationExcelTab(SnowFlakeUtil.getId(), formElementDTO.getExcelTabId(), formElementDTO.getId());
                         }
+
+                        // 绑定excel 与实体表的关系
+                        excelTabService.update(Wrappers.<ExcelTab>lambdaUpdate()
+                                .set(ExcelTab::getTabId, formElementDTO.getInitTableId())
+                                .eq(ExcelTab::getId, formElementDTO.getExcelTabId())
+                        );
                     }
                 } catch (Exception e) {
                     //删除元素表