Pārlūkot izejas kodu

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

yangyj 2 gadi atpakaļ
vecāks
revīzija
f08963e281
20 mainītis faili ar 295 papildinājumiem un 234 dzēšanām
  1. 1 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/InformationQueryClient.java
  2. 1 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClient.java
  3. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ContractLogController.java
  4. 55 48
      blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java
  5. 3 3
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  6. 12 12
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java
  7. 4 1
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/InformationQueryClientImpl.java
  8. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialSelfInspectionRecordService.java
  9. 96 77
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
  10. 1 1
      blade-service/blade-manager/pom.xml
  11. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  12. 11 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  13. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TableFileController.java
  14. 26 12
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java
  15. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.java
  16. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ExcelTabMapper.java
  17. 1 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java
  18. 9 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java
  19. 18 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  20. 43 40
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

+ 1 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/InformationQueryClient.java

@@ -48,7 +48,7 @@ public interface InformationQueryClient {
                                             @RequestBody List<JSONObject> linkDataList);
 
     @PostMapping(API_PREFIX + "/saveData")
-    void saveData(@RequestParam String nodeId, @RequestParam String projectId, @RequestParam String contractId, @RequestParam String classify, @RequestParam String link);
+    void saveData(@RequestParam String nodeId, @RequestParam String projectId, @RequestParam String contractId, @RequestParam String classify, @RequestParam String link, @RequestParam String trialProjectName);
 
     @PostMapping(API_PREFIX + "/updateInformationQuery")
     void updateInformationQuery(@RequestParam String link, @RequestParam String classify, @RequestParam String nodeId, @RequestParam String contractId);

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClient.java

@@ -22,7 +22,7 @@ public interface ExcelTabClient {
     ExcelTab getById(@RequestParam String id);
 
     @PostMapping(API_PREFIX + "/saveTabData")
-    String saveTabData(@RequestBody JSONObject dataInfo, @RequestParam Integer type, @RequestParam Integer tableType, @RequestParam Long id) throws Exception;
+    String saveTabData(@RequestBody JSONObject dataInfo, @RequestParam Integer type, @RequestParam Integer tableType, @RequestParam Long id, @RequestParam String tabIds) throws Exception;
 
     @PostMapping(API_PREFIX + "/getBussPDFTrial")
     void getBussPDFTrial(@RequestParam Long pkeyId) throws Exception;

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

@@ -94,7 +94,7 @@ public class ContractLogController extends BladeController {
             @ApiImplicitParam(name = "time", value = "所选的时间,格式为yyyy-MM-dd、yyyy-MM、yyyy")
     })
     public R<List<ContractLog>> queryLogByContractIdAndNodePrimaryKeyId(@RequestParam String contractId, @RequestParam String nodePrimaryKeyId, @RequestParam String time) {
-        return R.data(this.contractLogService.list(Wrappers.<ContractLog>lambdaQuery().eq(ContractLog::getContractId, contractId).eq(ContractLog::getWbsNodeId, nodePrimaryKeyId).like(ContractLog::getRecordTime, time)));
+        return R.data(this.contractLogService.list(Wrappers.<ContractLog>lambdaQuery().eq(ContractLog::getContractId, contractId).eq(ContractLog::getWbsNodeId, nodePrimaryKeyId).like(ContractLog::getRecordTime, time).orderByDesc(ContractLog::getRecordTime)));
     }
 
     /**

+ 55 - 48
blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java

@@ -1,5 +1,6 @@
 package org.springblade.business.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -20,13 +21,12 @@ import org.springblade.business.vo.FixedFlowVO;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.manager.entity.ContractInfo;
-import org.springblade.manager.entity.SignPfxFile;
-import org.springblade.manager.entity.WbsTreeContract;
-import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.entity.*;
 import org.springblade.manager.feign.*;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
@@ -58,6 +58,8 @@ public class EVisaTaskCheckController {
 
     private final IFixedFlowService fixedFlowService;
 
+    private final JdbcTemplate jdbcTemplate;
+
     /**
      * 检查所选的流程环节处理人是否具有审批权限(三大填报页、日志列表的批量上报、首件列表的批量上报)
      */
@@ -71,19 +73,19 @@ public class EVisaTaskCheckController {
             @ApiImplicitParam(name = "theLogPrimaryKeyId", value = "日志左侧所选的填报类型ID"),
             @ApiImplicitParam(name = "firstId", value = "首件记录ID,列表批量上报时传任意一个即可")
     })
