Browse Source

Merge branch 'master' of http://121.41.40.202:3000/zhuwei/bladex

huangtf 1 year ago
parent
commit
ee0620eba5

+ 98 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/FB02.java

@@ -0,0 +1,98 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.dto.FormData;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author yangyj
+ * @Date 2023/11/1 17:24
+ * @description 评定表FB02
+ */
+@Data
+public class FB02 {
+    private FormData subItem;
+    private FormData sn;
+    private FormData name;
+    private FormData passRate;
+    private FormData weight;
+    private List<FormData> fds = new ArrayList<>();
+    private List<Item> datas = new ArrayList<>();
+
+
+    @Data
+    public static class Item{
+        private String subItem;
+        private String name;
+        private Double passRate=100d;
+        private Integer weight=1;
+        public Item(String subItem, String name, Double passRate, Integer weight) {
+            this.subItem = subItem;
+            this.name = name;
+            this.passRate = passRate;
+            this.weight = weight;
+        }
+        public Item() {
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            if(name!=null&&name.contains("△")){
+                this.weight=2;
+            }
+            this.name = name;
+        }
+    }
+
+
+    public void addItem(String subItem,String name,Double passRate, Integer weight){
+          this.datas.add(new Item(subItem, name, passRate, weight));
+    }
+
+    private FB02() {
+        /*禁止无参构建实例*/
+    }
+
+    public FB02(List<FormData> processFds) {
+         for(FormData fd:processFds){
+              if(fd.getEName().contains("分项工程名称")){
+                  this.subItem=fd;
+              }else if(fd.getEName().contains("序号")){
+                  this.sn=fd;
+              }else if(fd.getEName().contains("实测项目")){
+                  this.name=fd;
+              }else if(fd.getEName().contains("实测合格率")){
+                  this.passRate=fd;
+
+              }else if(fd.getEName().contains("权值")){
+                  this.weight=fd;
+              }
+              if(this.subItem!=null&&this.name!=null&&this.passRate!=null&&this.weight!=null&&this.sn!=null){
+                  /*匹配完成*/
+                  this.fds.add(this.subItem);
+                  this.fds.add(this.sn);
+                  this.fds.add(this.name);
+                  this.fds.add(this.passRate);
+                  this.fds.add(this.weight);
+                  break;
+              }
+         }
+    }
+
+    public void initFdCoords(Map<String,String> tableKeysCoordsMap){
+        for(FormData fd:this.fds){
+            String coords =tableKeysCoordsMap.get(fd.getKey());
+            if(Func.isNotBlank(coords)){
+                fd.flushCoords(coords);
+            }
+        }
+    }
+
+}

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

