Просмотр исходного кода

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

yangyj 2 лет назад
Родитель
Сommit
4c219823f4
14 измененных файлов с 324 добавлено и 210 удалено
  1. 20 0
      blade-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  2. 3 3
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  3. 2 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  4. 57 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java
  5. 0 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  6. 6 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  7. 31 24
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java
  8. 58 26
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  9. 3 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  10. 6 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java
  11. 1 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  12. 1 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  13. 133 126
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  14. 3 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

+ 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);
+        }
+    }
+
     /**
      * 获取字节数组
      */

+ 3 - 3
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -342,14 +342,14 @@ public class ArchivesAutoController extends BladeController {
 			archivesAutoService.archiveAutoMethod(projectId);
 			//刷新项目档号
 			archivesAutoService.refreshFileNumberNoSlipt(projectId,contractId,nodeId);
-
+			//设置自动组卷结束
+			projectClient.updateIsArchivesAutoById(projectId,0);
 			return R.data("自动组卷结束");
 		}catch (Exception e){
 			e.printStackTrace();
-			return R.fail(e.getMessage());
-		}finally {
 			//设置自动组卷结束
 			projectClient.updateIsArchivesAutoById(projectId,0);
+			return R.fail(e.getMessage());
 		}
 
 	}

+ 2 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -144,13 +144,13 @@
                 select id from u_archives_auto where project_id=#{projectId}
                   and is_auto_file!=1
                   and is_deleted=0
-                  and is_lock=0
+                  and is_lock!=1
             );
         /**把未锁定案卷去掉*/
         update u_archives_auto set is_deleted=1 where project_id=#{projectId}
             and is_auto_file!=1
             and is_deleted=0
-            and is_lock=0;
+            and is_lock!=1;
     </update>
 
     <select id="getFilePageUrlList" resultType="java.lang.String">

+ 57 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java

@@ -314,6 +314,63 @@ public class ArchiveFileController extends BladeController {
 		return R.data(false);
 	}
 
+	/**
+	 * 批量上报2,每行数据单独上报
+	 */
+	@PostMapping("/batchApproval2")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "批量上报")
+	public R<Boolean> batchApproval2(@RequestBody StartTaskVO startTaskVO) throws IOException {
+		String archiveTaskIds = startTaskVO.getIds();
+		if(StringUtils.isNotEmpty(archiveTaskIds)){
+			String[] ids = archiveTaskIds.split(",");
+			for (String id : ids) {
+
+				//生成流程实体
+				TaskVO taskVO = new TaskVO();
+				BeanUtils.copyProperties(startTaskVO, taskVO);
+				if (taskVO.getUserTasks() != null && taskVO.getUserTasks().size() > 0) {
+					//标记为自定义流程
+					taskVO.setFixedFlowId(Long.parseLong("0"));
+				}
+
+				taskVO.setFormDataId(id);
+				taskVO.setApprovalType(2);
+				ArchiveFile archiveFile = this.archiveFileService.getBaseMapper().selectById(id);
+				taskVO.setTaskName(archiveFile.getFileName());
+				//启动流程
+				this.taskClient.startTask(taskVO);
+				//修改状态为待审批
+				String[] archiveTaskIdArray = id.split(",");
+				boolean update = this.archiveFileService.update(Wrappers.<ArchiveFile>lambdaUpdate().set(ArchiveFile::getStatus, 1).in(ArchiveFile::getId, Arrays.asList(archiveTaskIdArray)));
+				if (update) {
+					//通过WebSocket推送数量条数
+					if (ObjectUtil.isNotEmpty(startTaskVO.getUserTasks())) {
+						for (StartTaskVO.CustomUserTask userTask : startTaskVO.getUserTasks()) {
+							Map<String, String> stringMap = iTaskService.getTaskCount(startTaskVO.getProjectId(), startTaskVO.getContractId(), userTask.getUserId());
+							webSocket.sendMessageByUserId(userTask.getUserId(), JSON.toJSONString(stringMap));
+						}
+					}
+				}
+			}
+			List<ArchiveFile> archiveFiles = this.archiveFileService.getBaseMapper().selectBatchIds(Arrays.asList(archiveTaskIds.split(",")));
+			StringBuilder builder = new StringBuilder();
+			if (archiveFiles != null && archiveFiles.size() > 0) {
+				for (ArchiveFile archiveFile : archiveFiles) {
+					builder.append(archiveFile.getFileName()+"-");
+				}
+			}
+			String title = builder.toString();
+			//新增操作日志
+			JSONObject json = new JSONObject();
+			json.put("operationObjIds", Func.toStrList(archiveTaskIds));
+			json.put("operationObjName", title.substring(0,title.length()-1));
+			this.operationLogClient.saveUserOperationLog(25, "其它文件", "工程文件", json);
+			return R.data(true);
+		}
+		return R.data(false);
+	}
+
 	/**
 	 * 批量编辑
 	 */