-    public R<Boolean> checkCustomFlowUserIsEVisaPermissions(@RequestBody JSONObject json){
-        if(json.containsKey("customFlowUserList") && !json.getJSONArray("customFlowUserList").isEmpty()){
+    public R<Boolean> checkCustomFlowUserIsEVisaPermissions(@RequestBody JSONObject json) {
+        if (json.containsKey("customFlowUserList") && !json.getJSONArray("customFlowUserList").isEmpty()) {
             //获取审批人
             List<Long> customFlowUserList = json.getJSONArray("customFlowUserList").toJavaList(Long.class);
             //获取这些审批人在当前合同段的权限
             List<JSONObject> userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(customFlowUserList, json.getString("contractId"));
-            if(userRoleList == null || userRoleList.size() <= 0){
+            if (userRoleList == null || userRoleList.size() <= 0) {
                 return R.data(300, false, "所选审批人均未找到当前表格所需要的签字岗位,请联系服务人员处理");
             }
 
             //获取电签配置
             List<JSONObject> jsonList = this.queryTableEVisaConfig(json);
-            if(jsonList == null){
+            if (jsonList == null) {
                 return R.data(300, false, "未找到符合电签配置的相关流程,请联系服务人员处理");
             }
 
@@ -91,8 +93,8 @@ public class EVisaTaskCheckController {
             List<String> eVisaRoleList = jsonList.stream().map(jsonObject -> jsonObject.getString("sigRoleId")).distinct().collect(Collectors.toList());
             //检查
             //循环审批人的角色集合,并判断电签配置中是否含有这个角色
-            for(JSONObject userRole : userRoleList){
-                if(!eVisaRoleList.contains(userRole.getString("roleId"))){
+            for (JSONObject userRole : userRoleList) {
+                if (!eVisaRoleList.contains(userRole.getString("roleId"))) {
                     User user = this.userClient.userInfoById(userRole.getLong("userId")).getData();
                     return R.data(300, false, "所选中的用户【" + user.getRealName() + "】不具备当前表格所需要的签字岗位,请联系维护人员处理或更换审批人员");
                 }
@@ -116,7 +118,7 @@ public class EVisaTaskCheckController {
             @ApiImplicitParam(name = "theLogPrimaryKeyId", value = "日志左侧所选的填报类型ID"),
             @ApiImplicitParam(name = "firstId", value = "首件记录ID,列表批量上报时传任意一个即可")
     })
-    public R<IPage<FixedFlowVO>> queryFixedFlow(@RequestBody JSONObject json){
+    public R<IPage<FixedFlowVO>> queryFixedFlow(@RequestBody JSONObject json) {
         //获取所有流程
         FixedFlowVO vo = new FixedFlowVO();
         vo.setCurrent(1);
@@ -130,7 +132,7 @@ public class EVisaTaskCheckController {
         //获取对应表格的所有电签配置
         List<JSONObject> jsonList = this.queryTableEVisaConfig(json);
 
-        if(jsonList == null){
+        if (jsonList == null) {
             return R.fail(300, "未找到符合电签配置的相关流程,请联系服务人员处理");
         }
 
@@ -138,7 +140,7 @@ public class EVisaTaskCheckController {
         List<String> eVisaRoleList = jsonList.stream().map(jsonObject -> jsonObject.getString("sigRoleId")).distinct().collect(Collectors.toList());
 
         //校验这些预设流程哪些是符合条件的
-        for(FixedFlowVO next : flowList){
+        for (FixedFlowVO next : flowList) {
             //先将流程设置为可选
             next.setDisabled(false);
 
@@ -147,14 +149,14 @@ public class EVisaTaskCheckController {
 
             //获取这些人当前合同段下的权限
             List<JSONObject> userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(flowLink.stream().map(FixedFlowLink::getFixedFlowLinkUser).distinct().collect(Collectors.toList()), json.getString("contractId"));
-            if(userRoleList == null){
+            if (userRoleList == null) {
                 next.setDisabled(true);
             } else {
                 //校验流程
-                if(eVisaRoleList.size() >= userRoleList.size()){
+                if (eVisaRoleList.size() >= userRoleList.size()) {
                     //循环审批人的角色集合,并判断电签配置中是否含有这个角色
-                    for(JSONObject userRole : userRoleList){
-                        if(!eVisaRoleList.contains(userRole.getString("roleId"))){
+                    for (JSONObject userRole : userRoleList) {
+                        if (!eVisaRoleList.contains(userRole.getString("roleId"))) {
                             //但凡有个不符合条件,禁选
                             next.setDisabled(true);
                             break;
@@ -163,8 +165,8 @@ public class EVisaTaskCheckController {
                 } else {
                     //小于,反向判断
                     List<String> userRoleIds = userRoleList.stream().map(jsonObject -> jsonObject.getString("roleId")).distinct().collect(Collectors.toList());
-                    for(String eVisaRole : eVisaRoleList){
-                        if(!userRoleIds.contains(eVisaRole)){
+                    for (String eVisaRole : eVisaRoleList) {
+                        if (!userRoleIds.contains(eVisaRole)) {
                             //但凡有个不符合条件,禁选
                             next.setDisabled(true);
                             break;
@@ -186,18 +188,18 @@ public class EVisaTaskCheckController {
     @GetMapping("/checkFlowUserIsExistPfxFile")
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "检查当前审批人是否存在证书")
-    public R<Boolean> checkTaskUserIsExistPfxFile(){
+    public R<Boolean> checkTaskUserIsExistPfxFile() {
         //获取当前审批人的证书
         List<SignPfxFile> signPfxFiles = this.signPfxClient.querySignPfxByUserIdOrContractId(AuthUtil.getUserId().toString(), "");
-        if(signPfxFiles != null && signPfxFiles.size() > 0){
+        if (signPfxFiles != null && signPfxFiles.size() > 0) {
             SignPfxFile signPfxFile = signPfxFiles.get(0);
-            if(StringUtils.isEmpty(signPfxFile.getCertificateFileUrl())){
+            if (StringUtils.isEmpty(signPfxFile.getCertificateFileUrl())) {
                 return R.data(300, false, "当前用户未配置签字证书,请联系维护人员处理");
             }
-            if(!new Integer("1").equals(signPfxFile.getIsRegister())){
+            if (!new Integer("1").equals(signPfxFile.getIsRegister())) {
                 return R.data(300, false, "当前用户的证书未注册,请联系维护人员处理");
             }
-            if(StringUtils.isEmpty(signPfxFile.getSignatureFileUrl())){
+            if (StringUtils.isEmpty(signPfxFile.getSignatureFileUrl())) {
                 return R.data(300, false, "当前用户未配置签字体,请联系维护人员处理");
             }
             return R.data(true);
@@ -216,8 +218,8 @@ public class EVisaTaskCheckController {
             @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true),
             @ApiImplicitParam(name = "queryIds", value = "资料查询列表中的记录ID,以数组的形式")
     })
-    public R<Boolean> batchCheckFlowUserIsEVisaPermissions(@RequestBody JSONObject json){
-        if(json.containsKey("flowId")) {
+    public R<Boolean> batchCheckFlowUserIsEVisaPermissions(@RequestBody JSONObject json) {
+        if (json.containsKey("flowId")) {
             //首先找到对应流程下的审批人组
             List<FixedFlowLink> flowLink = this.fixedFlowLinkService.selectFixedFlowLink(json.getString("flowId"));
 
@@ -234,11 +236,11 @@ public class EVisaTaskCheckController {
             //做一一对应处理
             Map<String, InformationQuery> queryMap = new HashMap<>();
             Map<String, WbsTreeContract> queryToNodeMap = new HashMap<>();
-            for(InformationQuery query : queryList){
+            for (InformationQuery query : queryList) {
                 Iterator<WbsTreeContract> iterator = contractTreeList.iterator();
-                while (iterator.hasNext()){
+                while (iterator.hasNext()) {
                     WbsTreeContract next = iterator.next();
-                    if(next.getPKeyId().equals(query.getWbsId())){
+                    if (next.getPKeyId().equals(query.getWbsId())) {
                         queryToNodeMap.put(query.getId().toString(), next);
                         iterator.remove();
                         break;
@@ -248,12 +250,12 @@ public class EVisaTaskCheckController {
             }
             //循环判断
             Set<String> keys = queryMap.keySet();
-            for(String key : keys){
+            for (String key : keys) {
                 //获取记录
                 InformationQuery query = queryMap.get(key);
                 //获取节点
                 WbsTreeContract contractNode = queryToNodeMap.get(key);
-                if(contractNode == null){
+                if (contractNode == null) {
                     //避免未找到对应的节点
                     contractNode = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(query.getWbsId());
                 }
@@ -265,7 +267,7 @@ public class EVisaTaskCheckController {
 
                 //获取这些表格的电签配置信息
                 List<JSONObject> jsonList = this.queryTableEVisaConfig(JSONArray.parseArray(JSONObject.toJSONString(privateTablePrimaryKeyIds), String.class));
-                if(jsonList == null){
+                if (jsonList == null) {
                     return R.data(300, false, "所选资料【" + query.getName() + "】未找到电签配置,请联系维护人员处理或暂时取消这份资料的上报");
                 }
 
@@ -273,8 +275,8 @@ public class EVisaTaskCheckController {
                 List<String> eVisaRoleList = jsonList.stream().map(jsonObject -> jsonObject.getString("sigRoleId")).distinct().collect(Collectors.toList());
 
                 //循环审批人的角色集合,并判断电签配置中是否含有这个角色
-                for(JSONObject userRole : userRoleList){
-                    if(!eVisaRoleList.contains(userRole.getString("roleId"))){
+                for (JSONObject userRole : userRoleList) {
+                    if (!eVisaRoleList.contains(userRole.getString("roleId"))) {
                         User user = this.userClient.userInfoById(userRole.getLong("userId")).getData();
                         return R.data(300, false, "所选流程中的用户【" + user.getRealName() + "】对于所选资料【" + query.getName() + "】不具有相关审批权限,请联系维护人员处理或更换审批流程");
                     }
@@ -300,8 +302,8 @@ public class EVisaTaskCheckController {
             @ApiImplicitParam(name = "theLogPrimaryKeyId", value = "日志左侧所选的填报类型ID"),
             @ApiImplicitParam(name = "firstId", value = "首件记录ID,列表批量上报时传任意一个即可")
     })
-    public R<Boolean> checkFlowUserIsEVisaPermissions(@RequestBody JSONObject json){
-        if(json.containsKey("flowId")){
+    public R<Boolean> checkFlowUserIsEVisaPermissions(@RequestBody JSONObject json) {
+        if (json.containsKey("flowId")) {
             //首先找到对应流程下的审批人组
             List<FixedFlowLink> flowLink = this.fixedFlowLinkService.selectFixedFlowLink(json.getString("flowId"));
 
@@ -312,15 +314,15 @@ public class EVisaTaskCheckController {
             //获取对应表格的所有电签配置
             List<JSONObject> jsonList = this.queryTableEVisaConfig(json);
 
-            if(jsonList == null){
+            if (jsonList == null) {
                 return R.data(300, false, "当前表格均未配置电签关键字,请联系维护人员处理");
             }
             //汇总电签配置的审批角色
             List<String> eVisaRoleList = jsonList.stream().map(jsonObject -> jsonObject.getString("sigRoleId")).distinct().collect(Collectors.toList());
 
             //循环审批人的角色集合,并判断电签配置中是否含有这个角色
-            for(JSONObject userRole : userRoleList){
-                if(!eVisaRoleList.contains(userRole.getString("roleId"))){
+            for (JSONObject userRole : userRoleList) {
+                if (!eVisaRoleList.contains(userRole.getString("roleId"))) {
                     User user = this.userClient.userInfoById(userRole.getLong("userId")).getData();
                     return R.data(300, false, "所选流程中的用户【" + user.getRealName() + "】不具有相关审批权限,请联系维护人员处理或更换审批流程");
                 }
@@ -335,16 +337,16 @@ public class EVisaTaskCheckController {
     /**
      * 获取表格的电签配置
      */
-    private List<JSONObject> queryTableEVisaConfig(JSONObject json){
+    private List<JSONObject> queryTableEVisaConfig(JSONObject json) {
         List<JSONObject> jsonList;
-        if(json.containsKey("theLogPrimaryKeyId") && StringUtils.isNotEmpty(json.getString("theLogPrimaryKeyId"))){
+        if (json.containsKey("theLogPrimaryKeyId") && StringUtils.isNotEmpty(json.getString("theLogPrimaryKeyId"))) {
             //日志,需要先获取对应的表格
             jsonList = this.queryTableEVisaConfig(Func.toStrList(json.getString("theLogPrimaryKeyId")));
 
-        } else if(json.containsKey("firstId") && StringUtils.isNotEmpty(json.getString("firstId"))){
+        } else if (json.containsKey("firstId") && StringUtils.isNotEmpty(json.getString("firstId"))) {
             //首件,先获取记录
             InformationQuery query = this.informationQueryService.getById(json.getLong("firstId"));
-            if(query != null){
+            if (query != null) {
                 jsonList = this.queryTableEVisaConfig(Func.toStrList(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(query.getTableId()).getIsTypePrivatePid().toString()));
             } else {
                 jsonList = null;
@@ -352,7 +354,12 @@ public class EVisaTaskCheckController {
 
         } else {
             //资料填报
-            jsonList = this.eVisaConfigClient.queryEVisaConfigAllByTableIds(json.getJSONArray("privatePKeyId").toJavaList(String.class));
+            //jsonList = this.eVisaConfigClient.queryEVisaConfigAllByTableIds(json.getJSONArray("privatePKeyId").toJavaList(String.class));
+
+            List<String> ids = json.getJSONArray("privatePKeyId").toJavaList(String.class);
+            String sql = "select * from m_textdict_info where tab_id in(" + StringUtils.join(ids, ",") + ")";
+            List<TextdictInfo> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TextdictInfo.class));
+            jsonList = JSONArray.parseArray(JSONObject.toJSONString(query), JSONObject.class);
         }
         return jsonList;
     }
@@ -360,11 +367,11 @@ public class EVisaTaskCheckController {
     /**
      * 获取表格的电签配置
      */
-    private List<JSONObject> queryTableEVisaConfig(List<String> primaryKeyIds){
+    private List<JSONObject> queryTableEVisaConfig(List<String> primaryKeyIds) {
         List<JSONObject> jsonList;
 
         List<WbsTreePrivate> privateTreeList = this.wbsTreePrivateClient.queryExcelTableByParentId(this.wbsTreePrivateClient.queryByPKeyIds(primaryKeyIds).get(0));
-        if(privateTreeList != null && privateTreeList.size() > 0){
+        if (privateTreeList != null && privateTreeList.size() > 0) {
             List<Long> pKeyList = privateTreeList.stream().map(WbsTreePrivate::getPKeyId).distinct().collect(Collectors.toList());
             jsonList = this.eVisaConfigClient.queryEVisaConfigAllByTableIds(JSONArray.parseArray(JSONObject.toJSONString(pKeyList), String.class));
         } else {
@@ -381,9 +388,9 @@ public class EVisaTaskCheckController {
     @GetMapping("/checkContractIsOpenEVisa")
     @ApiOperation(value = "检查当前合同段是否开启电签")
     @ApiOperationSupport(order = 1)
-    public R<Boolean> checkContractIsOpenEVisa(@RequestParam String contractId){
+    public R<Boolean> checkContractIsOpenEVisa(@RequestParam String contractId) {
         ContractInfo contract = this.contractClient.getContractById(Func.toLong(contractId));
-        if(contract != null){
+        if (contract != null) {
             boolean isOpen = new Integer("1").equals(contract.getIsElectronicSignature());
             return R.data(isOpen, isOpen ? "当前合同段已经开启电签" : "当前合同段未开启电签,不允许上报,请联系维护人员处理");
         }

+ 3 - 3
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -204,7 +204,7 @@ public class TaskController extends BladeController {
 			Map<String, Task> masterTaskMap = new HashMap<>();
 			masterTaskList.forEach(task -> masterTaskMap.put(task.getProcessInstanceId(), task));
 
-			R<Object> rObject = this.newFlowClient.selectSendPage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType(), String.join(",", processInstanceIds));
+			R<Object> rObject = this.newFlowClient.selectSendPage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType()==null?1:queryVO.getOrdType(), String.join(",", processInstanceIds));
 			if(rObject.isSuccess()){
 				Query query = new Query();
 				query.setCurrent(queryVO.getCurrent());
@@ -354,7 +354,7 @@ public class TaskController extends BladeController {
 		this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "2,3");
 
 		//获取已办(基于原生已办)
-		R<Object> rObject = this.newFlowClient.selectDonePage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
+		R<Object> rObject = this.newFlowClient.selectDonePage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType()==null?1:queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
 		//处理参数
 		return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, false);
 	}
@@ -388,7 +388,7 @@ public class TaskController extends BladeController {
 		this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "1");
 
 		//获取待办(基于原生待办)
-		R<Object> rObject = this.newFlowClient.selectTodoPage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
+		R<Object> rObject = this.newFlowClient.selectTodoPage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType()==null?1:queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
 		//处理参数
 		return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, true);
 	}

+ 12 - 12
blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialDetectionController.java

@@ -113,8 +113,8 @@ public class TrialDetectionController extends BladeController {
 
     @PostMapping("/self/update-ancillary-documents")
     @ApiOperationSupport(order = 10)
-    @ApiOperation(value = "自检记录批量修改附件", notes = "传入List<SampleAncillaryDocumentsVO>集合")
-    public R<Object> selfUpdateAncillaryDocuments(@Valid @RequestBody List<SampleAncillaryDocumentsVO> vo) {
+    @ApiOperation(value = "自检记录修改附件", notes = "传入SampleAncillaryDocumentsVO")
+    public R<Object> selfUpdateAncillaryDocuments(@Valid @RequestBody SampleAncillaryDocumentsVO vo) {
         return R.status(iTrialSelfInspectionRecordService.selfUpdateAncillaryDocuments(vo));
     }
 
@@ -175,18 +175,18 @@ public class TrialDetectionController extends BladeController {
     @ApiOperation(value = "自检多表PDF预览", notes = "传入nodeId、classify、contractId、projectId")
     public R<Object> getPDFs(String nodeId, String classify, String contractId, String projectId) {
         String sql = "select pdf_url, e_visa_pdf_url from u_information_query  where project_id ='" + projectId + "' and classify='" + classify + "' and  wbs_id='" + nodeId + "' and contract_id ='" + contractId + "' ";
-        List<InformationQuery> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<InformationQuery>(InformationQuery.class));
-        Object pdfUrl = "";
-        if (list.size() > 0) {
-            for (InformationQuery informationQuery : list) {
-                pdfUrl = informationQuery.getPdfUrl();
-                if (informationQuery.getEVisaPdfUrl() != null) {
-                    pdfUrl = informationQuery.getEVisaPdfUrl(); //优先使用电签的PDF
-                }
-                break;
+        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
+        if (maps.size() >= 1) {
+            Map<String, Object> stringObjectMap = maps.get(0);
+            Object pdfUrl = stringObjectMap.get("pdf_url");
+            if (stringObjectMap.get("e_visa_pdf_url") != null) {
+                //优先使用电签的PDF
+                pdfUrl = stringObjectMap.get("e_visa_pdf_url");
             }
+            return R.data(pdfUrl);
+        } else {
+            return R.fail("无历史数据预览,请保存数据");
         }
-        return R.data(ObjectUtil.isNotEmpty(pdfUrl) ? pdfUrl : null);
     }
 
     @GetMapping("/self/raw-material/tree")

+ 4 - 1
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/InformationQueryClientImpl.java

@@ -9,6 +9,7 @@ import org.springblade.business.entity.InformationQueryFile;
 import org.springblade.business.feign.InformationQueryClient;
 import org.springblade.business.service.IInformationQueryFileService;
 import org.springblade.business.service.IInformationQueryService;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
@@ -45,13 +46,15 @@ public class InformationQueryClientImpl implements InformationQueryClient {
     }
 
     @Override
-    public void saveData(String nodeId, String projectId, String contractId, String classify, String link) {
+    public void saveData(String nodeId, String projectId, String contractId, String classify, String link,String trialProjectName) {
         InformationQuery obj = new InformationQuery();
+        obj.setId(SnowFlakeUtil.getId());
         obj.setWbsId(Long.valueOf(nodeId));
         obj.setProjectId(Long.valueOf(projectId));
         obj.setContractId(Long.valueOf(contractId));
         obj.setClassify(Integer.valueOf(classify));
         obj.setPdfUrl(link);
+        obj.setName(trialProjectName);
         iInformationQueryService.save(obj);
     }
 

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/ITrialSelfInspectionRecordService.java

@@ -23,7 +23,7 @@ public interface ITrialSelfInspectionRecordService extends BaseService<TrialSelf
 
     List<SampleAncillaryDocumentsVO> selfAncillaryDocumentsList(String id);
 
-    boolean selfUpdateAncillaryDocuments(List<SampleAncillaryDocumentsVO> vo);
+    boolean selfUpdateAncillaryDocuments( SampleAncillaryDocumentsVO vo);
 
     boolean selfCopy(List<Long> toLongList);
 

+ 96 - 77
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -161,17 +161,16 @@ public class TrialSelfInspectionRecordServiceImpl
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean selfUpdateAncillaryDocuments(List<SampleAncillaryDocumentsVO> vo) {
-        for (SampleAncillaryDocumentsVO sampleAncillaryDocumentsVO : vo) {
-            TrialMaterialMobilization trialMaterialMobilization = trialMaterialMobilizationMapper.selectById(sampleAncillaryDocumentsVO.getId());
-            if (ObjectUtil.isEmpty(trialMaterialMobilization)) {
-                throw new ServiceException("未获取到对应材料信息,修改失败");
-            }
-            trialMaterialMobilization.setQualityInspectionReport(sampleAncillaryDocumentsVO.getQualityInspectionReport());
-            trialMaterialMobilization.setOtherAccessories(sampleAncillaryDocumentsVO.getOtherAccessories());
-            trialMaterialMobilization.setProductionCertificate(sampleAncillaryDocumentsVO.getProductionCertificate());
-            trialMaterialMobilizationMapper.updateById(trialMaterialMobilization);
+    public boolean selfUpdateAncillaryDocuments(SampleAncillaryDocumentsVO vo) {
+        TrialMaterialMobilization trialMaterialMobilization = trialMaterialMobilizationMapper.selectById(vo.getId());
+        if (ObjectUtil.isEmpty(trialMaterialMobilization)) {
+            throw new ServiceException("未获取到对应材料信息,修改失败");
         }
+        trialMaterialMobilization.setQualityInspectionReport(vo.getQualityInspectionReport());
+        trialMaterialMobilization.setOtherAccessories(vo.getOtherAccessories());
+        trialMaterialMobilization.setProductionCertificate(vo.getProductionCertificate());
+        trialMaterialMobilizationMapper.updateById(trialMaterialMobilization);
+
         return true;
     }
 
@@ -244,15 +243,23 @@ public class TrialSelfInspectionRecordServiceImpl
         FileUtils.mergePdfPublicMethods(listPDFURL, listPdf);
         BladeFile bladeFile = this.newIOSSClient.uploadFile(dto.getNodeId() + ".pdf", listPdf);
 
+        //获取试验记录id的试验项目名称
+        List<String> collect = trialSelfInspectionRecords.stream().map(TrialSelfInspectionRecord::getTrialProjectName).collect(Collectors.toList());
+        String oneName = collect.stream().findAny().orElse(null);
+        String trialProjectName = "";
+        if (StringUtils.isNotEmpty(oneName)) {
+            trialProjectName = oneName + "等" + collect.size() + "个文件";
+        }
+
         if (ObjectUtil.isNotEmpty(bladeFile)) {
             //修改pdfURL
             String querySql = "select * from u_information_query where classify='" + dto.getType() + "' and wbs_id='" + dto.getNodeId() + "' and contract_id ='" + dto.getContractId() + "'";
             List<Map<String, Object>> resultSQL = jdbcTemplate.queryForList(querySql);
             if (resultSQL.size() > 0) {
-                String sql3 = "update u_information_query set pdf_url ='" + bladeFile.getLink() + "' where classify= '" + dto.getType() + "' and wbs_id='" + dto.getNodeId() + "' and contract_id ='" + dto.getContractId() + "'";
+                String sql3 = "update u_information_query set pdf_url ='" + bladeFile.getLink() + "', name = '" + trialProjectName + "' where classify= '" + dto.getType() + "' and wbs_id='" + dto.getNodeId() + "' and contract_id ='" + dto.getContractId() + "'";
                 jdbcTemplate.execute(sql3);
             } else {
-                informationQueryClient.saveData(dto.getNodeId(), dto.getProjectId(), dto.getContractId(), String.valueOf(dto.getType()), bladeFile.getLink());
+                informationQueryClient.saveData(dto.getNodeId(), dto.getProjectId(), dto.getContractId(), String.valueOf(dto.getType()), bladeFile.getLink(), trialProjectName);
             }
             return true;
         } else {
@@ -510,84 +517,96 @@ public class TrialSelfInspectionRecordServiceImpl
         dto.setTableIds(tableIdsAll);
 
         //新增或修改
-        this.saveOrUpdate(dto);
+        if (this.saveOrUpdate(dto)) {
+            try {
+                //保存实体表数据、记录信息、生成pdf
+                String pdfURL = excelTabClient.saveTabData(dto.getDataInfo(), dto.getType(), dto.getTableType(), dto.getId(), dto.getTableIds());
+                //返回合并pdfURL
+                if (StringUtils.isNotEmpty(pdfURL)) {
+                    LambdaUpdateWrapper<TrialSelfInspectionRecord> updateWrapper = new LambdaUpdateWrapper<>();
+                    updateWrapper.set(TrialSelfInspectionRecord::getPdfUrl, pdfURL);
+                    updateWrapper.eq(TrialSelfInspectionRecord::getId, dto.getId());
+                    this.update(null, updateWrapper);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
 
         if (ObjectUtil.isNotEmpty(dto.getId())) {
             //关联样品信息
-            if (StringUtils.isNotEmpty(dto.getSampleIds())) {
-                baseMapper.delSelfSample(dto.getId()); //删除关联信息
-                List<String> ids = Func.toStrList(dto.getSampleIds());
-                for (String id : ids) {  //新增关联信息
-                    baseMapper.saveSelfSample(SnowFlakeUtil.getId(), dto.getId(), id);
-                }
-            }
+            this.recordSample(dto);
 
             //关联工程部位及用途信息
-            if (StringUtils.isNotEmpty(dto.getProjectPosition())) {
-                baseMapper.delSelfQuality(dto.getId()); //删除关联信息
-                List<String> ids = Func.toStrList(dto.getProjectPosition());
-                for (String id : ids) { //新增关联信息
-                    baseMapper.saveSelfQuality(SnowFlakeUtil.getId(), dto.getId(), id);
-                }
-
-                //已审批填报记录
-                if (("已审批").equals(dto.getTaskStatus())) {
-                    //把当前试验的PDF合并关联到质检树节点下
-                    List<String> contractNodePKeyIds = baseMapper.selectQualityNodeId(String.valueOf(dto.getId()));
-
-                    for (String id : contractNodePKeyIds) {
-                        WbsTreeContract wbsTreeContract = wbsTreeContractClient.getContractNodeByPrimaryKeyId(id);
-                        if (wbsTreeContract != null) {
-                            List<String> pdfUrlList = new ArrayList<>();
-                            String classify;
-                            if (wbsTreeContract.getTableOwner().contains("1") || wbsTreeContract.getTableOwner().contains("2") || wbsTreeContract.getTableOwner().contains("3")) {
-                                classify = "1";
-                            } else {
-                                classify = "2";
-                            }
-                            String pdfUrlAll = baseMapper.selectInformationQuery(id, wbsTreeContract.getContractId(), classify);
-                            //质检节点合并pdfUrl
-                            pdfUrlList.add(pdfUrlAll);
-                            //试验pdfUrl
-                            pdfUrlList.add(ObjectUtil.isNotEmpty(dto.getPdfUrl()) ? dto.getPdfUrl() : "");
-
-                            //合并PDF
-                            String filePath = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-                            String listPdf = filePath + "/pdf/" + id + ".pdf";
-                            File tabPDF = ResourceUtil.getFile(listPdf);
-                            if (tabPDF.exists()) {
-                                tabPDF.delete();
-                            }
-                            FileUtils.mergePdfPublicMethods(pdfUrlList, listPdf);
-                            BladeFile bladeFile = this.newIOSSClient.uploadFile(id + ".pdf", listPdf);
-                            if (bladeFile != null) {
-                                //修改质检合并pdfURL
-                                baseMapper.updateInformationQuery(id, wbsTreeContract.getContractId(), classify, bladeFile.getLink());
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        //保存实体表数据、记录信息
-        String pdfURL = excelTabClient.saveTabData(dto.getDataInfo(), dto.getType(), dto.getTableType(), dto.getId());
-        //返回合并pdfURL
-        if (StringUtils.isNotEmpty(pdfURL)) {
-            LambdaUpdateWrapper<TrialSelfInspectionRecord> updateWrapper = new LambdaUpdateWrapper<>();
-            updateWrapper.set(TrialSelfInspectionRecord::getPdfUrl, pdfURL);
-            updateWrapper.eq(TrialSelfInspectionRecord::getId, dto.getId());
-            this.update(null, updateWrapper);
+            this.recordProjectPosition(dto);
         }
 
-        //新增设备使用记录信息
         if (StringUtils.isNotEmpty(dto.getDeviceUseIds())) {
+            //新增设备使用记录信息
             trialDeviceUseService.addDeviceUseInfo(dto);
         }
 
         return true;
     }
 
+    private void recordSample(TrialSelfInspectionRecordDTO dto) {
+        if (StringUtils.isNotEmpty(dto.getSampleIds())) {
+            baseMapper.delSelfSample(dto.getId()); //删除关联信息
+            List<String> ids = Func.toStrList(dto.getSampleIds());
+            for (String id : ids) {  //新增关联信息
+                baseMapper.saveSelfSample(SnowFlakeUtil.getId(), dto.getId(), id);
+            }
+        }
+    }
+
+    private void recordProjectPosition(TrialSelfInspectionRecordDTO dto) throws FileNotFoundException {
+        if (StringUtils.isNotEmpty(dto.getProjectPosition())) {
+            baseMapper.delSelfQuality(dto.getId()); //删除关联信息
+            List<String> ids = Func.toStrList(dto.getProjectPosition());
+            for (String id : ids) { //新增关联信息
+                baseMapper.saveSelfQuality(SnowFlakeUtil.getId(), dto.getId(), id);
+            }
+
+            //已审批填报记录
+            if (("已审批").equals(dto.getTaskStatus())) {
+                //把当前试验的PDF合并关联到质检树节点下
+                List<String> contractNodePKeyIds = baseMapper.selectQualityNodeId(String.valueOf(dto.getId()));
+
+                for (String id : contractNodePKeyIds) {
+                    WbsTreeContract wbsTreeContract = wbsTreeContractClient.getContractNodeByPrimaryKeyId(id);
+                    if (wbsTreeContract != null) {
+                        List<String> pdfUrlList = new ArrayList<>();
+                        String classify;
+                        if (wbsTreeContract.getTableOwner().contains("1") || wbsTreeContract.getTableOwner().contains("2") || wbsTreeContract.getTableOwner().contains("3")) {
+                            classify = "1";
+                        } else {
+                            classify = "2";
+                        }
+                        String pdfUrlAll = baseMapper.selectInformationQuery(id, wbsTreeContract.getContractId(), classify);
+                        //质检节点合并pdfUrl
+                        pdfUrlList.add(pdfUrlAll);
+                        //试验pdfUrl
+                        pdfUrlList.add(ObjectUtil.isNotEmpty(dto.getPdfUrl()) ? dto.getPdfUrl() : "");
+
+                        //合并PDF
+                        String filePath = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+                        String listPdf = filePath + "/pdf/" + id + ".pdf";
+                        File tabPDF = ResourceUtil.getFile(listPdf);
+                        if (tabPDF.exists()) {
+                            tabPDF.delete();
+                        }
+                        FileUtils.mergePdfPublicMethods(pdfUrlList, listPdf);
+                        BladeFile bladeFile = this.newIOSSClient.uploadFile(id + ".pdf", listPdf);
+                        if (bladeFile != null) {
+                            //修改质检合并pdfURL
+                            baseMapper.updateInformationQuery(id, wbsTreeContract.getContractId(), classify, bladeFile.getLink());
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     private void buildNumber(TrialSelfInspectionRecordDTO dto) {
         StringSPUtils spUtils = new StringSPUtils();
         List<TrialSelfInspectionRecord> trialSelfInspectionRecords = baseMapper.selectAll(dto.getNodeId());
@@ -677,7 +696,7 @@ public class TrialSelfInspectionRecordServiceImpl
             for (TrialSelfInspectionRecordVO record : records) {
                 //是否关联过
                 for (String recordId : selectedIds) {
-                    if (record.getId().toString().equals(recordId)){
+                    if (record.getId().toString().equals(recordId)) {
                         record.setIsSelectedStatus(1);
                     }
                 }

+ 1 - 1
blade-service/blade-manager/pom.xml

@@ -176,7 +176,7 @@
                     <target>${java.version}</target>
                     <encoding>${project.build.sourceEncoding}</encoding>
                     <compilerArguments>
-                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar:${java.home}/lib/jsse.jar
+                        <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar;${java.home}/lib/jsse.jar
                         </bootclasspath>
                     </compilerArguments>
                 </configuration>

+ 4 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -444,10 +444,11 @@ public class ContractInfoController extends BladeController {
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "wbsId", value = "wbsId", required = true),
             @ApiImplicitParam(name = "项目id", value = "projectId", required = true),
-            @ApiImplicitParam(name = "合同段id", value = "contractId", required = true)
+            @ApiImplicitParam(name = "合同段id", value = "contractId", required = true),
+            @ApiImplicitParam(name = "自检记录id", value = "selfId", required = true)
     })
-    public R trialRelationTree(String wbsId, String projectId, String contractId) {
-        Map<String,Object> tree = contractInfoService.trialRelationTree(wbsId, projectId, contractId);
+    public R trialRelationTree(String wbsId, String projectId, String contractId, String selfId) {
+        Map<String, Object> tree = contractInfoService.trialRelationTree(wbsId, projectId, contractId, selfId);
         if (tree != null && tree.size() > 0) {
             return R.data(tree);
         }
@@ -537,5 +538,4 @@ public class ContractInfoController extends BladeController {
     }
 
 
-
 }

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

@@ -1014,27 +1014,27 @@ public class ExcelTabController extends BladeController {
                             data.attr("title", inputText);
                             // 添加多选框
 
-                             String[] cheText = textInfo.split("□");
+                            String[] cheText = textInfo.split("□");
                             JSONArray objs = new JSONArray();
                             if (cheText != null && cheText.length >= 1) {
-                                int key =1;
-                                for (String keyval:cheText) {
+                                int key = 1;
+                                for (String keyval : cheText) {
                                     JSONObject jsonObject = new JSONObject();
-                                    if(StringUtils.isNotEmpty(keyval)){
+                                    if (StringUtils.isNotEmpty(keyval)) {
                                         jsonObject.put("key", key);
                                         jsonObject.put("name", keyval);
                                         objs.add(jsonObject);
-                                        keyId+=1;
+                                        keyId += 1;
                                     }
                                 }
-                            }else{
+                            } else {
                                 JSONObject jsonObject = new JSONObject();
                                 jsonObject.put("key", "1");
                                 jsonObject.put("name", "");
                                 objs.add(jsonObject);
                             }
 
-                            String checkbox = "<hc-form-checkbox-group :objs='"+objs+"'  @change='checkboxGroupChange' @contextmenu.prevent.native='RightClick("+parm+")' trIndex="+i+" tdIndex="+j+"  x1="+x1+" x2="+x2+" y1="+y1+" y2="+y2+" placeholder=''> </hc-form-checkbox-group>";
+                            String checkbox = "<hc-form-checkbox-group :objs='" + objs + "'  @change='checkboxGroupChange' @contextmenu.prevent.native='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " placeholder=''> </hc-form-checkbox-group>";
                             data.empty().append(checkbox);
 
                         } else {
@@ -2607,10 +2607,11 @@ public class ExcelTabController extends BladeController {
     @ApiOperationSupport(order = 34)
     @ApiOperation(value = "获取试验用户保存数据", notes = "获取试验用户保存数据")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "pkeyId", value = "pkeyId", required = true)
+            @ApiImplicitParam(name = "pkeyId", value = "表id", required = true),
+            @ApiImplicitParam(name = "id", value = "记录id-当做groupId", required = true)
     })
-    public R<List<Map<String, Object>>> getBussDataInfoTrial(Long pkeyId) {
-        List<Map<String, Object>> bussDataInfoTrial = excelTabService.getBussDataInfoTrial(pkeyId);
+    public R<List<Map<String, Object>>> getBussDataInfoTrial(Long id, Long pkeyId) {
+        List<Map<String, Object>> bussDataInfoTrial = excelTabService.getBussDataInfoTrial(id, pkeyId );
         return R.data(bussDataInfoTrial);
     }
 

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

@@ -124,7 +124,7 @@ public class TableFileController extends BladeController {
             wbsTreePrivateService.update(updateWrapper);
         }
         Long pkeyId = Long.parseLong(tableFile.getTabId() + "");
-        excelTabService.getBussPDFTrial(null, pkeyId, null);
+        excelTabService.getBussPDFTrial(pkeyId, contractId, id);
 
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
                 .eq(WbsTreePrivate::getPKeyId, pkeyId));

+ 26 - 12
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java

@@ -3,13 +3,20 @@ package org.springblade.manager.feign;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.AllArgsConstructor;
+import org.springblade.business.entity.TrialSelfInspectionRecord;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.entity.ExcelTab;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.service.IExcelTabService;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController
 @AllArgsConstructor
@@ -23,9 +30,10 @@ public class ExcelTabClientImpl implements ExcelTabClient {
     }
 
     @Override
-    public String saveTabData(JSONObject dataInfo, Integer type, Integer tableType, Long id) throws Exception {
-        JSONArray dataArray = dataInfo.getJSONArray("orderList");
+    @Transactional(rollbackFor = Exception.class)
+    public String saveTabData(JSONObject dataInfo, Integer type, Integer tableType, Long id, String tabIds) throws Exception {
         //通用参数
+        JSONArray dataArray = dataInfo.getJSONArray("orderList");
         JSONObject table = dataArray.getJSONObject(0);
         String nodeId = table.getString("nodeId");
         String projectId = table.getString("projectId");
@@ -35,30 +43,32 @@ public class ExcelTabClientImpl implements ExcelTabClient {
         String pdfUrl = "";
         if (dataArray.size() == 1) {
             //单表PDF
-            //保存数据到数据库-试验
-            this.excelTabService.saveOrUpdateInfoTrial(tableInfoList);
-            //公式
+            //保存数据到数据库-试验,当前记录id作为groupId
+            this.excelTabService.saveOrUpdateInfoTrial(tableInfoList, id);
             try {
+                //公式填充
                 this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeId));
             } catch (Exception e) {
                 e.printStackTrace();
             }
 
-            //单表PDF加载
-            for (TableInfo tableInfo : tableInfoList) {
-                excelTabService.getBussPDFTrial(tableInfo, Long.valueOf(tableInfo.getPkeyId()), contractId);
-            }
+            //单表PDF
+            TableInfo tableInfo = tableInfoList.stream().findAny().orElse(null);
+            assert tableInfo != null;
+            pdfUrl = excelTabService.getBussPDFTrial(Long.valueOf(tableInfo.getPkeyId()), contractId, id);
 
         } else if (dataArray.size() > 1) {
             //多表PDF
-            this.excelTabService.saveOrUpdateInfoTrial(tableInfoList);
+            //保存数据到数据库-试验,当前记录id作为groupId
+            this.excelTabService.saveOrUpdateInfoTrial(tableInfoList, id);
             try {
+                //公式填充
                 this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeId));
             } catch (Exception e) {
                 e.printStackTrace();
             }
 
-            //合并PDF加载
+            //多表合并PDF
             pdfUrl = excelTabService.getBussPDFSTrial(nodeId,
                     tableType, //tableType = 表类型 1=记录表 2=报告单
                     String.valueOf(type), //type = 所属方 1=施工质检 2=监理抽检
@@ -66,13 +76,17 @@ public class ExcelTabClientImpl implements ExcelTabClient {
                     projectId,
                     id //记录id
             );
+        } else {
+            //没有表关联,只修改记录信息
+            return pdfUrl;
         }
+
         return pdfUrl;
     }
 
     @Override
     public void getBussPDFTrial(Long pkeyId) throws Exception {
-        excelTabService.getBussPDFTrial(null, pkeyId, null);
+        excelTabService.getBussPDFTrial(pkeyId, null, null);
     }
 
     @Override

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.java

@@ -81,7 +81,7 @@ public interface ContractInfoMapper extends BaseMapper<ContractInfo> {
 
     List<UserContractInfoVO> userListByIds(@Param("ids") List<String> ids);
 
-    @Select("select quality_node_id from u_trial_self_quality_project")
-    List<String> queryList();
+    @Select("select quality_node_id from u_trial_self_quality_project where self_id = #{selfId}")
+    List<String> queryList(@Param("selfId") String selfId);
 
 }

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

@@ -17,6 +17,8 @@
 package org.springblade.manager.mapper;
 
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.springblade.business.entity.TrialSelfInspectionRecord;
 import org.springblade.manager.entity.ExcelTab;
 import org.springblade.manager.vo.ExceTabTreVO;
 import org.springblade.manager.vo.ExcelTabVO;
@@ -66,4 +68,7 @@ public interface ExcelTabMapper extends BaseMapper<ExcelTab> {
 
 	Integer removeBussTabInfoById(@Param("pkeyid") String pkeyid);
 
+	@Select("select trial_project_name from u_trial_self_inspection_record where id = #{id}")
+    String selectTrialRecordOne(@Param("id") Long id);
+
 }

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

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.manager.dto.FindAllUserByConditionDTO;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ContractRelationJlyz;
-import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.vo.*;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.system.user.entity.User;
@@ -63,6 +62,6 @@ public interface IContractInfoService extends BaseService<ContractInfo> {
 
     List<UserContractInfoVO> getContractUserInfo(String contractId);
 
-    Map<String, Object> trialRelationTree(String wbsId, String projectId, String contractId);
+    Map<String, Object> trialRelationTree(String wbsId, String projectId, String contractId, String selfId);
 
 }

+ 9 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java

@@ -97,11 +97,6 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
      */
     R saveOrUpdateInfo(List<TableInfo> tableInfoList) throws SQLException;
 
-    /**
-     * 结果信息持久化 - 试验
-     */
-    void saveOrUpdateInfoTrial(List<TableInfo> tableInfoList) throws SQLException;
-
     Map<String, String> getTablbCols(String pkeyid, String colkey) throws FileNotFoundException;
 
     // 获取用户端 单个表单接口数据
@@ -115,14 +110,21 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
 
 
     // 试验
+    /**
+     * 结果信息持久化 - 试验
+     */
+    void saveOrUpdateInfoTrial(List<TableInfo> tableInfoList, Long groupId) throws SQLException;
+
     /**
      * 获取试验用户端 单个表单接口数据
      */
-    List<Map<String, Object>> getBussDataInfoTrial(Long pkeyId);
+    List<Map<String, Object>> getBussDataInfoTrial(Long id, Long pkeyId);
+
     /**
      * 单PDF 生成 - 试验
      */
-    String getBussPDFTrial(TableInfo tableInfo, Long pKeyId, String contractId) throws Exception;
+    String getBussPDFTrial(Long pKeyId, String contractId, Long id) throws Exception;
+
     /**
      * 多PDF 合并 - 试验
      */

+ 18 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -23,8 +23,6 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.vo.UserContractInfoVO;
 import org.springblade.system.user.vo.UserVO2;
-import org.springframework.jdbc.core.BeanPropertyRowMapper;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
@@ -303,19 +301,29 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     }
 
     @Override
-    public Map<String, Object> trialRelationTree(String wbsId, String projectId, String contractId) {
-        Map<String,Object> maps = new HashMap<>();
-
+    public Map<String, Object> trialRelationTree(String wbsId, String projectId, String contractId, String selfId) {
         //合同段树
         List<WbsTreeContractVO> wbsTreeContractVOS = baseMapper.tree2(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId), null, null, null);
         List<WbsTreeContractVO> wbsTreeContractVOList = buildWbsTreeByStream(wbsTreeContractVOS);
-
         //是否勾选-试验关联工程部位信息
-        List<String> list = baseMapper.queryList();
-
-        maps.put("treeContractAll",wbsTreeContractVOList);
-        maps.put("isSelectedStatus",list);
+        List<String> listResult = new ArrayList<>();
+        if (StringUtils.isNotEmpty(selfId)) {
+            List<String> list = baseMapper.queryList(selfId);
+            if (list.size() > 0) {
+                for (WbsTreeContractVO wbsTreeContractVO : wbsTreeContractVOS) {
+                    for (String s : list) {
+                        if (wbsTreeContractVO.getPrimaryKeyId().equals(s)) {
+                            listResult.add(s);
+                        }
+                    }
+                }
+            }
+        }
+        Map<String, Object> maps = new HashMap<>();
+        maps.put("treeContractAll", wbsTreeContractVOList);
+        maps.put("isSelectedStatus", listResult.stream().distinct().collect(Collectors.toList()));
         return maps;
     }
 
+
 }

+ 43 - 40
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -32,6 +32,7 @@ import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
+import org.springblade.business.entity.TrialSelfInspectionRecord;
 import org.springblade.business.feign.ContractLogClient;
 import org.springblade.business.feign.InformationQueryClient;
 import org.springblade.business.feign.OperationLogClient;
@@ -326,7 +327,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     public void formulaFillData(List<TableInfo> tableInfoList, Long nodeId) {
         if (Func.isNotEmpty(tableInfoList)) {
             /*用来保存日志执行情况*/
-            StringBuilder log=new StringBuilder();
+            StringBuilder log = new StringBuilder();
             /*每次都是部分表单提交,保证跨节点跨表取数正常,其次是反向依赖的被动刷新*/
             List<AppWbsTreeContractVO> tableAll = wbsTreeContractService.searchNodeAllTable(nodeId.toString(), "1", tableInfoList.get(0).getContractId(), tableInfoList.get(0).getProjectId());
             StopWatch stopWatch = new StopWatch();
@@ -347,7 +348,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 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);
+                TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas, coordinateMap, currentNode, tableAll);
                 tec.setLog(log);
                 if (tec.isPresent()) {
                     tec.before();
@@ -355,12 +356,12 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     tec.after();
                 }
                 stopWatch.stop();
-                Long totalTime=stopWatch.getTotalTimeMillis();
+                Long totalTime = stopWatch.getTotalTimeMillis();
                 log.append("公式执行消耗时间:").append(totalTime);
                 StaticLog.info("公式执行用时:{}", totalTime);
-                String[] sql=new String[]{
-                        "delete from m_formula_log where id ="+wtc.getPKeyId(),
-                        "INSERT INTO m_formula_log (id,content) VALUES ("+wtc.getPKeyId()+", '"+log+"')"
+                String[] sql = new String[]{
+                        "delete from m_formula_log where id =" + wtc.getPKeyId(),
+                        "INSERT INTO m_formula_log (id,content) VALUES (" + wtc.getPKeyId() + ", '" + log + "')"
                 };
                 this.jdbcTemplate.batchUpdate(sql);
             }
@@ -746,8 +747,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             Elements xmtitle = doc.select("el-input[placeholder~=^项目名称]");
 
 
-
-
             // Elements title = doc.select("el-input[placeholder~=^编号]");
 
             /**
@@ -761,15 +760,15 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             ContractInfo contractInfo = contractInfoService.getById(wbsTreeContract.getContractId());
             // 施工单位名称
             if (dwtitle.size() >= 1) {
-                int y =Integer.parseInt(dwtitle.attr("trindex"));
-                if(y<=10){
+                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) {
+                int y = Integer.parseInt(sgtitle.attr("trindex"));
+                if (y <= 10) {
                     reData.put(sgtitle.attr("keyName"), contractInfo.getConstructionUnitName());
                 }
             }
@@ -804,7 +803,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             }
 
             // 项目名称
-            if (xmtitle.size() >= 1 ) {
+            if (xmtitle.size() >= 1) {
                 for (Element element : xmtitle) {
                     int trindex = Integer.parseInt(element.attr("trindex"));
                     if (trindex <= 6) {
@@ -906,7 +905,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     @Override
     public R getBussPdfInfo(Long pkeyId) throws Exception {
 
-        String file_path =ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
 
         WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, pkeyId));
@@ -1072,7 +1071,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
                 // 组装电签设置
                 QueryWrapper<TextdictInfo> queryWrapper = new QueryWrapper<>();
-                queryWrapper.in("type", 2,6);
+                queryWrapper.in("type", 2, 6);
                 queryWrapper.eq("tab_id", wbsTreeContract.getIsTypePrivatePid());
 
                 List<TextdictInfo> textdictInfos = textdictInfoService.getBaseMapper().selectList(queryWrapper);
@@ -1184,7 +1183,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
      * 试验 获取填报信息
      */
     @Override
-    public List<Map<String, Object>> getBussDataInfoTrial(Long pkeyId) {
+    public List<Map<String, Object>> getBussDataInfoTrial(Long groupId, Long pkeyId) {
         List<Map<String, Object>> list = new ArrayList<>();
         Map<String, Object> reData = new HashMap<>();
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
@@ -1204,7 +1203,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             throw new ServiceException("无实体表对应");
         }
 
-        String querySql = "select * from " + wbsTreePrivate.getInitTableName() + " where p_key_id=" + pkeyId;
+        String querySql = "select * from " + wbsTreePrivate.getInitTableName() + " where p_key_id=" + pkeyId + " and group_id = " + groupId;
         List<Map<String, Object>> dataIn = jdbcTemplate.queryForList(querySql);
 
         // 匹配关联
@@ -1212,13 +1211,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             File file1 = ResourceUtil.getFile(wbsTreePrivate.getHtmlUrl());
             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 htdtitle = doc.select("el-input[placeholder~=.*合同段.*]");
-            Elements jltitle = doc.select("el-input[placeholder~=^监理单位]");
-            Elements bhtitle = doc.select("el-input[placeholder~=^编号]");*/
-
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }
@@ -1313,7 +1305,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
      * 试验 单pdf
      */
     @Override
-    public String getBussPDFTrial(TableInfo tableInfo, Long pkeyId, String contractId) throws Exception {
+    @Transactional(rollbackFor = Exception.class)
+    public String getBussPDFTrial(Long pkeyId, String contractId, Long id) throws Exception {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateService.getBaseMapper().selectOne(Wrappers.<WbsTreePrivate>query().lambda()
                 .eq(WbsTreePrivate::getPKeyId, pkeyId));
@@ -1338,8 +1331,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             throw new ServiceException("操作失败!");
         }
 
-        @SuppressWarnings("unchecked") //忽略警告
-        Map<String, Object> DataInfo = (Map<String, Object>) getBussDataInfoTrial(pkeyId);
+        //获取数据信息info
+        List<Map<String, Object>> bussDataInfoTrial = this.getBussDataInfoTrial(id, pkeyId);
+        Map<String, Object> DataInfo = bussDataInfoTrial.stream().findAny().orElse(null);
 
         // 获取excel流 和 html流
         Workbook wb = new Workbook();
@@ -1357,7 +1351,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             }
         }
 
-        //数据不为空 &&
+        //数据不为空
         if (StringUtils.isNotEmpty(wbsTreePrivate.getHtmlUrl())) {
             File htmlFile = ResourceUtil.getFile(wbsTreePrivate.getHtmlUrl());
             if (htmlFile.exists()) {
@@ -1544,6 +1538,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
      * 试验 多pdf
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public String getBussPDFSTrial(String nodeId, Integer tableType, String classify, String contractId, String projectId, Long id) throws Exception {
         String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
         //获取有权限的节点信息
@@ -1554,14 +1549,17 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             for (WbsTreePrivate wbsInfo : wbsTreePrivateList) {
                 //隐藏的不生成pdf
                 if (wbsInfo.getIsBussShow() == null || wbsInfo.getIsBussShow() != 2) { //
-                    if (StringUtils.isNotEmpty(wbsInfo.getPdfUrl())) {
+                    /*if (StringUtils.isNotEmpty(wbsInfo.getPdfUrl())) {
                         data.add(wbsInfo.getPdfUrl());
-                    } else {
-                        String bussPdfInfo = this.getBussPDFTrial(null, wbsInfo.getPKeyId(), contractId);
-                        if (StringUtils.isNotEmpty(bussPdfInfo)) {
-                            data.add(bussPdfInfo + "");
-                        }
+                    } else {*/
+
+                    //重新生成pdf
+                    String bussPdfInfo = this.getBussPDFTrial(wbsInfo.getPKeyId(), contractId, id);
+                    if (StringUtils.isNotEmpty(bussPdfInfo)) {
+                        data.add(bussPdfInfo);
                     }
+                    //}
+
                 }
             }
         }
@@ -1574,13 +1572,18 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         FileUtils.mergePdfPublicMethods(data, listPdf);
         BladeFile bladeFile = this.newIOSSClient.uploadFile(nodeId + ".pdf", listPdf);
 
+        //获取试验记录id的试验项目名称
+        String trialProjectName = baseMapper.selectTrialRecordOne(id);
+
         //合并PDF集合
         String querySql = "select * from u_information_query where classify='" + classify + "' and  wbs_id='" + id + "' and contract_id ='" + contractId + "'";
         List<Map<String, Object>> resultSQL = jdbcTemplate.queryForList(querySql);
         if (resultSQL.size() > 0) {
-            informationQueryClient.updateInformationQuery(bladeFile.getLink(), classify, id.toString(), contractId);
+            String updateSql = "update u_information_query set pdf_url = '" + bladeFile.getLink() + "', name = '" + trialProjectName + "'  where classify='" + classify + "' and  wbs_id='" + id + "' and contract_id ='" + contractId + "'";
+            jdbcTemplate.execute(updateSql);
+            //informationQueryClient.updateInformationQuery(bladeFile.getLink(), classify, id.toString(), contractId);
         } else {
-            informationQueryClient.saveData(id.toString(), projectId, contractId, classify, bladeFile.getLink());
+            informationQueryClient.saveData(id.toString(), projectId, contractId, classify, bladeFile.getLink(), trialProjectName);
         }
         return bladeFile.getLink();
     }
@@ -1590,7 +1593,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
      */
     @Override
     @Transactional
-    public void saveOrUpdateInfoTrial(List<TableInfo> tableInfoList) throws SQLException {
+    public void saveOrUpdateInfoTrial(List<TableInfo> tableInfoList, Long groupId) throws SQLException {
         //试验填报
         if (ListUtils.isNotEmpty(tableInfoList)) {
             try {
@@ -1603,14 +1606,14 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
                     String tabName = wbsTreePrivate.getInitTableName();
                     // 判读修改还是 添加
-                    String delSql = "delete from " + tabName + " where p_key_id=" + tableInfo.getPkeyId();
+                    String delSql = "delete from " + tabName + " where p_key_id=" + tableInfo.getPkeyId() + " and group_id = " + groupId;
                     jdbcTemplate.execute(delSql);
 
                     String sqlInfo = "";
                     LinkedHashMap<String, String> dataMap2 = tableInfo.getDataMap();
                     sqlInfo = "INSERT INTO " + tabName + " ( ";
-                    String keyStr = "id,";
-                    String valStr = SnowFlakeUtil.getId() + ",";
+                    String keyStr = "id,group_id,";
+                    String valStr = SnowFlakeUtil.getId() + "," + groupId + ",";
                     for (String keys : dataMap2.keySet()) {
                         keyStr += keys + ",";
                         valStr += "'" + dataMap2.get(keys) + "',";