@@ -156,20 +156,24 @@ public class ArchivesAutoController extends BladeController {
 			@ApiImplicitParam(name = "nodeIds", value = "搜索树的节点id集合")
 	})
 	public R pageByArchivesAuto(ArchivesAutoVO archivesAuto) {
-		if (archivesAuto.getListType() == 1) {
-			IPage<ArchivesAutoVO> pages = archivesAutoService.pageByArchivesAuto(archivesAuto);
-			return R.data(pages);
-		}else {
-			//档案柜
-			if(archivesAuto.getCabinetNumber() == null) {
-				List<Map<String, List<Map<String, String>>>> lists = archivesAutoService.getArchivesCabinet(archivesAuto);
-				return R.data(lists);
-			}else {
-				//查询具体柜子里的数据
-				archivesAuto.setSize(160);
-				archivesAuto.setCurrent(archivesAuto.getCabinetNumber());
-				return archivesAutoService.pageByArchivesAuto2(archivesAuto);
+		try {
+			if (archivesAuto.getListType() == 1) {
+				IPage<ArchivesAutoVO> pages = archivesAutoService.pageByArchivesAuto(archivesAuto);
+				return R.data(pages);
+			} else {
+				//档案柜
+				if (archivesAuto.getCabinetNumber() == null) {
+					List<Map<String, List<Map<String, String>>>> lists = archivesAutoService.getArchivesCabinet(archivesAuto);
+					return R.data(lists);
+				} else {
+					//查询具体柜子里的数据
+					archivesAuto.setSize(160);
+					archivesAuto.setCurrent(archivesAuto.getCabinetNumber());
+					return archivesAutoService.pageByArchivesAuto2(archivesAuto);
+				}
 			}
+		}catch (Exception e){
+			return R.data(null);
 		}
 	}
 

+ 75 - 62
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1830,7 +1830,7 @@ public class InformationWriteQueryController extends BladeController {
         if (wtc != null) {
             try {
                 String tableName = wtc.getInitTableName();
-                if(!ekvMap.containsKey(tableName)) {
+                if (!ekvMap.containsKey(tableName)) {
                     Map<String, String> map = ekvMap.computeIfAbsent(wtc.getInitTableName(), K -> new HashMap<>());
                     if (parent == null) {
                         parent = this.wbsTreeContractClient.getContractWbsTreeByContractIdAndId(wtc.getParentId(), Long.parseLong(wtc.getContractId()));
@@ -2954,7 +2954,7 @@ public class InformationWriteQueryController extends BladeController {
     @PostMapping("/saveContractTreeNode")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "新增节点及其子节点")
-    @TreeCodeUpdate(name="contractId_${vo.contractId}")
+    @TreeCodeUpdate(name = "contractId_${vo.contractId}")
     public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
         //先获取当前节点的信息
         WbsTreeContract treeContract = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(vo.getCurrentNodePrimaryKeyId()));
@@ -3134,7 +3134,7 @@ public class InformationWriteQueryController extends BladeController {
                 newData.setContractIdRelation(treeContract.getContractIdRelation());
                 newData.setContractType(treeContract.getContractType());
                 newData.setCreateTime(new Date());
-                if(Optional.ofNullable(half.getNodeType()).orElse(7)<=6){
+                if (Optional.ofNullable(half.getNodeType()).orElse(7) <= 6) {
                     newData.setIsTypePrivatePid(half.getPKeyId());
                 }
                 if (half.getType() != null && new Integer("2").equals(half.getType())) {
@@ -3566,76 +3566,89 @@ public class InformationWriteQueryController extends BladeController {
             //这一步主要是为了兼容监理合同段
             node = this.wbsTreeContractClient.getContractWbsTreeByContractIdAndId(vo.getWbsId(), Long.parseLong(vo.getContractIdRelation()));
         }
-        List<QueryProcessDataVO> queryDataResult = new ArrayList<>();
-        List<WbsTreeContractVO8> lowestNodes = new ArrayList<>();
-        if (!new Integer("6").equals(node.getNodeType()) && !Arrays.asList("1,2,3,4".split(",")).contains(node.getMajorDataType() + "")) {
-            /**
-             * 更改逻辑
-             * 使用queryProcessDataByParentIdAndContractId_3中,通过pKeyId查询;
-             * 放弃使用queryProcessDataByParentIdAndContractIdTwo中,通过ancestors字段查询,ancestors有问题
-             * @author liuyc
-             * @date 2023年9月8日11:26:46
-             */
-            //不是工序,则查询当前节点下的所有填报节点
-            if (node.getParentId() == 0) {
-                //当前合同段最底层节点pKeyIds
-                List<WbsTreeContract> lowestNodesAll = jdbcTemplate.query("select a.p_key_id,a.id,(SELECT CASE WHEN COUNT(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND b.contract_id = " + node.getContractId() + " AND b.status = 1 AND b.type = 1 AND b.is_deleted = 0) AS hasChildren from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + node.getContractId() + " HAVING hasChildren = 0", new BeanPropertyRowMapper<>(WbsTreeContract.class));
-                List<String> pKeyIds = lowestNodesAll.stream().map(WbsTreeContract::getPKeyId).map(String::valueOf).collect(Collectors.toList());
-                List<List<String>> partition = Lists.partition(pKeyIds, 1000);
-                for (List<String> items : partition) {
-                    //获取填报节点信息
-                    List<QueryProcessDataVO> result = this.informationQueryMapper.queryProcessDataByParentIdAndContractId_3(contract.getContractType(), items);
-                    if (result.size() > 0) {
-                        queryDataResult.addAll(result);
+
+        if (node != null) {
+            List<QueryProcessDataVO> queryDataResult = new ArrayList<>();
+            List<WbsTreeContractVO8> lowestNodes = new ArrayList<>();
+            if (!new Integer("6").equals(node.getNodeType()) && !Arrays.asList("1,2,3,4".split(",")).contains(node.getMajorDataType() + "")) {
+                /**
+                 * 更改逻辑
+                 * 使用queryProcessDataByParentIdAndContractId_3中,通过pKeyId查询;
+                 * 放弃使用queryProcessDataByParentIdAndContractIdTwo中,通过ancestors字段查询,ancestors有问题
+                 * @author liuyc
+                 * @date 2023年9月8日11:26:46
+                 */
+                //不是工序,则查询当前节点下的所有填报节点
+                if (node.getParentId() == 0) {
+                    //当前合同段最底层节点pKeyIds
+                    List<WbsTreeContract> lowestNodesAll = jdbcTemplate.query("select a.p_key_id,a.id,(SELECT CASE WHEN COUNT(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND b.contract_id = " + node.getContractId() + " AND b.status = 1 AND b.type = 1 AND b.is_deleted = 0) AS hasChildren from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + node.getContractId() + " HAVING hasChildren = 0", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+                    List<String> pKeyIds = lowestNodesAll.stream().map(WbsTreeContract::getPKeyId).map(String::valueOf).collect(Collectors.toList());
+
+                    /*TODO 暂时解决page数量过多导致响应超时问题*/
+                    if (pKeyIds.size() > 1000) {
+                        return R.fail("当前节点下子节点过多,请减少节点层级进行检索!");
+                    }
+
+                    List<List<String>> partition = Lists.partition(pKeyIds, 1000);
+                    for (List<String> items : partition) {
+                        //获取填报节点信息
+                        List<QueryProcessDataVO> result = this.informationQueryMapper.queryProcessDataByParentIdAndContractId_3(contract.getContractType(), items);
+                        if (result.size() > 0) {
+                            queryDataResult.addAll(result);
+                        }
                     }
-                }
 
-                //queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo("", contract.getContractType(), StringUtils.isNotEmpty(vo.getContractIdRelation()) ? vo.getContractIdRelation() : vo.getContractId().toString());
-            } else {
-                //获取当前选择的节点下的所有最底层节点
-                WbsTreeContractVO8 vo8 = BeanUtil.copyProperties(node, WbsTreeContractVO8.class);
-                this.lowestNodesRecursively(lowestNodes, Collections.singleton(vo8), node.getContractId());
-                List<String> pKeyIds = lowestNodes.stream().map(WbsTreeContractVO8::getPKeyId).map(String::valueOf).collect(Collectors.toList());
-                List<List<String>> partition = Lists.partition(pKeyIds, 1000);
-                for (List<String> items : partition) {
-                    //获取填报节点信息
-                    List<QueryProcessDataVO> result = this.informationQueryMapper.queryProcessDataByParentIdAndContractId_3(contract.getContractType(), items);
-                    if (result.size() > 0) {
-                        queryDataResult.addAll(result);
+                    //queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo("", contract.getContractType(), StringUtils.isNotEmpty(vo.getContractIdRelation()) ? vo.getContractIdRelation() : vo.getContractId().toString());
+                } else {
+                    //获取当前选择的节点下的所有最底层节点
+                    WbsTreeContractVO8 vo8 = BeanUtil.copyProperties(node, WbsTreeContractVO8.class);
+                    this.lowestNodesRecursively(lowestNodes, Collections.singleton(vo8), node.getContractId());
+                    List<String> pKeyIds = lowestNodes.stream().map(WbsTreeContractVO8::getPKeyId).map(String::valueOf).collect(Collectors.toList());
+
+                    /*TODO 暂时解决page数量过多导致响应超时问题*/
+                    if (pKeyIds.size() > 1000) {
+                        return R.fail("当前节点下子节点过多,请减少节点层级进行检索!");
+                    }
+
+                    List<List<String>> partition = Lists.partition(pKeyIds, 1000);
+                    for (List<String> items : partition) {
+                        //获取填报节点信息
+                        List<QueryProcessDataVO> result = this.informationQueryMapper.queryProcessDataByParentIdAndContractId_3(contract.getContractType(), items);
+                        if (result.size() > 0) {
+                            queryDataResult.addAll(result);
+                        }
                     }
-                }
 
-                //queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo(node.getId().toString(), contract.getContractType(), StringUtils.isNotEmpty(vo.getContractIdRelation()) ? vo.getContractIdRelation() : vo.getContractId().toString());
-            }
+                    //queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractIdTwo(node.getId().toString(), contract.getContractType(), StringUtils.isNotEmpty(vo.getContractIdRelation()) ? vo.getContractIdRelation() : vo.getContractId().toString());
+                }
 
-            //如果是首件列表请求,则删掉没有标记为首件的数据
-            if (queryDataResult.size() > 0) {
-                if (StringUtils.isNotEmpty(vo.getIsFirst())) {
-                    if (StringUtils.isNotEmpty(vo.getFirstTitle())) {
-                        queryDataResult = queryDataResult.stream().filter(qdr -> "3".equals(qdr.getQueryType())).collect(Collectors.toList());
-                    } else {
-                        //节点主键集合
-                        List<String> treeIds = queryDataResult.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList());
-                        //通过合同段主键在首件关联表中查询出所有数据
-                        List<TreeContractFirst> firstList = treeContractFirstService.list(new LambdaQueryWrapper<TreeContractFirst>().in(TreeContractFirst::getWbsNodeId, treeIds));
-                        List<String> list = firstList.stream().map(fl -> (fl.getWbsNodeId() + "")).collect(Collectors.toList());
-                        queryDataResult = queryDataResult.stream().filter(qdr -> list.contains(qdr.getPrimaryKeyId())).collect(Collectors.toList());
+                //如果是首件列表请求,则删掉没有标记为首件的数据
+                if (queryDataResult.size() > 0) {
+                    if (StringUtils.isNotEmpty(vo.getIsFirst())) {
+                        if (StringUtils.isNotEmpty(vo.getFirstTitle())) {
+                            queryDataResult = queryDataResult.stream().filter(qdr -> "3".equals(qdr.getQueryType())).collect(Collectors.toList());
+                        } else {
+                            //节点主键集合
+                            List<String> treeIds = queryDataResult.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList());
+                            //通过合同段主键在首件关联表中查询出所有数据
+                            List<TreeContractFirst> firstList = treeContractFirstService.list(new LambdaQueryWrapper<TreeContractFirst>().in(TreeContractFirst::getWbsNodeId, treeIds));
+                            List<String> list = firstList.stream().map(fl -> (fl.getWbsNodeId() + "")).collect(Collectors.toList());
+                            queryDataResult = queryDataResult.stream().filter(qdr -> list.contains(qdr.getPrimaryKeyId())).collect(Collectors.toList());
+                        }
                     }
+                    submitNodeKeyIds.addAll(queryDataResult.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList()));
                 }
-                submitNodeKeyIds.addAll(queryDataResult.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList()));
             }
-        }
 
-        //设置进集合中
-        vo.setWbsIds(submitNodeKeyIds);
-        if (StringUtils.isNotEmpty(vo.getContractIdRelation())) {
-            vo.setContractId(Long.valueOf(vo.getContractIdRelation()));
+            //设置进集合中
+            vo.setWbsIds(submitNodeKeyIds);
+            if (StringUtils.isNotEmpty(vo.getContractIdRelation())) {
+                vo.setContractId(Long.valueOf(vo.getContractIdRelation()));
+            }
         }
-
         return R.data(this.informationQueryService.selectInformationQueryPage(Condition.getPage(query), vo, node));
     }
 
-
     /**
      * 获取一个节点下的所有最底层节点
      *
@@ -3782,9 +3795,9 @@ public class InformationWriteQueryController extends BladeController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "ids", value = "ids", required = true)
     })
-    public R<String> getQueryInfoIds(String  ids) {
+    public R<String> getQueryInfoIds(String ids) {
         List<String> strList = Func.toStrList(ids);
-        for(String da : strList) {
+        for (String da : strList) {
             InformationQueryVO vo = new InformationQueryVO();
             vo.setWbsId(Long.parseLong(da));
             vo.setClassifyType("1");

+ 11 - 9
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -630,7 +630,6 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 
         String pdfUrlEVisa = this.completeApprovalTask(taskApprovalVO);
 
-
         System.out.println("电签操作成功buss-----" + pdfUrlEVisa + "---batchId=" + batchId);
         //TODO ============== 电签成功,修改试验状态,关联工程部位信息pdf(只有电签成功,才修改) liuYc 2023-03-16 ==============
         if ("OK".equals(taskApprovalVO.getFlag()) && StringUtils.isNotEmpty(pdfUrlEVisa)) {
@@ -805,6 +804,9 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 
             //任务废除通知
             this.abolishMessage(masterTask, currentLink, comment);
+
+            //删除合同段树redis缓存 TODO 不清楚updateBusinessDataByFormDataId为什么没生效,在外层再次删除
+            informationQueryService.delAsyncWbsTree(masterTask.getContractId());
         }
         return "";
     }
@@ -1136,7 +1138,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         .set(InformationQuery::getBusinessTime, dateInfo)
                         .in(InformationQuery::getId, Arrays.asList(formDataId.split(","))));
 
-                //如果是废除任务,那么删除合同段节点树缓存
+                //如果是废除任务,那么删除合同段节点树缓存 TODO 不清楚为什么没生效,在外层删除
                 if (status == 3) {
                     informationQueryService.delAsyncWbsTree(queryinfo.getContractId().toString());
                 }
@@ -1237,12 +1239,12 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             if (wbsTreeContract != null) {
                 createTime = wbsTreeContract.getCreateTime();
             }
-            ArchiveFile newArchiveFile = getArchiveFile(query, nodeId, keyId, query.getEVisaPdfSize(), contractIndfo.archivesUnit(), createTime,query.getClassify());
+            ArchiveFile newArchiveFile = getArchiveFile(query, nodeId, keyId, query.getEVisaPdfSize(), contractIndfo.archivesUnit(), createTime, query.getClassify());
             this.archiveFileService.save(newArchiveFile);
         }
     }
 
-    public ArchiveFile getArchiveFile(InformationQuery query, Long nodeId, Long keyId, Long fileSize, String unit, Date createTime,Integer classify) {
+    public ArchiveFile getArchiveFile(InformationQuery query, Long nodeId, Long keyId, Long fileSize, String unit, Date createTime, Integer classify) {
         ArchiveFile archiveFile = new ArchiveFile();
         archiveFile.setNodeId(nodeId.toString());
         archiveFile.setNodeExtId(keyId);
@@ -1372,7 +1374,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 //    }
 
     @Override
-    public void reSigningEVisa(String taskIds, String contractId, String projectId,String header) {
+    public void reSigningEVisa(String taskIds, String contractId, String projectId, String header) {
         //查询任务信息
         List<Task> taskList = jdbcTemplate.query("select * from u_task where id in(" + taskIds + ")", new BeanPropertyRowMapper<>(Task.class));
         if (taskList.size() > 0) {
@@ -1388,7 +1390,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             Map<String, List<TaskParallel>> finalTaskParallelGroupMap = taskParallelGroupMap;
             //获取每条任务对应的节点信息
             List<String> dataIdList = taskList.stream().map(Task::getFormDataId).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
-            Map<String, String> queryMap = jdbcTemplate.query("select * from u_information_query where id in(" + StringUtils.join(dataIdList, ",") + ")", new BeanPropertyRowMapper<>(InformationQuery.class)).stream().collect(Collectors.toMap(l -> l.getId()+"", l -> l.getWbsId()+""));
+            Map<String, String> queryMap = jdbcTemplate.query("select * from u_information_query where id in(" + StringUtils.join(dataIdList, ",") + ")", new BeanPropertyRowMapper<>(InformationQuery.class)).stream().collect(Collectors.toMap(l -> l.getId() + "", l -> l.getWbsId() + ""));
             try {
                 for (Task task : taskList) {
                     //重新保存
@@ -1427,7 +1429,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
                                 .set(TaskParallel::getEVisaContent, "重新保存PDF失败")
                                 .eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId())
-                                .eq(TaskParallel::getEVisaStatus,"99"));
+                                .eq(TaskParallel::getEVisaStatus, "99"));
                     }
                 }
 
@@ -1440,8 +1442,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         throw new ServiceException("未获取到任务信息,操作失败!");
     }
 
-    R saveNodePdf(String nodePKeyIds, String contractId, String projectId,String header) throws Exception {
-        return excelTabClient.synPDFInfo(contractId, nodePKeyIds, "1", projectId,header);
+    R saveNodePdf(String nodePKeyIds, String contractId, String projectId, String header) throws Exception {
+        return excelTabClient.synPDFInfo(contractId, nodePKeyIds, "1", projectId, header);
     }
 
 }

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

@@ -41,6 +41,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
+import javax.validation.constraints.NotNull;
 import java.io.FileNotFoundException;
 import java.net.UnknownHostException;
 import java.time.Instant;
@@ -498,7 +499,7 @@ public class FormulaController {
         return dev;
     }
 
-
+    /**节点溯源*/
     @GetMapping("/tracing")
     @ApiOperationSupport(order = 10)
     public R<Object> tracing(Long pkeyId) {
@@ -929,5 +930,10 @@ public class FormulaController {
     }
 
 
+    @GetMapping("/evaluate")
+    public R<Object> evaluate(@NotNull(message="tablePkeyId 不能为空") Long tablePkeyId){
+         return this.service.evaluate(tablePkeyId);
+    }
+
 
 }

+ 9 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java

@@ -410,7 +410,15 @@ public interface ITurnPointCalculator {
     static boolean finalizeCe(TurnPoint tp){
         if(Func.isNotBlank(tp.getSc())&&Func.isNotBlank(tp.getSj())&&Func.isNotBlank(tp.getQ())&&Func.isNotBlank(tp.getDx())){
             /*实测高程=视线高-前视*/
-            boolean f1= tp.getSc0L()==tp.getLevelInfo().getSightHeight()-tp.getQ0L();
+            double  qs=tp.getLevelInfo().getSightHeight()-tp.getQ0L();
+            boolean f1= tp.getSc0L()==qs;
+            if(!f1){
+                /*尝试修复*/
+                if(qs >= tp.getLevelInfo().getMin() && qs <= tp.getLevelInfo().getStep()){
+                      tp.setQ(qs);
+                      f1=true;
+                }
+            }
             /*实测高程-设计值高程=偏差值*/
             boolean f2=tp.getSc0L()-tp.getSj0L()==tp.getDx0L();
             return f1&&f2&&tp.isVisible(tp.isNegativeQ());

+ 1 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/TurnPoint.java

@@ -243,14 +243,7 @@ public class TurnPoint {
         if(negative){
             d=  Math.abs(d);
         }
-        if(d >= levelInfo.getMin() && d <= levelInfo.getStep()){
-            if(levelInfo.getSightHeight()-getQ0L()!=getSc0L()){
-                /*微调修复前视*/
-                setQ(levelInfo.getSightHeight()-getSc0L());
-            }
-            return true;
-        }
-        return false;
+        return d >= levelInfo.getMin() && d <= levelInfo.getStep() && levelInfo.getSightHeight() - getQ0L() == getSc0L();
 
     }
     /**判断转点前后视是否在范围*/

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/StartupTimeListener.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.formula.impl;
 
+import org.jetbrains.annotations.NotNull;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.ApplicationListener;
 import org.springframework.stereotype.Component;
@@ -16,7 +17,7 @@ public class StartupTimeListener implements ApplicationListener<ApplicationReady
     private static Instant startupTime;
 
     @Override
-    public void onApplicationEvent(ApplicationReadyEvent event) {
+    public void onApplicationEvent(@NotNull ApplicationReadyEvent event) {
         startupTime = Instant.now();
     }
 

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

@@ -112,5 +112,5 @@ public interface IFormulaService extends BaseService<Formula> {
     void paramFormula(WbsTreeContract wbsTreeContract, Map<String, Object> result, Document document);
 
     /**表单数据加载的时候执行节点参数*/
-    R<Object> pd(Long pkeyId);
+    R<Object> evaluate(Long pkeyId);
 }

+ 32 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -33,6 +33,7 @@ import org.springblade.manager.mapper.FormulaMapper;
 import org.springblade.manager.service.*;
 import org.springblade.manager.vo.AppWbsTreeContractVO;
 import org.springblade.manager.vo.CurrentNode;
+import org.springblade.manager.vo.FB02;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.annotation.ScopedProxyMode;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -2358,18 +2359,46 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
     @Override
-    public R<Object> pd(Long pkeyId) {
+    public R<Object> evaluate(Long pkeyId) {
         if(StringUtils.isNumber(pkeyId)) {
-            WbsTreeContract wtc= this.getSqlOne("select tree_code treeCode,contract_id from m_wbs_tree_contract where p_key_id =" + pkeyId,WbsTreeContract.class);
+            WbsTreeContract wtc= this.getSqlOne("select tree_code treeCode,contract_id,init_table_name,html_url from m_wbs_tree_contract where p_key_id =" + pkeyId,WbsTreeContract.class);
+            List<FormData> processFds = this.createFormDataByTableName(wtc.getInitTableName());
+            FB02 fb02 = new FB02(processFds);
             LinkedList<String> treeCode = new LinkedList<>(FormulaUtils.treeCodeSplit(wtc.getTreeCode()));
             List<FormulaDataBlock> formulaDataBlocks = this.getSqlList("select a.* from m_formula_data_block a join (select parent_id from m_wbs_tree_contract where tree_code like '"+treeCode.getLast()+"%' and contract_id ="+wtc.getContractId()+" and major_data_type=2 and is_deleted=0 ORDER BY tree_code)b on a.sw_id=b.parent_id ",FormulaDataBlock.class);
             if(formulaDataBlocks.size()>0){
-                return R.data(formulaDataBlocks);
+                 formulaDataBlocks.forEach(fdb->{
+                     List<ElementBlock> elementBlockList = JSON.parseArray(fdb.getVal(), ElementBlock.class);
+                     elementBlockList.forEach(eb->{
+                         String name = eb.getEName();
+                         FB02.Item  xm=new FB02.Item();
+                         xm.setName(name);
+                         List<ItemBlock> ib=  eb.getList();
+                         int total=  ib.stream().mapToInt(ItemBlock::getSubTotal).sum();
+                         int pass=   ib.stream().mapToInt(ItemBlock::getSubPass).sum();
+                         if(total>0) {
+                             double rate = (double) pass / (double) total;
+                             if (rate >= 0 && rate <= 100) {
+                                 xm.setPassRate(rate);
+                             }
+                         }
+                         fb02.getDatas().add(xm);
+                     });
+                 });
+                 if(fb02.getDatas().size()>0){
+                    Map<String,String> tableKeysCoordsMap= FormulaUtils.getElementCell(wtc.getHtmlUrl());
+                    fb02.initFdCoords(tableKeysCoordsMap);
+                    /*根据数据长度,增减页数*/
+
+                 }
+                return R.success("成功");
             }
         }
         return R.fail("无数据");
     }
 
+
+
 }