+ 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;

+ 6 - 4
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");
                 }
             }
@@ -1703,8 +1703,10 @@ public class ExcelTabController extends BladeController {
         }
         try {
             //单个 pdf加载
-            for (TableInfo tableInfo : tableInfoList) {
-                excelTabService.getBussPdfInfo(Long.parseLong(tableInfo.getPkeyId()));
+            if (tableInfoList != null) {
+                for (TableInfo tableInfo : tableInfoList) {
+                    excelTabService.getBussPdfInfo(Long.parseLong(tableInfo.getPkeyId()));
+                }
             }
             // 合并pdf加载
             excelTabService.getBussPdfs(nodeid, classify, contractId, projectId);

+ 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())

+ 58 - 26
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -11,21 +11,28 @@ import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.dto.*;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.excel.WbsFormElementBatchExcel;
 import org.springblade.manager.excel.WbsTreeExcel;
 import org.springblade.manager.mapper.WbsInfoMapper;
+import org.springblade.manager.mapper.WbsTreeContractMapper;
 import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.IFormulaService;
 import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.manager.vo.*;
 import org.springblade.system.cache.DictCache;
+import org.springblade.system.entity.Role;
 import org.springblade.system.enums.DictEnum;
+import org.springblade.system.feign.ISysClient;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -50,7 +57,11 @@ public class WbsTreeController extends BladeController {
     private final IWbsTreeService wbsTreeService;
     private final IWbsFormElementService wbsFormElementService;
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
+    private final WbsTreeContractMapper wbsTreeContractMapper;
     private final WbsInfoMapper wbsInfoMapper;
+    private final JdbcTemplate jdbcTemplate;
+    private final IUserClient iUserClient;
+    private final ISysClient iSysClient;
 
     /**
      * 详情
@@ -170,29 +181,50 @@ public class WbsTreeController extends BladeController {
     @ApiImplicitParam(name = "id", value = "表单id", required = true)
     public R removeTableById(@RequestParam("id") String id) {
         if (StringUtils.isNotEmpty(id)) {
-            /*List<WbsFormElementVO> wbsFormElements = wbsTreeService.selectFormElements(id,null); //此处nodeId为后续其他开发加的,不知道有什么用,所以传null
-            if (wbsFormElements.size() > 0) {
-                throw new ServiceException("该表单中存在元素,删除失败");
-            }*/
-            Long wbsTreePrivates = wbsTreePrivateMapper.selectCount(Wrappers.<WbsTreePrivate>query().lambda()
-                    .eq(WbsTreePrivate::getStatus, 1)
-                    .eq(WbsTreePrivate::getId, id));
-            if (wbsTreePrivates > 0L) {
-                throw new ServiceException("该表单已被项目引用,删除失败");
+            boolean var = false;
+            if (ObjectUtil.isEmpty(AuthUtil.getUser())) {
+                throw new ServiceException("获取当前用户信息失败");
+            }
+            User user = iUserClient.userInfoById(AuthUtil.getUserId()).getData();
+            if (user == null) {
+                throw new ServiceException("获取当前用户信息失败");
+            } else {
+                String[] roles = user.getRoleId().split(",");
+                for (String roleId : roles) {
+                    Role data = iSysClient.getRole(Long.parseLong(roleId)).getData();
+                    if (data.getRoleName().equals("超级管理员") && data.getRoleAlias().equals("administrator")) {
+                        var = true;
+                        break;
+                    }
+                }
             }
-            if (wbsTreeService.removeTableById(id)) {
-                //如果当前节点没有表单,那么修改is_exist_form = 0
-                WbsTree wbsTreeZi = wbsTreeService.getBaseMapper().selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, id));
-                if (wbsTreeZi != null) {
-                    WbsTree wbsTreeFu = wbsTreeService.getBaseMapper().selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, wbsTreeZi.getParentId()));
-                    if (wbsTreeFu != null) {
-                        List<WbsTree> nodes = wbsTreeService.getBaseMapper().selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getParentId, wbsTreeFu.getId()));
-                        if (nodes.size() == 0) {
-                            wbsTreeService.update(Wrappers.<WbsTree>lambdaUpdate().set(WbsTree::getIsExistForm, 0).eq(WbsTree::getId, wbsTreeFu.getId()));
+
+            if (var) {
+                if (wbsTreeService.removeTableById(id)) {
+                    //如果当前节点没有表单,那么修改is_exist_form = 0
+                    WbsTree wbsTreeZi = wbsTreeService.getBaseMapper().selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, id));
+                    if (wbsTreeZi != null) {
+                        WbsTree wbsTreeFu = wbsTreeService.getBaseMapper().selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, wbsTreeZi.getParentId()));
+                        if (wbsTreeFu != null) {
+                            List<WbsTree> nodes = wbsTreeService.getBaseMapper().selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getParentId, wbsTreeFu.getId()));
+                            if (nodes.size() == 0) {
+                                wbsTreeService.update(Wrappers.<WbsTree>lambdaUpdate().set(WbsTree::getIsExistForm, 0).eq(WbsTree::getId, wbsTreeFu.getId()));
+                            }
                         }
                     }
