Browse Source

Merge remote-tracking branch 'origin/master'

liuyc 1 year ago
parent
commit
3563e9f62d
34 changed files with 356 additions and 252 deletions
  1. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/FormulaClient.java
  2. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchiveExpertConclusionMapper.java
  3. 7 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchiveExpertConclusionMapper.xml
  4. 5 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  5. 4 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java
  6. 5 3
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExpertConclusionServiceImpl.java
  7. 36 38
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExpertScoreServiceImpl.java
  8. 19 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  9. 3 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  10. 3 4
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController.java
  11. 6 18
      blade-service/blade-manager/src/main/java/com/jfireel/expression/Expression.java
  12. 35 0
      blade-service/blade-manager/src/main/java/com/jfireel/expression/parse/impl/ChineseParser.java
  13. 1 1
      blade-service/blade-manager/src/main/java/com/jfireel/expression/parse/impl/IdentifierParser.java
  14. 3 7
      blade-service/blade-manager/src/main/java/com/jfireel/expression/parse/impl/NumberParser.java
  15. 3 3
      blade-service/blade-manager/src/main/java/com/jfireel/expression/token/DefaultKeyWord.java
  16. 19 0
      blade-service/blade-manager/src/main/java/com/jfireel/expression/util/CharType.java
  17. 1 1
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java
  18. 21 1
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java
  19. 12 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  20. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/FormulaClientImpl.java
  21. 0 17
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/CompositeDataAccessGroup.java
  22. 0 6
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorCalc.java
  23. 0 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorFormat.java
  24. 10 11
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java
  25. 0 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorPre.java
  26. 0 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSort.java
  27. 89 82
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSpecial.java
  28. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaExecutor.java
  29. 3 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java
  30. 8 6
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  31. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java
  32. 12 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  33. 20 12
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java
  34. 10 2
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/FormulaClient.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.feign;
 
 import org.springblade.manager.entity.FormulaOption;
+import org.springblade.manager.vo.ReportResult;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -8,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.validation.constraints.NotNull;
 import java.io.FileNotFoundException;
+import java.util.List;
 
 import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
 
@@ -30,4 +32,8 @@ public interface FormulaClient {
     @GetMapping(API_PREFIX + "option")
     FormulaOption option(@RequestParam @NotNull Long pkeyId);
 
+    //计量公式执行体
+    @PostMapping(API_PREFIX + "execute3")
+    List<ReportResult> formulaExecute3(@RequestParam Long contractId, @RequestParam Long periodId,@RequestParam Integer type);
+
 }

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchiveExpertConclusionMapper.java

@@ -24,4 +24,6 @@ public interface ArchiveExpertConclusionMapper extends BaseMapper<ArchiveExpertC
     void updateAllArchiveByProject(@Param("projectId") Long projectId);
 
     void updateAllNodeByProject(@Param("projectId") Long projectId);
+
+    List<ArchiveExpertScore> getAllScore(@Param("projectId") Long projectId,@Param("id") Long id);
 }

+ 7 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchiveExpertConclusionMapper.xml

@@ -18,4 +18,11 @@
             #{id}
         </foreach>
     </select>
+
+    <select id="getAllScore" resultType="org.springblade.archive.entity.ArchiveExpertScore">
+        SELECT id,score_item ,unit_type,IFNULL(integrality,0) as integrality,IFNULL(integrality_deduction,0) as integrality_deduction,
+               IFNULL(normative,0) as normative ,IFNULL(normative_deduction,0) as normative_deduction
+        FROM u_archive_expert_score
+        WHERE project_id = #{projectId} and conclusion_id = #{id} and is_deleted = 0
+    </select>
 </mapper>

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

@@ -1134,6 +1134,11 @@
         <foreach collection="ids" item="id" open="(" separator="," close=")">
             #{id}
         </foreach>
+        order by FIELD(uaa.id,
+        <foreach collection="ids" item="id" separator="," >
+            #{id}
+        </foreach>
+        )
     </select>
     <select id="getRoutingInspection" resultType="org.springblade.archive.vo.ArchiveWarningVO">
         select uaf.file_name ,uaf.file_url,0 as sourceType,uaf.node_id,

+ 4 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java

@@ -68,10 +68,10 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
 //        URL_MAP.put("r_Archives_spare", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230414/3798f8c3db6f94c8fce63eec8c716d6c.xlsx");
 //        URL_MAP.put("r_Archives_back", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230413/31081917b41e12b9b0359f6a9c1755bd.xlsx");
 
-        URL_MAP.put("r_Archives_front", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/306c87ffc640699aa92d53a5f4e6d632.xlsx");
-        URL_MAP.put("r_Archives_catalog", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/f2a083fca685c646e4a47daaaa46f04b.xlsx");
-        URL_MAP.put("r_Archives_spare", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230414/3798f8c3db6f94c8fce63eec8c716d6c.xlsx");
-        URL_MAP.put("r_Archives_back", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/31081917b41e12b9b0359f6a9c1755bd.xlsx");
+        URL_MAP.put("r_Archives_front", "https://blade-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/306c87ffc640699aa92d53a5f4e6d632.xlsx");
+        URL_MAP.put("r_Archives_catalog", "https://blade-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/f2a083fca685c646e4a47daaaa46f04b.xlsx");
+        URL_MAP.put("r_Archives_spare", "https://blade-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230414/3798f8c3db6f94c8fce63eec8c716d6c.xlsx");
+        URL_MAP.put("r_Archives_back", "https://blade-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/31081917b41e12b9b0359f6a9c1755bd.xlsx");
 
         NAME_MAP.put("r_Archives_front", "封面");
         NAME_MAP.put("r_Archives_catalog", "卷内目录");

+ 5 - 3
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExpertConclusionServiceImpl.java

@@ -296,9 +296,11 @@ public class ArchiveExpertConclusionServiceImpl extends BaseServiceImpl<ArchiveE
 
     private String buildPdf(ArchiveExpertConclusion conclusion,List<User> users) throws Exception {
         //获取评分基础数据
-        List<ArchiveExpertScore> list1 = scoreService.list(new LambdaQueryWrapper<ArchiveExpertScore>()
-                .eq(ArchiveExpertScore::getProjectId, conclusion.getProjectId())
-                .eq(ArchiveExpertScore::getConclusionId, conclusion.getId()));
+//        List<ArchiveExpertScore> list1 = scoreService.list(new LambdaQueryWrapper<ArchiveExpertScore>()
+//                .eq(ArchiveExpertScore::getProjectId, conclusion.getProjectId())
+//                .eq(ArchiveExpertScore::getConclusionId, conclusion.getId()));
+        //手动获取评分数据,为null补零
+        List<ArchiveExpertScore> list1 = baseMapper.getAllScore(conclusion.getProjectId(),conclusion.getId());
         Map<Integer, List<ArchiveExpertScore>> map = list1.stream().collect(Collectors.groupingBy(ArchiveExpertScore::getUnitType));
         //获取专家组长
         User us = null;

+ 36 - 38
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExpertScoreServiceImpl.java

@@ -46,46 +46,44 @@ public class ArchiveExpertScoreServiceImpl extends BaseServiceImpl<ArchiveExpert
     public void saveBaseScoreInfo(Long projectId,Long conclusionId) {
         List<ArchiveExpertScore> list = new ArrayList<>();
         //业主
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"施工准备文件",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"工地试验室资质证书、延期文件、仪器标定证书",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"会议纪要、往来文件",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"桥隧工程风险评估报告",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"质评资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"进度进化控制文件",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"计量支付文件",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"工程变更令",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"总结",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"照片",10,0,10,0));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"立项审批",10,null,10,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"设计审批文件",7,null,7,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"招投标文件",7,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"工程准备文件",5,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"施工文件",4,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"交、竣工文件",8,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"资金管理文件",5,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,1,"照片",4,null,null,null));
         //监理
-        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"监理机构、制度",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"会议纪要、往来文件、监理费用、支付报表、监理日志、总结",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"工地试验室资质证书、延期文件、仪器标定证书",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"试验资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"质检资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"质评资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"安全资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"监理指令及回复、旁站记录、巡视记录",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"照片",10,0,10,0));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"监理机构、制度",3,null,10,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"会议纪要、往来文件、监理费用、支付报表、监理日志、总结",10,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"工地试验室资质证书、延期文件、仪器标定证书",3,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"试验资料",6,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"质检资料",6,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"质评资料",6,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"安全资料",3,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"监理指令及回复、旁站记录、巡视记录",9,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,2,"照片",4,null,null,null));
         //施工
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"设计变更及竣工图",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"施工准备文件",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"试验资料(含工地试验室资质证书、仪器标定证书等)",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"质检资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"路基工程质检资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"路面工程质检资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"隧道工程质检资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"绿化工程质检资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"交通与安全工程质检资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"机电工程质检资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"房建工程质检资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"质评资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"进度进化控制文件",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"安全生产、文明施工资料",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"施工日志、大事记",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"计量支付文件",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"会议纪要、往来文件",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"照片",10,0,10,0));
-        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"总结",10,0,10,0));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"设计变更及竣工图",9,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"施工准备文件",5,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"试验资料(含工地试验室资质证书、仪器标定证书等)",9,null,10,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"质检资料",10,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"路基工程质检资料",null,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"路面工程质检资料",null,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"隧道工程质检资料",null,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"绿化工程质检资料",null,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"交通与安全工程质检资料",null,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"机电工程质检资料",null,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"房建工程质检资料",null,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"质评资料",5,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"进度进化控制文件",3,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"安全生产、文明施工资料",2,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"施工日志、大事记",3,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"计量支付文件",5,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"会议纪要、往来文件",3,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"照片",3,null,null,null));
+        list.add(new ArchiveExpertScore(projectId,conclusionId,3,"总结",3,null,null,null));
         this.saveBatch(list);
     }
 

