liuyc 2 gadi atpakaļ
vecāks
revīzija
7648d5c082

+ 20 - 0
blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java

@@ -117,6 +117,26 @@ public class CommonUtil {
         }
     }
 
+    /**
+     * 根据OSS文件路径获取文件输入流
+     */
+    public static InputStream getOSSInputStreamTow(String urlStr) throws Exception {
+        //获取OSS文件流
+        URL imageUrl = new URL(urlStr);
+        HttpURLConnection conn = null;
+        try {
+            conn = (HttpURLConnection) imageUrl.openConnection();
+            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+            return conn.getInputStream();
+        } catch (IOException e) {
+            e.printStackTrace();
+            if (conn != null) {
+                conn.disconnect(); //关闭网络连接
+            }
+            throw new Exception("获取图片输入流失败!URL:" + urlStr, e);
+        }
+    }
+
     /**
      * 获取字节数组
      */

+ 0 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1461,7 +1461,6 @@ public class InformationWriteQueryController extends BladeController {
             }
 
             //更新redis缓存
-            //informationQueryService.AsyncWbsTree(needCopyNode.getParentId() + "", needCopyNode.getParentId() + "", needCopyNode.getContractId(), "", "1");
             informationQueryService.delAsyncWbsTree(needCopyNode.getContractId());
 
             return booleanR;

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

@@ -671,13 +671,13 @@ public class ExcelTabController extends BladeController {
                 String key = keys.get("e_key") + "__";
                 Elements gscolor = doc.select("el-input[keyname~=^" + key + "]");
                 for (Element element : gscolor) {
-                    System.out.println(element.parent());
+                    //System.out.println(element.parent());
                     element.parent().attr("gscolor", "11");
                 }
 
                 Elements datecolor = doc.select("el-date-picker[keyname~=^" + key + "]");
                 for (Element element : datecolor) {
-                    System.out.println(element.parent());
+                    //System.out.println(element.parent());
                     element.parent().attr("gscolor", "11");
                 }
             }

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

@@ -33,22 +33,18 @@ import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
-import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.redis.cache.BladeRedis;
-import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.entity.*;
-import org.springblade.manager.excel.WbsExcelBatchUtil;
 import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.impl.WbsTreeContractServiceImpl;
 import org.springblade.manager.service.impl.WbsTreePrivateServiceImpl;
-import org.springblade.manager.utils.CopyUtil;
 import org.springblade.manager.vo.TextdictBy345VO;
 import org.springblade.manager.vo.TextdictDataInfoVO;
 import org.springblade.manager.vo.TextdictInfo_vo;
@@ -66,7 +62,6 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -191,7 +186,7 @@ public class TextdictInfoController extends BladeController {
             }
         }
 