+
+                    //删除对应到项目合同段的表
+                    List<Long> projectPKeyIds = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                            .select(WbsTreePrivate::getPKeyId).eq(WbsTreePrivate::getStatus, 1).eq(WbsTreePrivate::getType, 2).eq(WbsTreePrivate::getId, id)).stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
+                    List<Long> contractPKeyIds = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
+                            .select(WbsTreeContract::getPKeyId).eq(WbsTreeContract::getStatus, 1).eq(WbsTreeContract::getType, 2).and(obj -> obj.eq(WbsTreeContract::getId, id).or().eq(WbsTreeContract::getOldId, id))).stream().map(WbsTreeContract::getPKeyId).collect(Collectors.toList());
+                    jdbcTemplate.execute("update m_wbs_tree_private set is_deleted = 1 where p_key_id in(" + StringUtils.join(projectPKeyIds, ",") + ")");
+                    jdbcTemplate.execute("update m_wbs_tree_contract set is_deleted = 1 where p_key_id in(" + StringUtils.join(contractPKeyIds, ",") + ")");
+
+                    return R.success("删除成功");
                 }
-                return R.success("删除成功");
+            } else {
+                throw new ServiceException("没有管理员权限,操作失败");
             }
         }
         return R.fail("删除失败");
@@ -205,13 +237,13 @@ public class WbsTreeController extends BladeController {
     @ApiOperationSupport(order = 8)
     @ApiOperation(value = "根据表单id查询所有元素", notes = "传入表单id")
     @ApiImplicitParam(name = "id", value = "表单id", required = true)
-    public R<List<WbsFormElementVO>> selectFormElements(@RequestParam("id") String id, String nodeId, String search,Integer type) {
+    public R<List<WbsFormElementVO>> selectFormElements(@RequestParam("id") String id, String nodeId, String search, Integer type) {
         List<WbsFormElementVO> wbsFormElements = null;
         if (StringUtils.isNotEmpty(id)) {
-//            if(StringUtils.isNotEmpty(nodeId)){
-//                id=nodeId;
-//            }
-            wbsFormElements = wbsTreeService.selectFormElements(id,nodeId,type);
+            /*if(StringUtils.isNotEmpty(nodeId)){
+                id=nodeId;
+            }*/
+            wbsFormElements = wbsTreeService.selectFormElements(id, nodeId, type);
             if (wbsFormElements.size() > 0) {
                 if (StringUtils.isNotEmpty(search)) {
                     wbsFormElements = wbsFormElements.stream().filter(e -> e.getEName().contains(search)).collect(Collectors.toList());
@@ -392,10 +424,10 @@ public class WbsTreeController extends BladeController {
     @ApiOperationSupport(order = 20)
     @ApiOperation(value = "根据表单id查询所有元素", notes = "传入表单id")
     @ApiImplicitParam(name = "id", value = "表单id", required = true)
-    public R<List<WbsFormElementVO>> selectPrivateFormElements(@RequestParam("id") String id,String eName) {
+    public R<List<WbsFormElementVO>> selectPrivateFormElements(@RequestParam("id") String id, String eName) {
         List<WbsFormElementVO> wbsFormElements = null;
         if (StringUtils.isNotEmpty(id)) {
-            wbsFormElements = wbsTreeService.selectPrivateFormElements(id,eName);
+            wbsFormElements = wbsTreeService.selectPrivateFormElements(id, eName);
             if (wbsFormElements.size() > 0) {
                 return R.data(wbsFormElements);
             }

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

@@ -346,16 +346,11 @@ public class WbsTreePrivateController extends BladeController {
     public R removeTableByCondition(@RequestParam("id") String id,
                                     @RequestParam("wbsId") String wbsId,
                                     @RequestParam("projectId") String projectId) {
-        Long wbsTreeContracts = wbsTreeContractMapper.selectCount(Wrappers.<WbsTreeContract>query().lambda()
-                .eq(WbsTreeContract::getProjectId, projectId)
-                .eq(WbsTreeContract::getWbsId, wbsId)
-                .eq(WbsTreeContract::getId, id)
-        );
-        if (wbsTreeContracts > 0L) {
+        Long row = wbsTreeContractMapper.selectCount(Wrappers.<WbsTreeContract>query().lambda().eq(WbsTreeContract::getProjectId, projectId).eq(WbsTreeContract::getWbsId, wbsId).eq(WbsTreeContract::getId, id));
+        if (row > 0L) {
             throw new ServiceException("当前表单被合同段引用中,删除失败");
         }
-        boolean result = wbsTreePrivateService.removeTableByCondition(id, wbsId, projectId);
-        if (result) {
+        if (wbsTreePrivateService.removeTableByCondition(id, wbsId, projectId)) {
             return R.success("删除成功");
         }
         return R.fail("删除失败");

+ 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());

+ 1 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -591,8 +591,7 @@
     <update id="updateDeletedByIds">
         UPDATE m_wbs_tree_contract
         SET is_deleted = 1
-        WHERE status = 1
-        AND type = 2
+        WHERE type = 2
         AND p_key_id in
         <foreach item="ids" collection="ids" open="(" close=")" separator=",">
             #{ids}

+ 1 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -175,8 +175,7 @@
     <update id="updateDeletedByCondition">
         UPDATE m_wbs_tree_private
         SET is_deleted = 1
-        WHERE status = 1
-          AND type = 2
+        WHERE type = 2
           AND id = #{id}
           AND wbs_id = #{wbsId}
           AND project_id = #{projectId}

+ 133 - 126
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);
 
@@ -1480,12 +1487,12 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         workbook.write(outputStream);
         FileUtils.setExcelScaleToPdf(excelPath, pdfPath);
         BladeFile bladeFile = newIOSSClient.uploadFile(pkeyId + ".pdf", pdfPath);
-        //
-        TableFile tableFile1 = tableFileService.getBaseMapper().selectOne(Wrappers.<TableFile>query().lambda()
-                .eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getType, 1));
+
+        TableFile tableFile1 = tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getType, 1)).stream().findAny().orElse(null);
         if (tableFile1 != null) {
-            tableFile1.setDomainPdfUrl(bladeFile.getLink());
-            tableFileService.saveOrUpdate(tableFile1);
+            /*tableFile1.setDomainPdfUrl(bladeFile.getLink());
+            tableFileService.saveOrUpdate(tableFile1);*/
+            tableFileService.update(Wrappers.<TableFile>lambdaUpdate().set(TableFile::getDomainPdfUrl,bladeFile.getLink()).eq(TableFile::getId,tableFile1.getId()));
         } else {
             TableFile tableFile = new TableFile();
             String fileExtension = FileUtil.getFileExtension(wbsTreeContract.getFullName() + ".pdf");
@@ -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();

+ 3 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -187,19 +187,12 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public boolean removeTableByCondition(String id, String wbsId, String projectId) {
-        List<WbsTreeContract> wbsTreeContractsTable = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
-                .eq(WbsTreeContract::getProjectId, projectId)
-                .eq(WbsTreeContract::getId, id)
-                .eq(WbsTreeContract::getWbsId, wbsId)
-                .eq(WbsTreeContract::getType, 2)
-                .eq(WbsTreeContract::getStatus, 1));
-        List<Long> ids = wbsTreeContractsTable.stream().map(WbsTreeContract::getPKeyId).collect(Collectors.toList());
 
-        //删除项目表
         baseMapper.updateDeletedByCondition(id, wbsId, projectId);
-        //删除当前项目下合同段的表
+
+        List<WbsTreeContract> wbsTreeContractsTable = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda().select(WbsTreeContract::getPKeyId).eq(WbsTreeContract::getProjectId, projectId).eq(WbsTreeContract::getId, id).eq(WbsTreeContract::getWbsId, wbsId).eq(WbsTreeContract::getType, 2).eq(WbsTreeContract::getStatus, 1));
+        List<Long> ids = wbsTreeContractsTable.stream().map(WbsTreeContract::getPKeyId).collect(Collectors.toList());
         if (ids.size() > 0) {
             wbsTreeContractMapper.updateDeletedByIds(ids);
         }