+ 19 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -3120,6 +3120,11 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	@Override
 	@Transactional
 	public void updateInspectStatus(Long archiveId,Long projectId,Long conclusionId) {
+		try {
+			Thread.sleep(100);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
 		//查看当前档案是否存在有意见的数据,存在则什么都不修改,不存在则修改已抽检,合格
 		long count2 = inspectionService.count(new LambdaQueryWrapper<ExpertInspection>()
 				.eq(ExpertInspection::getIsPass, 0)
@@ -3181,6 +3186,19 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		//专家基本信息
 		Long userId = AuthUtil.getUserId();
 		String userName = AuthUtil.getNickName();
+		//判断是否存在id,存在则代表是记录里面直接修改
+		if (inspection.getId() != null && inspection.getId() != -1){
+			//获取当前意见
+			ExpertInspection inspect = inspectionService.getById(inspection.getId());
+			if (inspect == null){
+				throw new ServiceException("未获取到当前意见");
+			}
+			//判断意见专家和当前用户是否为同一人
+			if (!userId.equals(inspect.getExpertId())){
+				userId = inspect.getExpertId();
+				userName = inspect.getExpertName();
+			}
+		}
 		//获取档案信息,如果状态未未查阅则修改
 		ArchivesAuto archive = this.getById(inspection.getArchiveId());
 		if (archive == null || archive.getNodeId() == null){
@@ -3251,6 +3269,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					.eq(ExpertInspection::getConclusionId, inspection.getConclusionId()));
 			//如果不存在数据,然后保存
 			if (one == null) {
+				inspection.setId(null);
 				inspectionService.save(inspection);
 			} else {
 				//如果存在数据,则判断是否存在意见,然后修改

+ 3 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -1409,13 +1409,15 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             //获取每条任务对应的节点信息
             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> typeMap = 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.getClassify() + ""));
+
             try {
                 for (Task task : taskList) {
                     R result = new R();
                     if (type == 1) {
                         //重新保存
                         long startTime_1 = System.currentTimeMillis();
-                        result = this.saveNodePdf(classify, queryMap.get(task.getFormDataId()), contractId, projectId, header);
+                        result = this.saveNodePdf(typeMap.get(task.getFormDataId()), queryMap.get(task.getFormDataId()), contractId, projectId, header);
                         long endTime_1 = System.currentTimeMillis();
                         long executionTime_1 = endTime_1 - startTime_1;
                         log.info("saveNodePdf执行时间:" + executionTime_1 + " 毫秒");

+ 3 - 4
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/controller/EVisaController.java

@@ -109,7 +109,7 @@ public class EVisaController {
                 String up_task = "update u_task_batch set is_deleted=5 where id="+taskApprovalVO.getId();
                 jdbcTemplate.execute(up_task);
 
-                String up_task_par = "update u_task_parallel set status=99,e_visa_content='pdf关键字与数据库中id不匹配' ,update_time=SYSDATE() where parallel_process_instance_id='"+taskApprovalVO.getParallelProcessInstanceId()+"'";
+                String up_task_par = "update u_task_parallel set e_visa_status=99,e_visa_content='pdf关键字与数据库中id不匹配' ,update_time=SYSDATE() where parallel_process_instance_id='"+taskApprovalVO.getParallelProcessInstanceId()+"'";
                 jdbcTemplate.execute(up_task_par);
 
             } else if ("success".equals(eVisaStatus) || eVisaStatus.contains("success")) { //成功操作
@@ -168,11 +168,10 @@ public class EVisaController {
         }else{ //废除
 
             // 修改 主 任务 u_task 表 状态改为3
-
             String up_task_par = "update u_task_parallel set status=3 where parallel_process_instance_id="+taskApprovalVO.getParallelProcessInstanceId();
-
             String up_task = "update u_task set status=3 where id="+taskApprovalVO.getTaskId();
-
+            jdbcTemplate.execute(up_task_par);
+            jdbcTemplate.execute(up_task);
         }
     }
 }

+ 6 - 18
blade-service/blade-manager/src/main/java/com/jfireel/expression/Expression.java

@@ -13,8 +13,8 @@ public class Expression {
     private CalculateNode parseNode;
     private Deque<CalculateNode> nodes = new LinkedList<CalculateNode>();
     private String el;
-    private int function;
-    private Invoker head;
+    private final int function;
+    private final Invoker head;
     private static final Invoker DEFAULT_HEAD;
 
     static {
@@ -32,26 +32,14 @@ public class Expression {
                 new ConstantStringParser(), //
                 new NumberParser(), //
                 new IdentifierParser(), //
-                new OperatorParser()//
-        };
-        Invoker pred = new Invoker() {
-
-            @Override
-            public int parse(String el, int offset, Deque<CalculateNode> nodes, int function) {
-                return offset;
-            }
+                new OperatorParser(),//
+                new ChineseParser()
         };
+        Invoker pred = (el, offset, nodes, function) -> offset;
         for (int i = parsers.length - 1; i > -1; i--) {
             final NodeParser parser = parsers[i];
             final Invoker next = pred;
-            Invoker invoker = new Invoker() {
-
-                @Override
-                public int parse(String el, int offset, Deque<CalculateNode> nodes, int function) {
-                    return parser.parse(el, offset, nodes, function, next);
-                }
-            };
-            pred = invoker;
+            pred = (el1, offset, nodes1, function1) -> parser.parse(el1, offset, nodes1, function1, next);
         }
         DEFAULT_HEAD = pred;
     }

+ 35 - 0
blade-service/blade-manager/src/main/java/com/jfireel/expression/parse/impl/ChineseParser.java

@@ -0,0 +1,35 @@
+package com.jfireel.expression.parse.impl;
+
+import com.jfireel.expression.node.CalculateNode;
+import com.jfireel.expression.node.impl.StringNode;
+import com.jfireel.expression.parse.Invoker;
+import com.jfireel.expression.util.CharType;
+
+import java.util.Deque;
+
+/**
+ * @author yangyj
+ * @Date 2024/1/26 16:41
+ * @description 专门用来处理包含中文的变量
+ */
+public class ChineseParser extends NodeParser{
+    @Override
+    public int parse(String el, int offset, Deque<CalculateNode> nodes, int function, Invoker next) {
+        if (!CharType.isChineseChar(getChar(offset, el))) {
+            return next.parse(el, offset, nodes, function);
+        }
+        return parseChinese(el, offset, nodes);
+    }
+
+    private int parseChinese(String el, int offset, Deque<CalculateNode> nodes) {
+        int length = 0;
+        while (!CharType.isEnglishBracketOrComma(getChar(length + offset, el)) ) {
+            length++;
+        }
+        String literals = el.substring(offset, offset + length);
+        offset += length;
+        nodes.push(new StringNode(literals));
+        return offset;
+    }
+
+}

+ 1 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/parse/impl/IdentifierParser.java

@@ -13,7 +13,7 @@ public class IdentifierParser extends NodeParser {
 
     @Override
     public int parse(String el, int offset, Deque<CalculateNode> nodes, int function, Invoker next) {
-        if (CharType.isAlphabet(getChar(offset, el)) == false) {
+        if (!CharType.isAlphabet(getChar(offset, el))) {
             return next.parse(el, offset, nodes, function);
         }
         return parseIdentifier(el, offset, nodes);

+ 3 - 7
blade-service/blade-manager/src/main/java/com/jfireel/expression/parse/impl/NumberParser.java

@@ -27,22 +27,18 @@ public class NumberParser extends NodeParser {
             if (nodes.peek() != null && nodes.peek().type() == Symbol.LEFT_PAREN) {
                 // 这种情况下,-代表是一个负数
                 return true;
-            } else if (nodes.peek() != null && nodes.peek().type() instanceof Operator == false) {
+            } else if (nodes.peek() != null && !(nodes.peek().type() instanceof Operator)) {
                 // 这种情况下,-是一个操作符
                 return false;
             } else {
                 throw new IllegalArgumentException("无法识别的-符号,不是负数也不是操作符,问题区间:" + el.substring(0, offset));
             }
-        } else if (CharType.isDigital(getChar(offset, el))) {
-            return true;
-        } else {
-            return false;
-        }
+        } else return CharType.isDigital(getChar(offset, el));
     }
 
     @Override
     public int parse(String el, int offset, Deque<CalculateNode> nodes, int function, Invoker next) {
-        if (match(el, offset, nodes, function) == false) {
+        if (!match(el, offset, nodes, function)) {
             return next.parse(el, offset, nodes, function);
         }
         int index = offset;

+ 3 - 3
blade-service/blade-manager/src/main/java/com/jfireel/expression/token/DefaultKeyWord.java

@@ -6,15 +6,15 @@ import java.util.Map;
 public enum DefaultKeyWord implements KeyWord {
     TRUE, FALSE, NULL;
 
-    private static Map<String, DefaultKeyWord> defaultKeeyWords = new HashMap<String, DefaultKeyWord>(128);
+    private static final Map<String, DefaultKeyWord> defaultKeyWords = new HashMap<>(128);
 
     static {
         for (DefaultKeyWord each : DefaultKeyWord.values()) {
-            defaultKeeyWords.put(each.name().toLowerCase(), each);
+            defaultKeyWords.put(each.name().toLowerCase(), each);
         }
     }
 
     public static DefaultKeyWord getDefaultKeyWord(String literals) {
-        return defaultKeeyWords.get(literals.toLowerCase());
+        return defaultKeyWords.get(literals.toLowerCase());
     }
 }

+ 19 - 0
blade-service/blade-manager/src/main/java/com/jfireel/expression/util/CharType.java

@@ -36,6 +36,25 @@ public class CharType {
         return ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z';
     }
 
+    /**
+     * 判断是否为中文
+     *
+     * @param ch 待判断的字符
+     * @return 是否为中文
+     */
+    public static boolean isChineseChar(final char ch) {
+        return ch >= 0x4E00 && ch <= 0x9FFF || ch >= 0x3400 && ch <= 0x4DBF;
+    }
+    /**
+     * 判断是右括号和顿号
+     *
+     * @param ch 待判断的字符
+     * @return 是否为右括号和顿号
+     */
+    public static boolean isEnglishBracketOrComma(final char ch) {
+        return ch == ')' || ch == ',';
+    }
+
     /**
      * 判断是否为数字.
      *

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

@@ -2783,7 +2783,7 @@ public class CustomFunction {
     }
 */
      /*字符模版*/
-      public static Object strTemplate(String template,List<Object>data){
+      public static Object strTemplate(List<Object>data,String template){
           if(BaseUtils.isNotEmpty(template)) {
               return data.stream().map(s -> template.replaceAll("\\{\\s*}", BaseUtils.handleNull(s))).collect(Collectors.toList());
           }

+ 21 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -361,6 +361,7 @@ public class FormulaUtils {
         return vos;
     }
 
+    /*根据数据模型实例生成带数据的元素,用于修改*/
     public static <T> LinkedHashMap<String,FormData> toFormDataMap(T bean){
         LinkedHashMap<String,FormData> result = new LinkedHashMap<>();
         if(bean!=null){
@@ -387,7 +388,26 @@ public class FormulaUtils {
         }
         return result;
     }
-
+    /*根据数据模型建立空元素,待写入数据*/
+    public static <T> LinkedHashMap<String,FormData> toFormDataMap(Class<T> clazz){
+        LinkedHashMap<String,FormData> result = new LinkedHashMap<>();
+            try {
+                String TBN = (String)  clazz.getField(TBN_FN).get(null);
+                for (Field field : clazz.getDeclaredFields()) {
+                    JSONField jf = field.getAnnotation(JSONField.class);
+                    if (jf != null) {
+                        FormData fd = new FormData();
+                        fd.setCode(TBN+ StringPool.COLON +jf.name());
+                        fd.setEName(jf.label());
+                        fd.getCoordsList().add(new Coords("0","0"));
+                        result.put(fd.getCode(),fd);
+                    }
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        return result;
+    }
     /*把结果数据回写到元素*/
     public static<T>void  put2FormData( LinkedHashMap<String,FormData> fdm,Map<String,Function<List<T>,List<Object>>> functionMap,List<T> dataList){
         fdm.values().stream()

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

@@ -3212,6 +3212,13 @@ public class ExcelTabController extends BladeController {
         }
         JSONObject tableInfo1 = dataArray.getJSONObject(0);
         String nodeid = tableInfo1.getString("nodeId");
+        String nodePrimaryKeyId = dataInfo.getString("nodePrimaryKeyId");
+
+        // 合同段id
+        String contractId = tableInfo1.getString("contractId");
+        String pkeyId = tableInfo1.getString("pkeyId");
+        String recordTime = tableInfo1.getString("recordTime");
+
         List<TableInfo> tableInfoList = this.excelTabService.getTableInfoList(dataArray);
         try {
             this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeid), ExecuteType.FAI);
@@ -3220,14 +3227,17 @@ public class ExcelTabController extends BladeController {
         }
 
         // 保存数据到数据库
+        String data= "";
         String isFirst = tableInfoList.get(0).getIsFirst();
         if (StringUtils.isNotEmpty(isFirst)) {
             //保存首件
-            return R.data(this.excelTabService.saveOrUpdateFirst(tableInfoList));
+            data=this.excelTabService.saveOrUpdateFirst(tableInfoList);
         } else {
             //保存日志
-            return R.data(this.excelTabService.saveOrUpdateTheLog(tableInfoList));
+            data = this.excelTabService.saveOrUpdateTheLog(tableInfoList);
         }
+        this.getTheLogPdInfo(pkeyId,nodePrimaryKeyId,recordTime,contractId);
+        return R.data(data);
     }
 
 

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/FormulaClientImpl.java

@@ -14,11 +14,13 @@ import org.springblade.manager.service.IExcelTabService;
 import org.springblade.manager.service.IFormulaOptionService;
 import org.springblade.manager.service.IFormulaService;
 import org.springblade.manager.service.IWbsTreeContractService;
+import org.springblade.manager.vo.ReportResult;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.constraints.NotNull;
 import java.io.FileNotFoundException;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -64,5 +66,10 @@ public class FormulaClientImpl implements FormulaClient {
        return this.formulaOptionService.getById(pkeyId);
     }
 
+    @Override
+    public List<ReportResult> formulaExecute3(Long contractId, Long periodId, Integer type) {
+       return service.execute3(contractId,periodId,type);
+    }
+
 
 }

+ 0 - 17
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/CompositeDataAccessGroup.java

@@ -1,17 +0,0 @@
-package org.springblade.manager.formula.impl;
-
-import org.springblade.manager.dto.ElementData;
-
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author yangyj
- * @Date 2022/9/9 17:37
- * @description TODO
- */
-public class CompositeDataAccessGroup {
-    List<CompositeDataAccess> list;
-    Map<String, ElementData> dataMap;
-}

+ 0 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorCalc.java

@@ -1,25 +1,19 @@
 package org.springblade.manager.formula.impl;
 
 import com.jfireel.expression.Expression;
-import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.RegexUtil;
-import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.dto.LocalVariable;
 import org.springblade.manager.entity.Formula;
-import org.springblade.manager.enums.ExecuteType;
-import org.springblade.manager.formula.FormulaExecutor;
 import org.springblade.manager.formula.FormulaLog;
 import org.springblade.manager.formula.NodeTable;
 
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @author yangyj

+ 0 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorFormat.java

@@ -1,22 +1,12 @@
 package org.springblade.manager.formula.impl;
 
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.springblade.common.utils.SnowFlakeUtil;
-import org.springblade.core.tool.utils.BeanUtil;
-import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
-import org.springblade.manager.entity.WbsTreeContract;
-import org.springblade.manager.formula.FormulaExecutor;
-import org.springblade.manager.formula.NodeTable;
-
-import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @author yangyj

+ 10 - 11
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java

@@ -3,17 +3,12 @@ package org.springblade.manager.formula.impl;
 import com.mixsmart.utils.FormulaUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.TreeNode;
-import org.springblade.manager.formula.FormulaExecutor;
 import org.springblade.manager.vo.*;
-import org.springframework.scheduling.annotation.Async;
 
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
-import java.util.logging.Handler;
-import java.util.stream.Collectors;
 
 /**
  * @author yangyj
@@ -29,6 +24,8 @@ public class ExecutorInit extends FormulaExecutor {
     private  Function<Long, BaseInfo> baseInfoFc;
     private  Function<Long, MeterPeriodInfo>  meterPeriodFc;
     private Function<Long, List<MeterTree>> meterTreeFc;
+    private Function<Long, MeterPeriodInfo> interimMeterPeriodFc;
+
 
 
     public void handle() {
@@ -39,14 +36,16 @@ public class ExecutorInit extends FormulaExecutor {
         tec.formDataMap.putAll(FormulaUtils.toFormDataMap(baseInfo));
         if(MeterType.MATERIAL.equals(tec.getMeterType())||MeterType.START.equals(tec.getMeterType())){
             /*加载计量期信息*/
-            MeterPeriodInfo meterPeriod=meterPeriodFc.apply(tec.getReportId());
-            tec.setPeriodId(meterPeriod.getId());
-            tec.formDataMap.putAll(FormulaUtils.toFormDataMap(meterPeriod));
-            tec.getConstantMap().put(MeterPeriodInfo.TBN,meterPeriod);
+            tec.periodInfo=meterPeriodFc.apply(tec.getReportId());
+            tec.setPeriodId(tec.periodInfo.getId());
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
-               /*计量单元树*/
-                tec.setMeterTreeMap(getMeterTreeMapAsync(tec.getContractId()));
+            /*计量期*/
+            tec.periodInfo=interimMeterPeriodFc.apply(tec.getReportId());
+            /*计量单元树*/
+            tec.setMeterTreeMap(getMeterTreeMapAsync(tec.getContractId()));
         }
+        tec.formDataMap.putAll(FormulaUtils.toFormDataMap(tec.periodInfo));
+
 
     }
 

+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorPre.java

@@ -6,7 +6,6 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.manager.dto.FormData;
-import org.springblade.manager.formula.FormulaExecutor;
 
 import java.util.regex.Matcher;
 

+ 0 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSort.java

@@ -1,17 +1,13 @@
 package org.springblade.manager.formula.impl;
 
 import com.mixsmart.utils.FormulaUtils;
-import com.mixsmart.utils.StringUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
-import org.springblade.manager.formula.FormulaExecutor;
-import org.springblade.manager.formula.NodeTable;
 
-import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;

+ 89 - 82
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSpecial.java

@@ -10,7 +10,6 @@ import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.dto.TreeNode;
-import org.springblade.manager.formula.FormulaExecutor;
 import org.springblade.manager.vo.*;
 import org.springframework.beans.BeanUtils;
 
@@ -33,23 +32,21 @@ import java.util.stream.IntStream;
 @Data
 public class ExecutorSpecial extends FormulaExecutor {
     private Function<Long, List<Material>> materialFormFc;
-    private Function<Long, MeterPeriodInfo> interimMeterPeriodFc;
     private Function<Long, List<Payment>> paymentListFc;
     private Function<Long, List<InventoryForm>> inventoryFormFc;
     private Function<Long, List<MeterApply>> meterApplyFc;
-    public ExecutorSpecial(TableElementConverter tec) {
-        super(tec);
-    }
-    /**章节*/
-    private List<InventoryForm> chapters = new ArrayList<>();
+    /*执行链*/
     private List<Special> specialList = new ArrayList<>();
+    /**支付章节*/
+    private List<InventoryForm> chapters = new ArrayList<>();
+    /**上期累计支付信息*/
     private List<Payment>  previous =new ArrayList<>();
+    /**本期支付信息*/
     private List<Payment>   current =new ArrayList<>();
-    /**计量期*/
-    private  MeterPeriodInfo periodInfo;
+
     private List<InterimPaymentCertificate> interimPaymentCertificates =new ArrayList<>();
     /*求百分比*/
-    BinaryOperator<String> ratioFc = (a,b)->{
+    private BinaryOperator<String> ratioFc = (a,b)->{
         /*合同金额*/
         BigDecimal aBd =new BigDecimal(a);
         /*变更金额*/
@@ -60,6 +57,7 @@ public class ExecutorSpecial extends FormulaExecutor {
         return  aBd.multiply(new BigDecimal(100)).divide(bBd, 2, RoundingMode.HALF_UP).toString();
     };
 
+   /**根据清单编号获取支付项目章节编号*/
     public String getPrefix(String fn){
         for(InventoryForm itf:chapters){
             String prefix=itf.getChapter();
@@ -74,15 +72,10 @@ public class ExecutorSpecial extends FormulaExecutor {
         return fn;
     }
 
-    public Function<String,String> preFixFc= this::getPrefix;
+    Function<String,String> preFixFc= this::getPrefix;
 
-    public <T> LinkedHashMap<String,FormData>   builderFormDatas(T bean){
-        LinkedHashMap<String,FormData> fdm = FormulaUtils.toFormDataMap(bean);
-        Map<String,Function<List<T>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(bean.getClass());
-        tec.getFormDataMap().putAll(fdm);
-        return fdm;
-    }
 
+    /*获取动态行最大行数,codeFind为相关元素码集合 */
     public Integer getLineSize(List<String> codeFind){
         int line=10;
         Optional<FormData> formDataOp=  tec.getFormDataList().stream().filter(e-> BaseUtils.inChain(codeFind,e.getCode())).findAny();
@@ -100,9 +93,16 @@ public class ExecutorSpecial extends FormulaExecutor {
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
             this.specialList.add(new InterimPayCert());
             this.specialList.add(new InterimSum());
+            this.specialList.add(new SubIPaySum());
+            this.specialList.add(new SubIMeterPay());
+            this.specialList.add(new IMeterPaySummary());
+            this.specialList.add(new IMeter());
         }
         this.specialList.stream().filter(Special::ready).forEach(Special::parse);
     }
+
+
+
     @Data
     public  class MaterialCalc implements Special{
         private FormData index;
@@ -244,8 +244,9 @@ public class ExecutorSpecial extends FormulaExecutor {
         }
     }
 
+    @EqualsAndHashCode(callSuper = true)
     @Data
-    public  class InterimPayCert implements Special{
+    public  class InterimPayCert extends   BaseSpecial<InterimPaymentCertificate> implements Special{
 
         @Override
         public boolean ready() {
@@ -276,16 +277,11 @@ public class ExecutorSpecial extends FormulaExecutor {
 
         @Override
         public void parse() {
-            LinkedHashMap<String,FormData> fdm = FormulaUtils.toFormDataMap(new InterimPaymentCertificate());
-            tec.getFormDataMap().putAll(fdm);
-            Map<String,Function<List<InterimPaymentCertificate>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(InterimPaymentCertificate.class);
-
-            List<InterimPaymentCertificate> dataList = new ArrayList<>();
+            builderFormDatas(InterimPaymentCertificate.class);
             /*数据获取start*/
               /*支付数据*/
              List<Payment> paymentList=paymentListFc.apply(tec.getContractId());
-             /*计量期*/
-              periodInfo=interimMeterPeriodFc.apply(tec.getPeriodId());
+
              /*合同计量清单*/
              List<InventoryForm> inventoryForms = inventoryFormFc.apply(tec.getContractId());
              InventoryForm root = null;
@@ -304,9 +300,9 @@ public class ExecutorSpecial extends FormulaExecutor {
 
              if(Func.isNotEmpty(paymentList)){
                  /*之前的计量期数据*/
-                 previous = paymentList.stream().filter(e->e.getSort()<periodInfo.getSort()).collect(Collectors.toList());
+                 previous = paymentList.stream().filter(e->e.getSort()<tec.periodInfo.getSort()).collect(Collectors.toList());
                  /*当前计量期数据*/
-                 current = paymentList.stream().filter(e-> e.getSort().equals(periodInfo.getSort())).collect(Collectors.toList());
+                 current = paymentList.stream().filter(e-> e.getSort().equals(tec.periodInfo.getSort())).collect(Collectors.toList());
                  /*往期每章节的实际花费*/
                  Map<String,BigDecimal> previousMoney= this.moneySum.apply(previous);
                  /*当前计量期每章节的实际花费*/
@@ -329,14 +325,14 @@ public class ExecutorSpecial extends FormulaExecutor {
             /*本期实际支付合计计算*/
             functionMap.put(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_9",(List<InterimPaymentCertificate> list)-> Collections.singletonList(list.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(Double::parseDouble).sum()));
             /*内容输出*/
-            FormulaUtils.put2FormData(fdm,functionMap,dataList);
-
+            putOut();
         }
 
 
     }
+    @EqualsAndHashCode(callSuper = true)
     @Data
-    public  class InterimSum implements Special{
+    public  class InterimSum extends   BaseSpecial<InterimPaymentSummary> implements Special{
         @Override
         public boolean ready() {
             return interimPaymentCertificates.size()>0;
@@ -348,10 +344,7 @@ public class ExecutorSpecial extends FormulaExecutor {
 
         @Override
         public void parse() {
-            LinkedHashMap<String,FormData> fdm = FormulaUtils.toFormDataMap(new InterimPaymentSummary());
-            Map<String,Function<List<InterimPaymentSummary>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(InterimPaymentSummary.class);
-            tec.getFormDataMap().putAll(fdm);
-            List<InterimPaymentSummary> dataList=new ArrayList<>();
+            builderFormDatas(InterimPaymentSummary.class);
             for(InterimPaymentCertificate ipc:interimPaymentCertificates){
                 InterimPaymentSummary ips = new InterimPaymentSummary();
                 BeanUtils.copyProperties(ipc,ips);
@@ -371,14 +364,14 @@ public class ExecutorSpecial extends FormulaExecutor {
                 summary.setPayRatioA(ratioFc.apply(summary.getCurrentPeriodEndPay(),summary.getRevisedAmount()));
                 dataList.add(summary);
                 /*内容输出*/
-                FormulaUtils.put2FormData(fdm,functionMap,dataList);
+                putOut();
             }
         }
     }
 
+    @EqualsAndHashCode(callSuper = true)
     @Data
-    public  class SubIPaySum implements Special{
-         private Integer capacity=10;
+    public  class SubIPaySum extends   BaseSpecial<SubprojectInterimPaymentSummary> implements Special{
 
         @Override
         public boolean ready() {
@@ -436,7 +429,6 @@ public class ExecutorSpecial extends FormulaExecutor {
             }
         }
 
-
         /*按清单编号求和*/
         public  Map<String,Summary> toSummary(List<Payment> payments) {
             return payments.stream()
@@ -449,17 +441,12 @@ public class ExecutorSpecial extends FormulaExecutor {
         }
 
 
-
         @Override
         public void parse() {
-            LinkedHashMap<String,FormData> fdm = FormulaUtils.toFormDataMap(new SubprojectInterimPaymentSummary());
-            /*获取实际输出行数*/
-            this.capacity=getLineSize(new ArrayList<>(fdm.keySet()));
-            Map<String,Function<List<SubprojectInterimPaymentSummary>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(SubprojectInterimPaymentSummary.class);
-            tec.getFormDataMap().putAll(fdm);
+            builderFormDatas(SubprojectInterimPaymentSummary.class);
             Map<String,Summary> currentSummary = toSummary(current);
             Map<String,Summary> preSummary = toSummary(previous);
-            List<SubprojectInterimPaymentSummary> dataList = new ArrayList<>();
+            List<SubprojectInterimPaymentSummary> totalList = new ArrayList<>();
             for(Map.Entry<String,Summary> form:currentSummary.entrySet()){
                 SubprojectInterimPaymentSummary sis = new SubprojectInterimPaymentSummary();
                 Summary pre =preSummary.get(form.getKey());
@@ -478,10 +465,9 @@ public class ExecutorSpecial extends FormulaExecutor {
                     sis.setCurrentPeriodEndPay(summary.getCurrentPeriodEndPay().toString());
                     sis.setPayRatio(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getRevisedAmount()));
                 }
-                dataList.add(sis);
+                totalList.add(sis);
             }
-            List<SubprojectInterimPaymentSummary> outPutList= new ArrayList<>();
-            LinkedHashMap<String,List<SubprojectInterimPaymentSummary>> chapterGroup= dataList.stream().collect(Collectors.groupingBy(e->getPrefix(e.getFormNumber()),LinkedHashMap::new,Collectors.toList()));
+            LinkedHashMap<String,List<SubprojectInterimPaymentSummary>> chapterGroup= totalList.stream().collect(Collectors.groupingBy(e->getPrefix(e.getFormNumber()),LinkedHashMap::new,Collectors.toList()));
             AtomicInteger loop = new AtomicInteger(chapterGroup.size());
             chapterGroup.forEach((k,v)->{
                 int extra=loop.getAndDecrement()>0?1:2;
@@ -490,8 +476,6 @@ public class ExecutorSpecial extends FormulaExecutor {
                 /*每页小结是固定内容,需要每页保留一行*/
                 int dataAreaSize=capacity-1;
                 int pageSize=(int)Math.ceil(dataLength/(double)dataAreaSize);
-                /*总长度*/
-                int total = pageSize*capacity;
                 List<List<SubprojectInterimPaymentSummary>> ds = BaseUtils.splitList(v,capacity-1);
                 List<SubprojectInterimPaymentSummary> tmp = new ArrayList<>();
                 for(int n=0;n<pageSize;n++){
@@ -508,37 +492,35 @@ public class ExecutorSpecial extends FormulaExecutor {
                     if(placeholderSize>0){
                         tmp.addAll(Collections.nCopies(placeholderSize,new SubprojectInterimPaymentSummary()));
                     }
-                    SubprojectInterimPaymentSummary last = new SubprojectInterimPaymentSummary("本页小计");
-                    last.calculate(currentPageData);
-                    tmp.add(last);
+                    subtotal(new SubprojectInterimPaymentSummary("本页小计"),tmp,currentPageData);
                     if(m>1) {
                         /*本章小结*/
-                        SubprojectInterimPaymentSummary lastA = new SubprojectInterimPaymentSummary();
-                        lastA.calculate(v);
-                        tmp.add(lastA);
+                        subtotal(new SubprojectInterimPaymentSummary("章合计"),tmp,v);
                     }
                     if(m>2){
                         /*所有章合计*/
-                        SubprojectInterimPaymentSummary lastB = new SubprojectInterimPaymentSummary();
-                        lastB.calculate(dataList);
-                        tmp.add(lastB);
+                        subtotal(new SubprojectInterimPaymentSummary("所有章合计"),tmp,totalList);
                     }
-                    outPutList.addAll(tmp);
+                    dataList.addAll(tmp);
                     tmp.clear();
                 }
             });
             /*内容输出*/
-            FormulaUtils.put2FormData(fdm,functionMap,outPutList);
+             putOut();
         }
 
+        public void subtotal(SubprojectInterimPaymentSummary b,  List<SubprojectInterimPaymentSummary> result ,List<SubprojectInterimPaymentSummary> data){
+            b.calculate(data);
+            result.add(b);
+        }
 
 
-    }
 
+    }
 
+    @EqualsAndHashCode(callSuper = true)
     @Data
-    public class SubIMeterPay implements Special{
-        private Integer capacity=10;
+    public class SubIMeterPay extends  BaseSpecial<SubInterimMeterPaySummary> implements Special{
 
         @Override
         public boolean ready() {
@@ -561,14 +543,10 @@ public class ExecutorSpecial extends FormulaExecutor {
 
         @Override
         public void parse() {
+            builderFormDatas(SubInterimMeterPaySummary.class);
             /*按照计量单元和单元内的清单顺序排序显示计量清单,并且把计量单元的层级一并显示*/
             /*根据每一期的s_middle_meter_apply,s_inventory_form_apply 获取对应的计量清单,然后根据清单Id配合s_inventory_form_meter查找计量单元信息*/
             /*s_change_token_inventory每个清单关联的变更令,s_change_token_meter每个计量单元关联的变更令*/
-            LinkedHashMap<String,FormData> fdm = FormulaUtils.toFormDataMap(new SubInterimMeterPaySummary());
-            /*获取实际输出行数*/
-            this.capacity=getLineSize(new ArrayList<>(fdm.keySet()));
-            Map<String,Function<List<SubInterimMeterPaySummary>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(SubInterimMeterPaySummary.class);
-            tec.getFormDataMap().putAll(fdm);
             try {
                 Map<Long, TreeNode<MeterTree>> treeNodeMap = tec.getMeterTreeMap().get();
                 Optional<TreeNode<MeterTree>> optionalTreeNode=  treeNodeMap.values().stream().filter(TreeNode::isTop).findAny();
@@ -591,7 +569,7 @@ public class ExecutorSpecial extends FormulaExecutor {
                     });
                     /*分组列表,每一组都是一个章节*/
                     List<List<SubInterimMeterPaySummary>> pageData =traversal(top);
-                    List<SubInterimMeterPaySummary> dataList=  pageData.stream().flatMap(list->{
+                    dataList=  pageData.stream().flatMap(list->{
                         List<SubInterimMeterPaySummary> tmp =new ArrayList<>(list);
                         int size = (int)Math.ceil(tmp.size()/(double)this.capacity);
                         /*每一章需要留一行做小计,其他要填充空白行*/
@@ -606,7 +584,7 @@ public class ExecutorSpecial extends FormulaExecutor {
                        return tmp.stream();
                     }).collect(Collectors.toList());
                     /*内容输出*/
-                    FormulaUtils.put2FormData(fdm,functionMap,dataList);
+                    putOut();
                 }
             }catch (Exception e){
                 e.printStackTrace();
@@ -671,9 +649,10 @@ public class ExecutorSpecial extends FormulaExecutor {
 
     }
 
+    @EqualsAndHashCode(callSuper = true)
     @Data
-    public class IMeterPaySummary implements Special{
-        private Integer capacity=20;
+    public class IMeterPaySummary extends BaseSpecial<InterimMeterPaySummary> implements Special{
+        /*private Integer capacity=20;*/
         @Override
         public boolean ready() {
             return current.size()>0;
@@ -681,12 +660,7 @@ public class ExecutorSpecial extends FormulaExecutor {
 
         @Override
         public void parse() {
-            LinkedHashMap<String,FormData> fdm = FormulaUtils.toFormDataMap(new InterimMeterPaySummary());
-            /*获取实际输出行数*/
-            this.capacity=getLineSize(new ArrayList<>(fdm.keySet()));
-            Map<String,Function<List<InterimMeterPaySummary>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(InterimMeterPaySummary.class);
-            tec.getFormDataMap().putAll(fdm);
-            List<InterimMeterPaySummary> dataList = new ArrayList<>();
+            builderFormDatas(InterimMeterPaySummary.class);
             for(Payment payment:current){
                 InterimMeterPaySummary imps = new InterimMeterPaySummary();
                 BeanUtils.copyProperties(payment,imps);
@@ -700,7 +674,7 @@ public class ExecutorSpecial extends FormulaExecutor {
                 summary.setMoney(StringUtils.number2StringZero(sum,2));
                 dataList.add(summary);
             }
-            FormulaUtils.put2FormData(fdm,functionMap,dataList);
+            putOut();
         }
     }
 
@@ -751,11 +725,44 @@ public class ExecutorSpecial extends FormulaExecutor {
         }
     }
 
-
-    public interface  Special{
+    @Data
+    class BaseSpecial<T>{
+        /*数据模型包含的元素*/
+        public LinkedHashMap<String,FormData> fdm;
+        /*元素内容输出对应的映射函数*/
+        public Map<String,Function<List<T>,List<Object>>> functionMap;
+        /*获取实际输出行数*/
+        public Integer capacity;
+        /*输出值*/
+        List<T> dataList;
+        /*用实例去构建带有初始化数据的元素*/
+        public void  builderFormDatas(T bean){
+            fdm = FormulaUtils.toFormDataMap(bean);
+            functionMap =FormulaUtils.fieldDataFcMap(bean.getClass());
+            capacity=getLineSize(new ArrayList<>(fdm.keySet()));
+            tec.getFormDataMap().putAll(fdm);
+            dataList=new ArrayList<>();
+        }
+        /*用元类class 创建空元素*/
+        public void  builderFormDatas(Class<T> clazz){
+            fdm = FormulaUtils.toFormDataMap(clazz);
+            functionMap =FormulaUtils.fieldDataFcMap(clazz);
+            capacity=getLineSize(new ArrayList<>(fdm.keySet()));
+            tec.getFormDataMap().putAll(fdm);
+            dataList=new ArrayList<>();
+        }
+        /*写入对应的元素*/
+        public void putOut(){
+            FormulaUtils.put2FormData(fdm,functionMap,dataList);
+        };
+    }
+    interface  Special{
         /**是否满足执行条件*/
         boolean ready();
         /**解析数据*/
         void parse();
     }
+    public ExecutorSpecial(TableElementConverter tec) {
+        super(tec);
+    }
 }

+ 4 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/FormulaExecutor.java → blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaExecutor.java

@@ -1,7 +1,7 @@
-package org.springblade.manager.formula;
+package org.springblade.manager.formula.impl;
 
 import lombok.Data;
-import org.springblade.manager.formula.impl.TableElementConverter;
+import org.springblade.manager.formula.FormulaHandleChain;
 import java.util.regex.Pattern;
 
 
@@ -11,8 +11,8 @@ import java.util.regex.Pattern;
  * @description 公式执行器
  */
 @Data
-public abstract  class   FormulaExecutor implements FormulaHandleChain{
-    public  TableElementConverter tec;
+public abstract  class   FormulaExecutor implements FormulaHandleChain {
+    TableElementConverter tec;
     public final static String WP="WP";
     public final static String CHAIN="trees";
     public final static String FC="FC.";

+ 3 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -20,11 +20,7 @@ import org.springblade.manager.formula.FormulaLog;
 import org.springblade.manager.formula.ITableElementConverter;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.NodeTable;
-import org.springblade.manager.vo.CurrentNode;
-import org.springblade.manager.vo.MeterTree;
-import org.springblade.manager.vo.MeterType;
-import org.springblade.manager.vo.ReportResult;
-import org.springframework.jdbc.core.JdbcTemplate;
+import org.springblade.manager.vo.*;
 
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -113,6 +109,8 @@ public class TableElementConverter implements ITableElementConverter {
     private  Long reportId;
     /**计量期Id*/
     private Long periodId;
+    /**计量期信息*/
+    public MeterPeriodInfo periodInfo;
     /**计量类型*/
     private MeterType meterType;
     /**计量单元树*/

+ 8 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -1447,7 +1447,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		String userId = AuthUtil.getUserId()+"";
 		String userName = AuthUtil.getNickName();
 		//取出所有选择的节点,只获取专家名称和专家id字段
-		List<Long> longs = Func.toLongList(ids);
+		List<Long> longs = Func.toLongList(ids).stream().distinct().collect(Collectors.toList());
 		List<ArchiveTreeContract> list = baseMapper.getSelectNodes(longs);
 		//循环判断是否已经存在专家,存在则追加
 		list.stream().forEach(l->{
@@ -1456,11 +1456,13 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 				l.setExpertId(userId);
 				l.setExpertName(userName);
 			}else {
-				//不为空
-				String expertId = l.getExpertId();
-				l.setExpertId(expertId+","+userId);
-				String expertName = l.getExpertName();
-				l.setExpertName(expertName+"/"+userName);
+				//不为空,并且不包含当前专家
+				if (!l.getExpertId().contains(userId)) {
+					String expertId = l.getExpertId();
+					l.setExpertId(expertId + "," + userId);
+					String expertName = l.getExpertName();
+					l.setExpertName(expertName + "/" + userName);
+				}
 			}
 		});
 		//保存所有节点

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java

@@ -78,8 +78,8 @@ public class FormulaDaoImpl implements IFormulaDao {
 
     @Override
     public Function<Long, MeterPeriodInfo> getInterimMeterPeriodFc() {
-        return  id->{
-            String sql="SELECT period_number name,sort from s_contract_meter_period where id ="+id;
+        return certificateId->{
+            String sql="select a.period_number number,a.sort from  s_contract_meter_period a join s_interim_pay_certificate b on a.id=b.contract_period_id where a.is_deleted=0 and b.id=="+certificateId;
             return this.jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(MeterPeriodInfo.class));
         };
     }

+ 12 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -2612,6 +2612,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         for(Map.Entry<String,Object> entry:map.entrySet()){
             result.put(entry.getKey(),StringUtils.handleNull(entry.getValue()));
         }
+        result.put("projectId",projectId);
         return result;
     }
 
@@ -2623,8 +2624,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
         /*元素创建*/
         Map<String,String> parent=  getWtpParent(meterType.getName(),contractInfo.getPId());
-        List<NodeTable> tableList=  this.getSqlList("select p_key_id pkeyId, node_name nodeName ,init_table_name initTableName,html_url htmlUrl ,excel_id excelId from  m_wbs_tree_private where ancestors like ? and LENGTH(html_url)>0 and is_deleted=0 and project_id=? and wbs_id=?",NodeTable.class,parent.get("path")+"%",contractInfo.getPId(),parent.get("wbsId"));
-        Map<String,Map<String,String>> coordinateMap=tableList.stream().collect(Collectors.toMap(NodeTable::getInitTableName,m->FormulaUtils.getElementCell(m.getHtmlUrl()),(v1,v2)->v2));
+        List<NodeTable> tableList=getTableListMeter(parent);
+        Map<String,Map<String,String>> coordinateMap=tableList.parallelStream().collect(Collectors.toMap(NodeTable::getInitTableName,m->FormulaUtils.getElementCell(m.getHtmlUrl()),(v1,v2)->v2));
         List<FormData> processFds = this.createFormDataByTableName(tableList.stream().map(NodeTable::getInitTableName).collect(Collectors.joining("','")));
         listForMeter(processFds,contractInfo.getPId(),parent.get("id"));
 
@@ -2641,18 +2642,20 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         List<FormulaHandleChain> formulaHandleChains = new ArrayList<>();
         /*初始化*/
         ExecutorInit init= new ExecutorInit(tec);
-        init.setBaseInfoFc(this.formulaDao.getBaseInfoFc());
+/*        init.setBaseInfoFc(this.formulaDao.getBaseInfoFc());
         init.setMeterPeriodFc(this.formulaDao.getMeterPeriodFc());
-        init .setMeterTreeFc(this.formulaDao.getMeterTreeFc());
+        init .setMeterTreeFc(this.formulaDao.getMeterTreeFc());*/
+        BeanUtils.copyProperties(this.formulaDao,init);
         formulaHandleChains.add(init);
         formulaHandleChains.add(new ExecutorSort(tec));
         formulaHandleChains.add(new ExecutorPre(tec));
         /*特殊公式*/
         ExecutorSpecial special = new ExecutorSpecial(tec);
-        special.setMaterialFormFc(this.formulaDao.getMaterialFormFc());
+/*        special.setMaterialFormFc(this.formulaDao.getMaterialFormFc());
         special.setInterimMeterPeriodFc(this.formulaDao.getInterimMeterPeriodFc());
         special.setPaymentListFc(this.formulaDao.getPaymentListFc());
-        special.setMeterApplyFc(this.formulaDao.getMeterApplyFc());
+        special.setMeterApplyFc(this.formulaDao.getMeterApplyFc());*/
+        BeanUtils.copyProperties(this.formulaDao,special);
         formulaHandleChains.add(special);
         /*通用计算*/
         formulaHandleChains.add(new ExecutorCalc(tec));
@@ -2663,7 +2666,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         return tec.getReportResults();
     }
 
-
+    public List<NodeTable> getTableListMeter(Map<String,String> parent){
+      return this.getSqlList("select p_key_id pkeyId, node_name nodeName ,init_table_name initTableName,html_url htmlUrl ,excel_id excelId from  m_wbs_tree_private where ancestors like ? and LENGTH(html_url)>0 and is_deleted=0 and project_id=? and wbs_id=?",NodeTable.class,parent.get("path")+"%",parent.get("projectId"),parent.get("wbsId"));
+    }
 
 
 

+ 20 - 12
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -34,6 +34,9 @@ import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.feign.ArchiveFileTaskClient;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ContractRelationJlyz;
+import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.feign.FormulaClient;
+import org.springblade.manager.vo.ReportResult;
 import org.springblade.meter.dto.*;
 import org.springblade.meter.entity.*;
 import org.springblade.meter.mapper.MiddleMeterApplyMapper;
@@ -89,6 +92,9 @@ public class TaskController extends BladeController {
     private final ChangeTokenInventoryServiceImpl changeTokenInventoryService;
     private final ChangeTokenInventoryServiceTaskImpl changeTokenInventoryServiceTask;
 
+    // 计量公式入口
+    private final FormulaClient formulaClient;
+
     @GetMapping("/name")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "获取任务名称", notes = "传入合同段contractId、期数id(变更令传勾选的id字符串英文逗号拼接)、type=1(中间计量申请)、=2(材料计量单)、3=(开工预付款计量单)、=4(变更令)")
@@ -2021,9 +2027,8 @@ public class TaskController extends BladeController {
 
             /*最终审批轮次*/
             if (isCurrentUserLastApprove) {
-
                 //TODO 重新生成报表,执行电签(电签失败直接return或抛出异常,不修改下方状态)
-
+                meterPdfInfo(task);
                 /*复制业务数据状态>主任务状态>替换数据*/
                 updateCopyDataApproveStatus(task, dto).updateTaskStatus(task).displace(task, dto);
             }
@@ -2036,27 +2041,30 @@ public class TaskController extends BladeController {
                 String param = taskParallel.getTaskUser() + "," + task.getProjectId() + "," + task.getContractId();
                 aopParamsSet.add(param);
             }
-
-            // 判断是否为审批 最后一人 如果是 即生成 pdf 并开始电签
-            /*当前审批轮次*/
-            String sql_3 = "SELECT * FROM u_task_parallel WHERE status=1 and process_instance_id = ? ORDER BY sort";
-            List<TaskParallel> lastTaskParallels = jdbcTemplate.query(sql_3, new Object[]{task.getProcessInstanceId()}, new BeanPropertyRowMapper<>(TaskParallel.class));
-            if(lastTaskParallels == null || lastTaskParallels.size() == 0 ){
-                meterPdfInfo(task);
-            }
             return R.data(200, aopParamsSet, "操作成功");
         }
-
         return R.fail("操作失败");
     }
 
 
     // pdf 生成
-
     private boolean meterPdfInfo(Task task) {
+        // 材料生成pdf
+        if(task.getType()==2){
+            // 获取填报数据
+
+            // 调用公式
+            List<ReportResult> reportResults = formulaClient.formulaExecute3(Long.parseLong(task.getContractId()), Long.parseLong(task.getFormDataId()),1);
+            //生成pdf
+            String fen ="SELECT * from m_wbs_tree_private WHERE project_id='"+task.getProjectId()+"' and wbs_type=3 and parent_id=(SELECT id from m_wbs_tree_private where project_id='"+task.getProjectId()+"' and is_deleted=0 and type=1 and wbs_type=3 and node_type=31)" +
+                    "AND type = 2 AND status = 1 and is_deleted= 0 ORDER BY sort";
+            WbsTreePrivate wbsTreePrivate = jdbcTemplate.query(fen, new BeanPropertyRowMapper<>(WbsTreePrivate.class)).stream().findAny().orElse(null);;
 
 
 
+        }
+
+
 
         return true;
     }

+ 10 - 2
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -508,9 +508,17 @@ public class UserController {
 
             HttpClient httpClient = HttpClientBuilder.create().build();
             HttpPost httpPost = new HttpPost("http://39.108.216.210:8090/blade-auth/oauth/token");
-            httpPost.setHeader("Authorization", "Basic YXJjaGl2ZXM6YXJjaGl2ZXNfc2VjcmV0");
+
+            if(userInfo.getSysId().equals("30")){
+                httpPost.setHeader("Authorization", "Basic YXJjaGl2ZXM6YXJjaGl2ZXNfc2VjcmV0");
+            }else if ("40".equals(userInfo.getSysId())) {
+                httpPost.setHeader("Authorization", "Basic bWVhc3VyZTptZWFzdXJlX3NlY3JldA==");
+            }else{
+                httpPost.setHeader("Authorization", "Basic YXJjaGl2ZXM6YXJjaGl2ZXNfc2VjcmV0");
+            }
+
             httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
-            httpPost.setHeader("Tenant-Id", "000000");
+            httpPost.setHeader("Tenant-Id", userInfo.getTenantId());
             List<NameValuePair> params = new ArrayList<NameValuePair>();
             params.add(new BasicNameValuePair("grant_type", "password"));
             params.add(new BasicNameValuePair("username", account));