-        if (textdictInfo.getType() == 5) {
+        if (textdictInfo.getType() == 2 || textdictInfo.getType() == 5) {
             //读取html页面信息
             File file1 = ResourceUtil.getFile(wbsTreePrivate.getHtmlUrl());
             String htmlString = IoUtil.readToString(new FileInputStream(file1));
@@ -200,14 +195,26 @@ public class TextdictInfoController extends BladeController {
             //解析
             Element table = doc.select("table").first();
             Elements trs = table.select("tr");
-            String trTd[] = textdictInfo.getColKey().split("__");
+            String[] trTd = textdictInfo.getColKey().split("__");
             Element element = trs.get(Integer.parseInt(trTd[1].split("_")[0])).select("td").get(Integer.parseInt(trTd[1].split("_")[1]));
-            if (element.html().indexOf("el-tooltip") >= 0) {
-                Element newEle = element.children().get(0).children().get(0);
-                element.empty().append(newEle + "");
-                File writeFile = new File(wbsTreePrivate.getHtmlUrl());
-                FileUtil.writeToFile(writeFile, doc.html(), Boolean.parseBoolean("UTF-8"));
+            if (textdictInfo.getType() == 5 && element.html().contains("el-tooltip")) {
+                if (!element.children().isEmpty() && !element.children().get(0).children().isEmpty()) {
+                    //提示信息删除
+                    Element newEle = element.children().get(0).children().get(0);
+                    element.empty().appendChild(newEle.clone());
+                }
+            } else if (textdictInfo.getType() == 2 && element.html().contains(":readonly") && element.html().contains(textdictInfo.getColKey())) {
+                if (!element.children().isEmpty()) {
+                    //电签删除后输入框可编辑
+                    Element child = element.children().get(0);
+                    if (child.hasAttr(":readonly")) {
+                        child.removeAttr(":readonly");
+                    }
+                }
             }
+            //重写html
+            File writeFile = new File(wbsTreePrivate.getHtmlUrl());
+            FileUtil.writeToFile(writeFile, doc.html(), Boolean.parseBoolean("UTF-8"));
         }
 
         //批量删除
@@ -257,12 +264,12 @@ public class TextdictInfoController extends BladeController {
         String vmode = "formData." + keyname;
         String leftCli = "inputLeftClick($event,'" + keyname + "')";
         if (textdictInfo.getTextId().equals("input")) { // 文本框
-            element.empty().append("<el-input  @mouseup.left="+leftCli+" type='text' id=" + keyname + " @keydown.shift.up='keyupShiftUp'  @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " 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%' > </el-input>");
+            element.empty().append("<el-input  @mouseup.left=" + leftCli + " type='text' id=" + keyname + " @keydown.shift.up='keyupShiftUp'  @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' v-model=" + vmode + " 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%' > </el-input>");
 
         } else if (textdictInfo.getTextId().equals("textarea")) { // 文本域
             int rowspan = element.attr("ROWSPAN").equals("") ? 0 : Integer.parseInt(element.attr("ROWSPAN"));
 
-            element.empty().append("<el-input  :rows=" + rowspan * 2 + "  id=" + keyname + "  @mouseup.left="+leftCli+"  @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight'  type='textarea' placeholder=" + placeholder + " v-model=" + vmode + "    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%'  > </el-input>");
+            element.empty().append("<el-input  :rows=" + rowspan * 2 + "  id=" + keyname + "  @mouseup.left=" + leftCli + "  @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight'  type='textarea' placeholder=" + placeholder + " v-model=" + vmode + "    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%'  > </el-input>");
 
         } else if (textdictInfo.getTextId().equals("select")) { // 下拉框
             String selectText = " <el-select id=" + keyname + " v-model=" + vmode + " @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' keyname=" + keyname + " weighing=" + weighing + " placeholder=" + placeholder + " trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + ">"; //v-model="+keyname+"
@@ -298,17 +305,17 @@ 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>");
+            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")) { // 日期--时分秒
-            element.empty().append("<el-time-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='date' format='HH:mm:ss' value-format='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-time-picker>");
+            element.empty().append("<el-time-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='date' format='HH:mm:ss' value-format='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-time-picker>");
         } else if (textdictInfo.getTextId().equals("dateSM")) { // 日期--时分
-            element.empty().append("<el-time-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='date' format='HH:mm' value-format='HH:mm' 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-time-picker>");
+            element.empty().append("<el-time-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='date' format='HH:mm' value-format='HH:mm' 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-time-picker>");
         } else if (textdictInfo.getTextId().equals("dateMDHM")) { // 日期--月日时分
-            element.empty().append("<el-date-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='datetime' format='MM月DD日 HH:mm' value-format='MM月DD日 HH:mm' 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-time-picker>");
+            element.empty().append("<el-date-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='datetime' format='MM月DD日 HH:mm' value-format='MM月DD日 HH:mm' 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-time-picker>");
         } else if (textdictInfo.getTextId().equals("dateDHM")) { // 日期--日时分
-            element.empty().append("<el-date-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='datetime' format='DD日 HH:mm' value-format='DD日 HH:mm' 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-time-picker>");
+            element.empty().append("<el-date-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='datetime' format='DD日 HH:mm' value-format='DD日 HH:mm' 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-time-picker>");
         } else if (textdictInfo.getTextId().equals("daterange")) { // 时间段
             element.empty().append("<el-date-picker @keyDowns='dateKeydown()' v-model=" + vmode + " type='datetimerange' placeholder=" + placeholder + "  start-placeholder='开始日期'  end-placeholder='结束日期' format='YYYY年MM月DD日' trIndex=" + trindex + " keyname=" + keyname + " weighing=" + weighing + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + ">");
             element.children().get(0).attr("@change", "datePickerChange($event,'" + keyname + "')");
@@ -319,7 +326,7 @@ public class TextdictInfoController extends BladeController {
         } else if (textdictInfo.getTextId().equals("img")) {
             element.empty().append("<hc-table-form-upload @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight'  :src='" + vmode + "' placeholder=" + placeholder + " v-model=" + vmode + "  keyName=" + keyname + " weighing=" + weighing + "  @success='formUploadSuccess' @del='delTableFormFile' trIndex=" + trindex + " tdIndex=" + tdindex + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + "></hc-table-form-upload> ");
         } else if (textdictInfo.getTextId().equals("searchSelect")) { //搜索框
-            element.empty().append("<hc-form-select-search id=" + keyname + " @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' type='dap_site_data' :val=" + vmode + " contractId=''  pkeyId='' @change='formRemoteChange' v-model=" + vmode + " 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%' > </hc-form-select-search>");
+            element.empty().append("<hc-form-select-search id=" + keyname + " @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' type='dap_site_data' :val=" + vmode + " contractId=''  pkeyId='' @change='formRemoteChange' v-model=" + vmode + " 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%' > </hc-form-select-search>");
         }
         element.attr("@click", "getInformation(" + oncklickText + ")");
         File writefile = new File(wbsTreePrivate.getHtmlUrl());
@@ -439,7 +446,7 @@ public class TextdictInfoController extends BladeController {
 
         String str1 = wbsTreePrivate.getHtmlUrl().replace("Desktop//privateUrl", "Desktop/privateUrl");
         String replace = str1.replace("\\", "\\\\");
-        if (StringUtils.isNotEmpty(ids)){
+        if (StringUtils.isNotEmpty(ids)) {
             //修改所有节点的htmlUrl
             String updateSqlP = "update m_wbs_tree_private set html_url = '" + replace + "' where p_key_id in (" + ids + ")";
             jdbcTemplate.execute(updateSqlP);
@@ -541,7 +548,7 @@ public class TextdictInfoController extends BladeController {
 
         //删除当前类型
         List<String> collect = textDictInfosNewAll.stream().map(TextdictInfo::getTabId).distinct().collect(Collectors.toList());
-        if(collect!=null && collect.size()>=1){
+        if (collect != null && collect.size() >= 1) {
             this.textdictInfoService.getBaseMapper().delete(Wrappers.<TextdictInfo>query().lambda()
                     .eq(TextdictInfo::getType, textdictInfo.getType())
                     .in(TextdictInfo::getTabId, collect)
@@ -573,7 +580,7 @@ public class TextdictInfoController extends BladeController {
 
         //修改对应合同段的htmlUrl,当前项目下对应合同段的节点
         List<Long> cIdsList = wbsTreePrivatesEqual.stream().map(WbsTreePrivate::getId).distinct().collect(Collectors.toList());
-        if(cIdsList!=null && cIdsList.size()>=1){
+        if (cIdsList != null && cIdsList.size() >= 1) {
             List<Long> cPkeyIds = wbsTreeContractService.getBaseMapper().selectList(Wrappers.<WbsTreeContract>lambdaQuery()
                     .select(WbsTreeContract::getPKeyId)
                     .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())

+ 6 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java

@@ -66,7 +66,11 @@ public class ExcelTabClientImpl implements ExcelTabClient {
         List<TableInfo> tableInfoList = this.excelTabService.getTableInfoListTrial(dataArray, tabIds);
 
         //------公式填充------
-        this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeId), ExecuteType.TESTING);
+        try {
+            this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeId), ExecuteType.TESTING);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         //------试验填报数据保存,当前记录id作为groupId------
         this.excelTabService.saveOrUpdateInfoTrial(tableInfoList, id);
 
@@ -76,7 +80,7 @@ public class ExcelTabClientImpl implements ExcelTabClient {
             if (tableInfo != null && tabIds.contains(tableInfo.getPkeyId())) {
                 //构造pdf
                 String bussPDFTrial = excelTabService.getBussPDFTrial(Long.valueOf(tableInfo.getPkeyId()), contractId, id, 0, 0, dto);
-                if (StringUtils.isNotEmpty(bussPDFTrial)){
+                if (StringUtils.isNotEmpty(bussPDFTrial)) {
                     //重新合并pdf
                     List<TrialSelfDataRecord> query = jdbcTemplate.query("select pdf_url from u_trial_self_data_record where record_id = " + id, new BeanPropertyRowMapper<>(TrialSelfDataRecord.class));
                     List<String> pdfList = query.stream().map(TrialSelfDataRecord::getPdfUrl).collect(Collectors.toList());

+ 128 - 121
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -329,63 +329,65 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 /*用来保存日志执行情况*/
                 StringBuilder log = new StringBuilder();
                 /*每次都是部分表单提交,保证跨节点跨表取数正常,其次是反向依赖的被动刷新*/
-                List<NodeTable> tableAll = createNodeTables(nodeId,tableInfoList.get(0).getContractId(),tableInfoList.get(0).getProjectId(),type);
+                List<NodeTable> tableAll = createNodeTables(nodeId, tableInfoList.get(0).getContractId(), tableInfoList.get(0).getProjectId(), type);
                 StopWatch stopWatch = new StopWatch();
-                List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).map(Long::parseLong).collect(Collectors.toList()), tableInfoList.get(0).getProjectId(), String.valueOf(nodeId),type);
+                List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).map(Long::parseLong).collect(Collectors.toList()), tableInfoList.get(0).getProjectId(), String.valueOf(nodeId), type);
                 if (Func.isNotEmpty(keyMappers)) {
-                    Map<String, Map<String, String>> coordinateMap = createCoordinateMap(keyMappers,type);
+                    Map<String, Map<String, String>> coordinateMap = createCoordinateMap(keyMappers, type);
                     stopWatch.start("公式处理");
                     List<Formula> formulas = this.formulaService.getFormulaList(keyMappers);
                     WbsTreeContract wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, nodeId));
-                    CurrentNode currentNode = createCurrentNode(wtc);
-                    TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas, coordinateMap, currentNode, tableAll);
-                    tec.setExecuteType(type);
-                    tec.setLog(log);
-                    if (tec.isPresent()) {
-                        tec.before();
-                        this.formulaService.execute(tec);
-                        tec.after();
-                    } else {
-                        tec.getLog().append("【").append("没有执行任何公式").append("】");
+                    if (wtc != null) {
+                        CurrentNode currentNode = createCurrentNode(wtc);
+                        TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas, coordinateMap, currentNode, tableAll);
+                        tec.setExecuteType(type);
+                        tec.setLog(log);
+                        if (tec.isPresent()) {
+                            tec.before();
+                            this.formulaService.execute(tec);
+                            tec.after();
+                        } else {
+                            tec.getLog().append("【").append("没有执行任何公式").append("】");
+                        }
+                        stopWatch.stop();
+                        Long totalTime = stopWatch.getTotalTimeMillis();
+                        log.append("公式执行消耗时间:").append(totalTime);
+                        StaticLog.info("公式执行用时:{}", totalTime);
+                        updateFormulaLog(log, wtc);
                     }
-                    stopWatch.stop();
-                    Long totalTime = stopWatch.getTotalTimeMillis();
-                    log.append("公式执行消耗时间:").append(totalTime);
-                    StaticLog.info("公式执行用时:{}", totalTime);
-                    updateFormulaLog(log, wtc);
                 }
-            }catch (Exception e){
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }
 
 
-    private  List<NodeTable> createNodeTables(Long nodeId,String contractId,String projectId,ExecuteType type){
-        List<NodeTable> tableAll =new ArrayList<>();
-        if(type.equals(ExecuteType.INSPECTION)){
+    private List<NodeTable> createNodeTables(Long nodeId, String contractId, String projectId, ExecuteType type) {
+        List<NodeTable> tableAll = new ArrayList<>();
+        if (type.equals(ExecuteType.INSPECTION)) {
             List<AppWbsTreeContractVO> treeNode = wbsTreeContractService.searchNodeAllTable(nodeId.toString(), "1", contractId, projectId);
-            tableAll = BeanUtil.copyProperties(treeNode,NodeTable.class);
-        }else if(type.equals(ExecuteType.TESTING)){
+            tableAll = BeanUtil.copyProperties(treeNode, NodeTable.class);
+        } else if (type.equals(ExecuteType.TESTING)) {
             List<WbsTreePrivateVO4> wbsTreePrivateVO4s = wbsTreePrivateService.searchNodeAllTable(nodeId.toString(), "1", "9", contractId, projectId, null, null);
-             tableAll = BeanUtil.copyProperties(wbsTreePrivateVO4s,NodeTable.class);
+            tableAll = BeanUtil.copyProperties(wbsTreePrivateVO4s, NodeTable.class);
         }
         return tableAll;
     }
 
-    private Map<String, Map<String, String>> createCoordinateMap(List<KeyMapper> keyMappers,ExecuteType type) {
+    private Map<String, Map<String, String>> createCoordinateMap(List<KeyMapper> keyMappers, ExecuteType type) {
         List<Long> pkeyIds = keyMappers.stream().map(KeyMapper::getPkId).distinct().collect(Collectors.toList());
         Map<String, Map<String, String>> coordinateMap = new HashMap<>(pkeyIds.size() * 2);
-        if(pkeyIds.size()>0){
-            if(ExecuteType.TESTING.equals(type)){
-               List<WbsTreePrivate> list = wbsTreePrivateService.getBaseMapper().selectList(Wrappers.<WbsTreePrivate>query().lambda().in(WbsTreePrivate::getPKeyId,pkeyIds));
-               if(list.size()>0){
-                   list.forEach(e-> coordinateMap.computeIfAbsent(e.getInitTableName(), k -> FormulaUtils.getElementCell(e.getHtmlUrl())));
-               }
-            }else{
-                List<WbsTreeContract> list = wbsTreeContractService.getBaseMapper().selectList(Wrappers.<WbsTreeContract>query().lambda().in(WbsTreeContract::getPKeyId,pkeyIds));
-                if(list.size()>0){
-                    list.forEach(e-> coordinateMap.computeIfAbsent(e.getInitTableName(), k -> FormulaUtils.getElementCell(e.getHtmlUrl())));
+        if (pkeyIds.size() > 0) {
+            if (ExecuteType.TESTING.equals(type)) {
+                List<WbsTreePrivate> list = wbsTreePrivateService.getBaseMapper().selectList(Wrappers.<WbsTreePrivate>query().lambda().in(WbsTreePrivate::getPKeyId, pkeyIds));
+                if (list.size() > 0) {
+                    list.forEach(e -> coordinateMap.computeIfAbsent(e.getInitTableName(), k -> FormulaUtils.getElementCell(e.getHtmlUrl())));
+                }
+            } else {
+                List<WbsTreeContract> list = wbsTreeContractService.getBaseMapper().selectList(Wrappers.<WbsTreeContract>query().lambda().in(WbsTreeContract::getPKeyId, pkeyIds));
+                if (list.size() > 0) {
+                    list.forEach(e -> coordinateMap.computeIfAbsent(e.getInitTableName(), k -> FormulaUtils.getElementCell(e.getHtmlUrl())));
                 }
             }
         }
@@ -553,7 +555,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 URL url = new URL(downloadUri);
                 String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
                 String filecode = SnowFlakeUtil.getId() + "";
-                String dataUrl=file_path + "/excel/" + filecode + ".pdf";
+                String dataUrl = file_path + "/excel/" + filecode + ".pdf";
                 java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();
                 connection.setRequestMethod("GET");
                 connection.setConnectTimeout(5 * 1000);
@@ -564,8 +566,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 String tabId = callback.getKey();
                 if (tabId == null) {
                     throw new Exception("excel为空");
-                }else{
-                    tabId = tabId.substring(0,tabId.lastIndexOf("_"));
+                } else {
+                    tabId = tabId.substring(0, tabId.lastIndexOf("_"));
                 }
                 //获取数据库信息
                 ExcelTab excelTab = baseMapper.selectById(Long.parseLong(tabId));
@@ -583,7 +585,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 excelTab.setFileUrl(bladeFile.getLink());
                 baseMapper.updateById(excelTab);
                 File file = new File(dataUrl);
-                if(file.exists()){
+                if (file.exists()) {
                     file.delete();
                 }
                 System.out.println("123456");
@@ -721,7 +723,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         }
 
                         //获取上传的文件相关
-                            String sourceUrl = tableInfoList.get(0).getSourceUrl(),
+                        String sourceUrl = tableInfoList.get(0).getSourceUrl(),
                                 pdfUrl = tableInfoList.get(0).getPdfUrl(),
                                 firstFileName = tableInfoList.get(0).getFirstFileName();
 
@@ -961,7 +963,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             return dataMap;
         }
         File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
-        if(file1.exists()){
+        if (file1.exists()) {
 
 
             FileInputStream fileInputStream = new FileInputStream(file1);
@@ -1019,102 +1021,102 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         // 匹配关联
         try {
             File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
-            if(file1.exists()){
+            if (file1.exists()) {
 
-            String htmlString = IoUtil.readToString(new FileInputStream(file1));
-            Document doc = Jsoup.parse(htmlString);
+                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 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 htdtitle = doc.select("el-input[placeholder~=.*合同段.*]");
+                Elements htdtitle1 = doc.select("el-input[placeholder~=合同名称.*]");
+                htdtitle.addAll(htdtitle1);
 
-            Elements jltitle = doc.select("el-input[placeholder~=监理单位.*]");
+                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 bhtitle = doc.select("el-input[placeholder~=^编号]");
+                Elements bhtitle1 = doc.select("el-input[placeholder~=合同编号.*]");
+                bhtitle.addAll(bhtitle1);
 
 
-            Elements xmtitle = doc.select("el-input[placeholder~=^项目名称]");
+                Elements xmtitle = doc.select("el-input[placeholder~=^项目名称]");
 
 
-            // Elements title = 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());
-                }
+                /**
+                 * 承包单位 承包单位、施工单位:引用施工单位名称 ,
+                 * 监理单位:引用监理单位名称
+                 * 合同段、所属建设项目(合同段):引用合同段编号
+                 *
+                 * 施工单位:施工单位 和 安装单位
+                 *
+                 */
+                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 (htdtitle.size() >= 1) {
-                for (Element element : htdtitle) {
-                    int trindex = Integer.parseInt(element.attr("trindex"));
-                    if (trindex <= 8) {
-                        reData.put(element.attr("keyName"), contractInfo.getContractNumber());
+                // 合同段名称
+                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());
+                        }
                     }
                 }
-            }
-            // 监理单位名称
-            if (jltitle.size() >= 1) {
+                // 监理单位名称
+                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());
+                    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 (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();
         }
@@ -1175,7 +1177,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                 String[] strings = StringUtils.strip(tabData[0], "[]").split(",");
 
                                 reData.put(key + "__" + tabData[1], strings);
-                            }else {
+                            } else {
                                 reData.put(key + "__" + tabData[1], tabData[0]);
                             }
                         }
@@ -1337,7 +1339,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                                     x1 = 1;
                                                 }
                                                 String myData = DataInfo.get(val) + "";
-                                                if ((myData.indexOf("T") >= 0 && myData.indexOf("-") >= 0) || (myData.indexOf(",") >= 0 && myData.indexOf("]") >= 0)){
+                                                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日");
@@ -1361,13 +1363,18 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                                     }
                                                 }
 
-                                                if(myData.indexOf("lang.String")>=0){
-                                                    String[]  dataDate = (String[]) DataInfo.get(val);
-                                                    myData = dataDate[0]+" - "+dataDate[1].trim();
+                                                if (myData.indexOf("lang.String") >= 0) {
+                                                    /*String[]  dataDate = (String[]) DataInfo.get(val);
+                                                    myData = dataDate[0]+" - "+dataDate[1].trim();*/
+                                                    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) {
+                                                if ((myData.indexOf("https") >= 0 || myData.indexOf("http") >= 0) && myData.indexOf("aliyuncs") >= 0) {
 
                                                     InputStream imageIn = CommonUtil.getOSSInputStream(myData);
 
@@ -2041,7 +2048,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             DataInfo.putAll(bussDataInfoTrial.stream().findAny().orElse(null));
         }
 
-        org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(Objects.requireNonNull(CommonUtil.getOSSInputStream(excelTab.getFileUrl())));
+        org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(Objects.requireNonNull(CommonUtil.getOSSInputStreamTow(excelTab.getFileUrl())));
         Sheet sheet = workbook.getSheetAt(0);
         sheet.setForceFormulaRecalculation(true);
         Header header = sheet.getHeader();