浏览代码

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

yangyj 1 年之前
父节点
当前提交
cf2ab1c340
共有 21 个文件被更改,包括 298 次插入131 次删除
  1. 6 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TaskVO.java
  2. 13 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterMidPayItemContractDTO.java
  3. 13 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterMidPayItemProjectDTO.java
  4. 0 3
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemProject.java
  5. 0 3
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemSystem.java
  6. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractFromVO.java
  7. 1 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  8. 18 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java
  9. 49 31
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  10. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  11. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/TaskClientImpl.java
  12. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  13. 2 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java
  14. 39 14
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  15. 19 14
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  16. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  17. 3 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/TextdictInfoController.java
  18. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  19. 109 50
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MidPayItemController.java
  20. 13 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java
  21. 4 4
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml

+ 6 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/TaskVO.java

@@ -56,6 +56,12 @@ public class TaskVO extends Task {
     @ApiModelProperty("电签状态")
     private String eVisaContent;
 
+    @ApiModelProperty("上报人id")
+    private String reportUserId;
+
+    @ApiModelProperty("上报人名称")
+    private String reportUserName;
+
     /**
      * 试验自检记录id
      */

+ 13 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterMidPayItemContractDTO.java

@@ -0,0 +1,13 @@
+package org.springblade.meter.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.meter.entity.MeterMidPayItemContract;
+
+@Data
+public class MeterMidPayItemContractDTO extends MeterMidPayItemContract {
+
+    @ApiModelProperty(value = "选择的id")
+    private String recordId;
+
+}

+ 13 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterMidPayItemProjectDTO.java

@@ -0,0 +1,13 @@
+package org.springblade.meter.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.meter.entity.MeterMidPayItemProject;
+
+@Data
+public class MeterMidPayItemProjectDTO extends MeterMidPayItemProject {
+
+    @ApiModelProperty(value = "选择的id")
+    private String recordId;
+
+}

+ 0 - 3
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemProject.java

@@ -57,9 +57,6 @@ public class MeterMidPayItemProject extends BaseEntity {
     @ApiModelProperty(value = "排序")
     private Integer sort;
 
-    @ApiModelProperty(value = "是否被引用 0=否 1=是")
-    private Integer isReferenced;
-
     @ApiModelProperty(value = "备注")
     private String remarks;
 

+ 0 - 3
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemSystem.java

@@ -54,9 +54,6 @@ public class MeterMidPayItemSystem extends BaseEntity {
     @ApiModelProperty(value = "排序")
     private Integer sort;
 
-    @ApiModelProperty(value = "是否被引用 0=否 1=是")
-    private Integer isReferenced;
-
     @ApiModelProperty(value = "备注")
     private String remarks;
 

+ 1 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractFromVO.java

@@ -62,7 +62,7 @@ public class ContractFromVO {
     /**
      * 已分解量
      */
-    @ApiModelProperty(value = "已分解量 = 其他节点分解量+施工图数量")
+    @ApiModelProperty(value = "已分解量 = 其他节点分解量+变更后施工图数量")
     private BigDecimal poseNum;
 
     /**

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

@@ -2744,7 +2744,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		//先获取当前用户是否已经存在验收任务
 		Boolean aBoolean = this.getApplyStatus(dto.getProjectId());
 		if (aBoolean){
-			throw new ServiceException("当前专家已存在验收任务,请勿重复上报");
+			throw new ServiceException("当前用户已存在验收任务,请勿重复上报");
 		}
 		//设置任务表信息
 		Task task = new Task();

+ 18 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java

@@ -19,12 +19,15 @@ import org.springblade.business.feign.MessageWarningClient;
 import org.springblade.business.feign.OperationLogClient;
 import org.springblade.business.feign.RecycleBinClient;
 import org.springblade.business.feign.TaskClient;
+import org.springblade.business.service.ITaskService;
 import org.springblade.business.utils.FileUtils;
 import org.springblade.business.vo.MessageWarningVO;
 import org.springblade.business.vo.StartTaskVO;
 import org.springblade.business.vo.TaskVO;
 import org.springblade.common.constant.ClientIdConstant;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
@@ -70,6 +73,8 @@ public class ArchiveFileController extends BladeController {
 
     private final TaskClient taskClient;
 
+    private final ITaskService iTaskService;
+
     private final OperationLogClient operationLogClient;
 
     private final EVisaClient eVisaClient;
@@ -257,6 +262,9 @@ public class ArchiveFileController extends BladeController {
     @ApiOperation(value = "批量上报")
     @PushMessage(clientId = ClientIdConstant.BUSINESS_CLIENT_ID)
     public R<Object> batchApproval(@RequestBody StartTaskVO startTaskVO) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId()) || SecureUtil.getUserId() == -1L) {
+            throw new ServiceException("未获取到当前用户信息");
+        }
         String archiveTaskIds = startTaskVO.getIds();
         if (StringUtils.isNotEmpty(archiveTaskIds)) {
             //生成流程实体
@@ -282,7 +290,9 @@ public class ArchiveFileController extends BladeController {
             json.put("operationObjName", title);
             this.operationLogClient.saveUserOperationLog(25, "其它文件", "工程文件", json);
 
-            //启动流程
+            taskVO.setReportUserId(SecureUtil.getUserId().toString());
+            taskVO.setReportUserName(SecureUtil.getNickName());
+
             this.taskClient.startTask(taskVO);
             //修改状态为待审批
             String[] archiveTaskIdArray = archiveTaskIds.split(",");
@@ -309,6 +319,9 @@ public class ArchiveFileController extends BladeController {
     @ApiOperation(value = "批量上报")
     @PushMessage(clientId = ClientIdConstant.BUSINESS_CLIENT_ID)
     public R<Object> batchApproval2(@RequestBody StartTaskVO startTaskVO) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId()) || SecureUtil.getUserId() == -1L) {
+            throw new ServiceException("未获取到当前用户信息");
+        }
         String archiveTaskIds = startTaskVO.getIds();
         if (StringUtils.isNotEmpty(archiveTaskIds)) {
             Set<String> aopParamsSet = new HashSet<>();
@@ -326,7 +339,10 @@ public class ArchiveFileController extends BladeController {
                 taskVO.setApprovalType(2);
                 ArchiveFile archiveFile = this.archiveFileService.getBaseMapper().selectById(id);
                 taskVO.setTaskName(archiveFile.getFileName());
-                //启动流程
+
+                taskVO.setReportUserId(SecureUtil.getUserId().toString());
+                taskVO.setReportUserName(SecureUtil.getNickName());
+
                 this.taskClient.startTask(taskVO);
                 //修改状态为待审批
                 String[] archiveTaskIdArray = id.split(",");

+ 49 - 31
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1086,6 +1086,12 @@ public class InformationWriteQueryController extends BladeController {
                         //获取当前任务的环节审批人
                         List<TaskParallel> linkList = this.taskClient.queryApprovalUserByTaskId(task.getProcessInstanceId());
 
+                        /*修改任务副表u_task_parallel全部废除*/
+                        List<Long> collect = linkList.stream().map(TaskParallel::getId).collect(Collectors.toList());
+                        if (collect.size() > 0) {
+                            jdbcTemplate.execute("UPDATE u_task_parallel SET status = 3 WHERE id in(" + StringUtils.join(collect, ",") + ")");
+                        }
+
                         for (InformationQuery query : queries) {
                             if (StringUtils.isNotEmpty(query.getFileUserIdAndName())) {
                                 String[] userArray = query.getFileUserIdAndName().split(",");
@@ -1180,6 +1186,12 @@ public class InformationWriteQueryController extends BladeController {
                     }
                 }
 
+                /*修改主表u_task(全部废除)*/
+                List<Long> collect = taskList.stream().map(Task::getId).collect(Collectors.toList());
+                if (collect.size() > 0) {
+                    jdbcTemplate.execute("UPDATE u_task SET status = 3 WHERE id in(" + StringUtils.join(collect, ",") + ")");
+                }
+
                 //修改试验任务状态为未上报
                 String sql;
                 if (StringUtils.isNotEmpty(primaryKeyId)) {
@@ -1209,6 +1221,9 @@ public class InformationWriteQueryController extends BladeController {
     @ApiOperation(value = "批量上报")
     @PushMessage(clientId = ClientIdConstant.BUSINESS_CLIENT_ID)
     public R<Object> batchTask(@RequestBody StartTaskVO startTaskVO) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUserId()) || SecureUtil.getUserId() == -1L) {
+            throw new ServiceException("未获取到当前用户信息");
+        }
         if (StringUtils.isNotEmpty(startTaskVO.getIds())) {
             //获取数据源id
             String[] ids = startTaskVO.getIds().split(",");
@@ -1264,7 +1279,10 @@ public class InformationWriteQueryController extends BladeController {
                         taskVO.setFormDataId(id);
                         //设置上报类型
                         taskVO.setApprovalType(1);
-                        //上报
+
+                        taskVO.setReportUserId(SecureUtil.getUserId().toString());
+                        taskVO.setReportUserName(SecureUtil.getNickName());
+
                         if (this.taskClient.startTask(taskVO).getData()) {
                             LambdaUpdateWrapper<InformationQuery> wrappers = Wrappers.lambdaUpdate();
                             wrappers.set(InformationQuery::getReportNumber, taskVO.getBatch()).set(InformationQuery::getStatus, 1);
@@ -1380,7 +1398,7 @@ public class InformationWriteQueryController extends BladeController {
             tabOwner = "1,2,3,4,5,6"; //如果选择的是否复制数据=0(否),默认所属方123456
         }
         /*用来标识新旧工序结对*/
-        Map<Long,Long> peerMap = new HashMap<>();
+        Map<Long, Long> peerMap = new HashMap<>();
         //TODO 单份复制
         if (("1").equals(vo.getCopyType())) {
             //首先查询需要复制的节点及其下级所有子节点的信息
@@ -1428,8 +1446,8 @@ public class InformationWriteQueryController extends BladeController {
                     //重塑关键信息
                     //重塑primaryKeyId
                     newData.setPKeyId(SnowFlakeUtil.getId());
-                    if(nodeOld.getNodeType()!=null&&nodeOld.getNodeType()==6){
-                        peerMap.put(newData.getPKeyId(),nodeOld.getPKeyId());
+                    if (nodeOld.getNodeType() != null && nodeOld.getNodeType() == 6) {
+                        peerMap.put(newData.getPKeyId(), nodeOld.getPKeyId());
                     }
                     //设置旧ID
                     if (StringUtils.isNotEmpty(nodeOld.getOldId())) {
@@ -1596,7 +1614,7 @@ public class InformationWriteQueryController extends BladeController {
                 this.addCopyTabFile(new HashSet<>(newTabs), oldTabs);
             }
             /*复制formulaOption*/
-            this.copyFormulaOptions(saveList,peerMap);
+            this.copyFormulaOptions(saveList, peerMap);
             //更新redis缓存
             informationQueryService.delAsyncWbsTree(needCopyNode.getContractId());
 
@@ -1670,7 +1688,7 @@ public class InformationWriteQueryController extends BladeController {
                                         List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
 
                                         //构造新的节点、表、数据
-                                        this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 1, tabOwner, vo.getIsCopyData(),peerMap);
+                                        this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 1, tabOwner, vo.getIsCopyData(), peerMap);
 
                                         //附件
                                         addNewFileTabs.addAll(addTabList);
@@ -1699,7 +1717,7 @@ public class InformationWriteQueryController extends BladeController {
                                             List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
 
                                             //构造新的节点、表、数据
-                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, tabOwner, vo.getIsCopyData(),peerMap);
+                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, tabOwner, vo.getIsCopyData(), peerMap);
 
                                             //附件
                                             addNewFileTabs.addAll(addTabList);
@@ -1716,7 +1734,7 @@ public class InformationWriteQueryController extends BladeController {
                                             List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
 
                                             //构造新的节点、表、数据
-                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, tabOwner, vo.getIsCopyData(),peerMap);
+                                            this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, tabOwner, vo.getIsCopyData(), peerMap);
 
                                             //附件
                                             addNewFileTabs.addAll(addTabList);
@@ -1779,9 +1797,9 @@ public class InformationWriteQueryController extends BladeController {
                             throw new ServiceException("保存数据异常,请联系管理员");
                         }
                     }
-                    if(nodes.size()>0){
+                    if (nodes.size() > 0) {
                         /*复制formulaOpion*/
-                        this.copyFormulaOptions(nodes,peerMap);
+                        this.copyFormulaOptions(nodes, peerMap);
                     }
                     if (row) {
                         //更新redis缓存
@@ -1818,24 +1836,24 @@ public class InformationWriteQueryController extends BladeController {
     }
 
     @Async
-    public void copyFormulaOptions( List<WbsTreeContract>  saveList,Map<Long,Long> peerMap){
-        if(peerMap.size()>0){
+    public void copyFormulaOptions(List<WbsTreeContract> saveList, Map<Long, Long> peerMap) {
+        if (peerMap.size() > 0) {
             try {
-            String sqlTemplate="INSERT INTO m_formula_option (id,parent_id,contract_id,val) select #1,#2,contract_id,val from m_formula_option where id=#3";
-            Map<Long,Long> idMap = saveList.stream().filter(e->e.getNodeType()!=null&&e.getNodeType()==6).collect(Collectors.toMap(WbsTreeContract::getPKeyId,WbsTreeContract::getId));
-            List<String> sqlList= new ArrayList<>();
-            for(Map.Entry<Long,Long> p:peerMap.entrySet()){
-                try {
-                    String newPkeyId=p.getKey().toString();
-                    String oldPkeyId=p.getValue().toString();
-                    String newId=idMap.get(p.getKey()).toString();
-                    sqlList.add(sqlTemplate.replace("#1", newPkeyId).replace("#2", newId).replace("#3", oldPkeyId));
-                }catch (Exception e){
-                    e.printStackTrace();
+                String sqlTemplate = "INSERT INTO m_formula_option (id,parent_id,contract_id,val) select #1,#2,contract_id,val from m_formula_option where id=#3";
+                Map<Long, Long> idMap = saveList.stream().filter(e -> e.getNodeType() != null && e.getNodeType() == 6).collect(Collectors.toMap(WbsTreeContract::getPKeyId, WbsTreeContract::getId));
+                List<String> sqlList = new ArrayList<>();
+                for (Map.Entry<Long, Long> p : peerMap.entrySet()) {
+                    try {
+                        String newPkeyId = p.getKey().toString();
+                        String oldPkeyId = p.getValue().toString();
+                        String newId = idMap.get(p.getKey()).toString();
+                        sqlList.add(sqlTemplate.replace("#1", newPkeyId).replace("#2", newId).replace("#3", oldPkeyId));
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
                 }
-            }
-            BaseUtils.splitList(sqlList,50).parallelStream().map(l->String.join(";",l)).forEach(this.jdbcTemplate::execute);
-            }catch (Exception e){
+                BaseUtils.splitList(sqlList, 50).parallelStream().map(l -> String.join(";", l)).forEach(this.jdbcTemplate::execute);
+            } catch (Exception e) {
                 StaticLog.error("formulaOption复制失败");
             }
         }
@@ -2175,7 +2193,7 @@ public class InformationWriteQueryController extends BladeController {
     private void addCopyNodesAndTabsBuildData
     (List<WbsTreeContract> addNodeList, List<WbsTreeContract> addTabList, List<WbsTreeContract> needNodes, List<WbsTreeContract> needTabs, WbsTreeContract
             needCopyNode, WbsTreeContract toCopyNode, List<String> resultTablesData, Integer isSameNode, String
-             tabOwner, Integer isCopyData,Map<Long,Long> peerMap ) {
+             tabOwner, Integer isCopyData, Map<Long, Long> peerMap) {
         int var = 0;
         if (needNodes.size() == 1) {
             //判断是否为最下级节点
@@ -2207,8 +2225,8 @@ public class InformationWriteQueryController extends BladeController {
                     //获取当前复制的节点的sort
                     obj.setSort(ObjectUtils.isNotEmpty(needNode.getSort()) ? needNode.getSort() : 0);
                     addNodeList.add(obj);
-                    if(obj.getNodeType()!=null&&obj.getNodeType()==6){
-                        peerMap.put(obj.getPKeyId(),needNode.getPKeyId());
+                    if (obj.getNodeType() != null && obj.getNodeType() == 6) {
+                        peerMap.put(obj.getPKeyId(), needNode.getPKeyId());
                     }
                     break;
                 }
@@ -2314,8 +2332,8 @@ public class InformationWriteQueryController extends BladeController {
                     obj.setSort(ObjectUtils.isNotEmpty(node.getSort()) ? node.getSort() : 0);
 
                     addNodeList.add(obj);
-                    if(obj.getNodeType()!=null&&obj.getNodeType()==6){
-                        peerMap.put(obj.getPKeyId(),node.getPKeyId());
+                    if (obj.getNodeType() != null && obj.getNodeType() == 6) {
+                        peerMap.put(obj.getPKeyId(), node.getPKeyId());
                     }
                     //构造当前节点下所有元素表
                     List<WbsTreeContract> tabs = tabMap.get(oldId);

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

@@ -1553,12 +1553,12 @@ public class TaskController extends BladeController {
     @PostMapping("/reSigningEVisa")
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "任务管理-一键重签", notes = "传入taskIds、下拉框的contractId、projectId")
-    public R<Object> reSigningEVisa(@RequestParam String taskIds, @RequestParam String contractId, @RequestParam String projectId, HttpServletRequest request) {
+    public R<Object> reSigningEVisa(@RequestParam String classifyType,@RequestParam String taskIds, @RequestParam String contractId, @RequestParam String projectId, HttpServletRequest request) {
         if (ObjectUtil.isEmpty(taskIds)) {
             return R.fail("请选择一条记录");
         }
         String header = request.getHeader("Blade-Auth");
-        taskService.reSigningEVisa(taskIds, contractId, projectId, header);
+        taskService.reSigningEVisa(classifyType,taskIds, contractId, projectId, header);
         return R.success("任务已经成功提交重签,请耐心等待!");
     }
 

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

@@ -154,7 +154,7 @@ public class TaskClientImpl implements TaskClient {
 
     @Override
     public R<Boolean> reSigningEVisa(String taskIds, String contractId, String projectId, String header) {
-        this.taskService.reSigningEVisa(taskIds, contractId, projectId, header);
+//        this.taskService.reSigningEVisa(taskIds, contractId, projectId, header);
         return null;
     }
 

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml

@@ -753,8 +753,8 @@
         iq.wbs_id,
         t.id as task_id,
         iq.sj_record_ids
-        from u_information_query iq left join (select * from u_task k where k.status!=3 and k.contract_id =
-        #{query.contractId} group by
+        from u_information_query iq left join (select * from u_task k where k.status!=3 and k.project_id =
+        #{query.projectId} group by
         form_data_id) t on iq.id = t.form_data_id and t.is_deleted = 0
         where
         iq.is_deleted = 0

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

@@ -22,6 +22,7 @@ import org.springblade.business.vo.TaskApprovalVO;
 import org.springblade.business.vo.TaskVO;
 import org.springblade.core.mp.base.BaseService;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.FileNotFoundException;
@@ -97,5 +98,5 @@ public interface ITaskService extends BaseService<Task> {
     void delArchiveFileBusinessData(Long projectId, Long wbsId);
 
     @Async
-    void reSigningEVisa(String taskIds, String contractId, String projectId,String header);
+    void reSigningEVisa(String classify, String taskIds, String contractId, String projectId, String header);
 }

+ 39 - 14
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -361,21 +361,21 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                                                    Integer classify, Integer sourceType,
                                                    String isFirst, String sourceUrl,
                                                    String pdfUrl, String firstFileName, List<JSONObject> linkDataList) {
-        Long userId = 0L ;
-        String userNmae ="";
+        Long userId = 0L;
+        String userNmae = "";
 
-        if(primaryKeyId.indexOf(":")>=0){
-           String prdata[] = primaryKeyId.split(":");
+        if (primaryKeyId.indexOf(":") >= 0) {
+            String prdata[] = primaryKeyId.split(":");
             primaryKeyId = prdata[0];
             userId = Long.parseLong(prdata[1]);
             R<User> userR = userClient.userInfoById(userId);
             userNmae = userR.getData().getName();
-        }else{
+        } else {
             BladeUser user = AuthUtil.getUser();
-            if(user!=null) {
+            if (user != null) {
                 userId = user.getUserId();
                 userNmae = user.getNickName();
-            }else{
+            } else {
                 /*非客户端调用,request里不一定有用户信息,暂停后续操作*/
                 return null;
             }
@@ -534,16 +534,14 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
         //转换VO
         if (result != null && result.size() != 0) {
 
-            //属于待审批和已审批状态,查询待办信息
+            //属于待审批、已审批状态任务Task信息,以及当前任务对应的副任务TaskParallel信息
             Map<String, List<Task>> taskMaps = new HashMap<>();
             Map<String, List<TaskParallel>> taskParallelMaps = new HashMap<>();
             List<Long> informationIds = result.stream().filter(f -> f.getStatus().equals(1) || f.getStatus().equals(2)).map(InformationQuery::getId).collect(Collectors.toList());
             String informationIdsStr = informationIds.stream().map(String::valueOf).collect(Collectors.joining(","));
             if (StringUtils.isNotEmpty(informationIdsStr)) {
-                List<Task> query = jdbcTemplate.query("SELECT id,form_data_id,process_instance_id,approval_type,status,batch,project_id,contract_id FROM u_task WHERE form_data_id IN(" + informationIdsStr + ") AND status IN (1, 2) AND is_deleted = 0", new BeanPropertyRowMapper<>(Task.class));
-
+                List<Task> query = jdbcTemplate.query("SELECT id,form_data_id,process_instance_id,approval_type,status,batch,project_id,contract_id,create_time FROM u_task WHERE form_data_id IN(" + informationIdsStr + ") AND status IN (1, 2) AND is_deleted = 0", new BeanPropertyRowMapper<>(Task.class));
                 taskMaps = query.stream().collect(Collectors.groupingBy(Task::getFormDataId));
-
                 Set<String> processInstanceIds = query.stream().map(Task::getProcessInstanceId).map(id -> "'" + id + "'").collect(Collectors.toSet());
                 if (processInstanceIds.size() > 0) {
                     List<TaskParallel> taskParallels = jdbcTemplate.query("select task_user, task_user_name, e_visa_status, status, process_instance_id, initiative,e_visa_content from u_task_parallel where is_deleted = 0 and process_instance_id in(" + StringUtils.join(processInstanceIds, ",") + ")", new BeanPropertyRowMapper<>(TaskParallel.class));
@@ -594,9 +592,12 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                 if (Arrays.asList("1,2".split(",")).contains(vor.getStatus().toString())) {
                     //说明属于待审批和已审批状态,查询待办信息
                     List<Task> tasks = finalTaskMaps.getOrDefault(vor.getId().toString(), null);
+                    //获取创建时间最新的那条任务数据(存在多条任务指向同一个form_data_id,即一条资料多次上报,这里要获取最新的)
                     if (tasks != null && tasks.size() > 0) {
+                        Optional<Task> maxTask = tasks.stream().max(Comparator.comparing(Task::getCreateTime));
+                        Task maxTaskObject = maxTask.get();
                         //查询当前任务的所有待办人
-                        List<TaskParallel> linkTasks = finalTaskParallelMaps.getOrDefault(tasks.get(0).getProcessInstanceId(), null);
+                        List<TaskParallel> linkTasks = finalTaskParallelMaps.getOrDefault(maxTaskObject.getProcessInstanceId(), null);
                         if (linkTasks != null && linkTasks.size() > 0) {
                             //处理审批状态
                             this.integrationMethod(vor, linkTasks);
@@ -818,8 +819,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
      * 统合方法
      */
     private void integrationMethod(InformationQueryVO vo, List<TaskParallel> linkList) {
-
-        for (TaskParallel link : linkList) {
+        /*for (TaskParallel link : linkList) {
             vo.setWaitingUserList
                     (link.getTaskUserName(),
                             new Integer(999).equals(link.getEVisaStatus()) ? 999 :
@@ -837,6 +837,31 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                 }
             }
             vo.setEVisaFailedInfo(eVisaFailedInfo);
+        }*/
+
+        for (TaskParallel taskPa : linkList) {
+            if (taskPa.getStatus() == 2 && ObjectUtil.isNotEmpty(taskPa.getEVisaStatus()) && taskPa.getEVisaStatus() == 1) {
+                taskPa.setEVisaStatus(2);
+            } else if (taskPa.getStatus() == 3 && taskPa.getTaskUser().equals(SecureUtil.getUserId().toString())) {
+                taskPa.setEVisaStatus(3);
+            } else if (ObjectUtil.isNotEmpty(taskPa.getEVisaStatus()) && taskPa.getEVisaStatus() == 99) {
+                taskPa.setEVisaStatus(999);
+            } else {
+                taskPa.setEVisaStatus(1);
+            }
+
+            String eVisaFailedInfo = "";
+            if (taskPa.getStatus() == 2 && ObjectUtil.isNotEmpty(taskPa.getEVisaStatus()) && taskPa.getEVisaStatus() == 2) {
+                if (taskPa.getEVisaContent().contains("请等待") && ObjectUtil.isEmpty(eVisaFailedInfo)) {
+                    eVisaFailedInfo = taskPa.getEVisaContent();
+                }
+            } else if (ObjectUtil.isNotEmpty(taskPa.getEVisaStatus()) && taskPa.getEVisaStatus() == 999) {
+                if (ObjectUtil.isEmpty(eVisaFailedInfo)) {
+                    eVisaFailedInfo = taskPa.getEVisaContent();
+                }
+            }
+            vo.setWaitingUserList(taskPa.getTaskUserName(), taskPa.getEVisaStatus());
+            vo.setEVisaFailedInfo(eVisaFailedInfo);
         }
     }
 

+ 19 - 14
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -61,6 +61,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -584,7 +585,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         //执行代码
         logger.debug("扫描开始");
         List<TaskBatch> maps = taskBatchService.queryDataInfo();
-        if (maps != null && maps.size() >= 1 && executor.getQueue().size()<=200) {
+        if (maps != null && maps.size() >= 1 && executor.getQueue().size() <= 200) {
             for (TaskBatch dataInfo : maps) {
                 String jsonData = dataInfo.getJsonData();
                 TaskApprovalVO taskApprovalVO = JSON.parseObject(jsonData, TaskApprovalVO.class);
@@ -593,7 +594,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                 String nickName = dataInfo.getNickName();
 
                 Boolean aBoolean = RedisTemplate.hasKey("sign-" + taskApprovalVO.getFormDataId());
-                System.out.println("---------"+aBoolean);
+                System.out.println("---------" + aBoolean);
                 if (!aBoolean) {
                     RedisTemplate.opsForValue().set("sign-" + taskApprovalVO.getFormDataId(), "1");
                     CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> {
@@ -654,7 +655,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             //电签状态
             System.out.println("++buess-开始+++" + taskApprovalVO.getFormDataId());
             String eVisaStatus = eVisaClient.eVisa(JSONObject.parseObject(JSONObject.toJSONString(taskApprovalVO), EVisaTaskApprovalVO.class));
-            System.out.println("+++evsin-返回++"+ taskApprovalVO.getFormDataId()+"--"+ eVisaStatus);
+            System.out.println("+++evsin-返回++" + taskApprovalVO.getFormDataId() + "--" + eVisaStatus);
             //todo ============================ 执行电签区域 ============================
 
             //电签状态分为success/notPfxOrFile/error,当状态为error时就需要重新提交请求
@@ -929,6 +930,10 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 
     @Override
     public Boolean startApproval(TaskVO vo) {
+        if (ObjectUtil.isEmpty(vo.getReportUserId()) || ObjectUtil.isEmpty(vo.getReportUserName())) {
+            vo.setReportUserId(SecureUtil.getUserId().toString());
+            vo.setReportUserName(SecureUtil.getNickName());
+        }
         //获取业务表
         String businessTable = FlowUtil.getBusinessTable(ProcessConstant.EXAMINATION_AND_APPROVAL);
         if (Func.isEmpty(vo.getId())) {
@@ -959,14 +964,14 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                 return false;
             }
             //获取选择的固定流程
-            List<FixedFlowLink> links;
+            List<FixedFlowLink> links = new ArrayList<>();
             if (Long.valueOf("0").equals(vo.getFixedFlowId())) {
-                //自定义流程
-                links = new ArrayList<>();
                 //获取自定义流程
                 List<TaskVO.CustomUserTask> userTasks = vo.getUserTasks();
                 //设置人员及姓名
-                userTasks.forEach(userTask -> links.add(new FixedFlowLink(userTask.getUserName(), userTask.getUserId())));
+                for (TaskVO.CustomUserTask userTask : userTasks) {
+                    links.add(new FixedFlowLink(userTask.getUserName(), userTask.getUserId()));
+                }
 
             } else {
                 //预设流程
@@ -1004,9 +1009,9 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             }
             //设置流程信息
             vo.setProcessDefinitionId(taskFlowId);
-            vo.setReportUser(AuthUtil.getUserId().toString());
-            vo.setReportUserName(AuthUtil.getNickName());
-            vo.setCreateUser(AuthUtil.getUserId());
+            vo.setReportUser(vo.getReportUserId());
+            vo.setReportUserName(vo.getReportUserName());
+            vo.setCreateUser(Long.parseLong(vo.getReportUserId()));
             vo.setCreateTime(nowTime);
 
             //bean Copy
@@ -1391,7 +1396,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 classify, 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) {
@@ -1412,7 +1417,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                 for (Task task : taskList) {
                     //重新保存
                     long startTime_1 = System.currentTimeMillis();
-                    R result = this.saveNodePdf(queryMap.get(task.getFormDataId()), contractId, projectId, header);
+                    R result = this.saveNodePdf(classify, queryMap.get(task.getFormDataId()), contractId, projectId, header);
                     long endTime_1 = System.currentTimeMillis();
                     long executionTime_1 = endTime_1 - startTime_1;
                     log.info("saveNodePdf执行时间:" + executionTime_1 + " 毫秒");
@@ -1458,8 +1463,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 classify, String nodePKeyIds, String contractId, String projectId, String header) throws Exception {
+        return excelTabClient.synPDFInfo(contractId, nodePKeyIds, classify, projectId, header);
     }
 
 }

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

@@ -2340,7 +2340,8 @@ public class ExcelTabController extends BladeController {
                             taskIdsSeg.forEach(l -> {
                                 try {
                                     sqlIntA.addAll(l.stream().map(id -> "insert into m_cache (id) VALUES (" + id + ")").collect(Collectors.toList()));
-                                    this.taskClient.reSigningEVisa(String.join(",", l), contractId, projectId, AuthUtil.getHeader());
+                                    //要启用此方法,请多传入String classify,1施工2监理
+//                                    this.taskClient.reSigningEVisa(String.join(",", l), contractId, projectId, AuthUtil.getHeader());
                                     sum.addAndGet(l.size());
                                     double d = 100 * (double) sum.get() / (double) taskIds.size();
                                     String str = "已上报数据共计" + taskIdsSeg.size() + "条,已经执行" + sum.get() + "条(" + d + "%)";

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

@@ -617,9 +617,11 @@ public class TextdictInfoController extends BladeController {
         }
 
         if (textdictInfo.getType() == 4) { // 默认值
-            if (element.html().indexOf("el-input") >= 0) {
+            if (element.html().indexOf("el-input") >= 0 ) {
+                element.children().removeAttr("defText");
                 element.children().attr("defText", textdictInfo.getTextId());
             } else {
+                element.children().removeAttr("defText");
                 element.attr("defText", textdictInfo.getTextId());
             }
             File writeFile = new File(wbsTreePrivate.getHtmlUrl());

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

@@ -1944,6 +1944,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 }
             }
             String sql = "update u_information_query set pdf_url ='" + bladeFile.getLink() + "' , sort = " + sort +",e_visa_pdf_url = null" +" where classify='" + classify + "' and  wbs_id='" + nodeId + "' and contract_id ='" + contractId + "' ";
+            System.out.println(sql);
             jdbcTemplate.execute(sql);
         }
     }

+ 109 - 50
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MidPayItemController.java

@@ -18,6 +18,8 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.meter.dto.MeterMidPayItemContractDTO;
+import org.springblade.meter.dto.MeterMidPayItemProjectDTO;
 import org.springblade.meter.entity.*;
 import org.springblade.meter.service.MidPayItemContractService;
 import org.springblade.meter.service.MidPayItemProjectService;
@@ -31,6 +33,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @RestController
@@ -149,14 +152,36 @@ public class MidPayItemController extends BladeController {
 
     @PostMapping("/system/list")
     @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "系统中期支付项列表", notes = "type=0(未被引用),type=1(已引用),type=空(全部)")
-    public R<List<MeterMidPayItemSystem>> systemList(@RequestParam String type) {
-        LambdaQueryWrapper<MeterMidPayItemSystem> queryWrapper = Wrappers.lambdaQuery();
-        if (type != null) {
-            queryWrapper.eq(MeterMidPayItemSystem::getIsReferenced, type);
+    @ApiOperation(value = "系统中期支付项列表", notes = "传入项目id、选择的recordId(系统级id)")
+    public R<List<MeterMidPayItemSystem>> systemList(@RequestParam String projectId, String recordId) {
+        /*后管添加汇总项*/
+        if (ObjectUtil.isNotEmpty(recordId) && ObjectUtil.isNotEmpty(projectId)) {
+            List<MeterMidPayItemSystem> meterMidPayItemSystems = payItemSystemService.getBaseMapper().selectList(Wrappers.<MeterMidPayItemSystem>lambdaQuery()
+                    .ne(MeterMidPayItemSystem::getId, recordId)
+                    .orderByAsc(MeterMidPayItemSystem::getCreateTime)).stream().sorted(
+                    Comparator.nullsLast(
+                            Comparator.<MeterMidPayItemSystem, Integer>comparing(
+                                    systemVO -> {
+                                        Integer sortValue = systemVO.getSort();
+                                        return sortValue != null ? sortValue : Integer.MAX_VALUE;
+                                    }))
+                            .thenComparing(
+                                    Comparator.nullsLast(Comparator.comparing(MeterMidPayItemSystem::getCreateTime)))
+            ).collect(Collectors.toList());
+
+            return R.data(meterMidPayItemSystems);
         }
-        queryWrapper.orderByAsc(MeterMidPayItemSystem::getCreateTime);
-        return R.data(payItemSystemService.getBaseMapper().selectList(queryWrapper));
+
+        /*计量客户端项目引用系统*/
+        List<MeterMidPayItemProject> meterMidPayItemProjects = payItemProjectService.getBaseMapper().selectList(Wrappers.<MeterMidPayItemProject>lambdaQuery().eq(MeterMidPayItemProject::getProjectId, projectId));
+        List<Long> collect = meterMidPayItemProjects.stream().map(MeterMidPayItemProject::getDataSourceId).collect(Collectors.toList());
+        List<MeterMidPayItemSystem> meterMidPayItemSystems;
+        if (collect.size() > 0) {
+            meterMidPayItemSystems = payItemSystemService.getBaseMapper().selectList(Wrappers.<MeterMidPayItemSystem>lambdaQuery().notIn(MeterMidPayItemSystem::getId, collect).orderByAsc(MeterMidPayItemSystem::getCreateTime));
+        } else {
+            meterMidPayItemSystems = payItemSystemService.getBaseMapper().selectList(Wrappers.<MeterMidPayItemSystem>lambdaQuery().orderByAsc(MeterMidPayItemSystem::getCreateTime));
+        }
+        return R.data(meterMidPayItemSystems);
     }
 
     @GetMapping("/project/detail")
@@ -217,14 +242,8 @@ public class MidPayItemController extends BladeController {
                 }
             }
             if (meterMidPayItemProjects.size() > 0) {
-                /*批量修改状态为被引用*/
-                UpdateWrapper<MeterMidPayItemSystem> updateWrapper = new UpdateWrapper<>();
-                updateWrapper.in("id", systemIds);
-                MeterMidPayItemSystem updateEntity = new MeterMidPayItemSystem();
-                updateEntity.setIsReferenced(1);
-                boolean b1 = payItemSystemService.update(updateEntity, updateWrapper);
-                boolean b2 = payItemProjectService.saveBatch(meterMidPayItemProjects, 1000);
-                if (b1 && b2) {
+                boolean b1 = payItemProjectService.saveBatch(meterMidPayItemProjects, 1000);
+                if (b1) {
                     return R.success("操作成功");
                 }
             }
@@ -243,10 +262,7 @@ public class MidPayItemController extends BladeController {
     @ApiOperationSupport(order = 9)
     @ApiOperation(value = "项目中期支付项删除", notes = "传入id")
     public R<Object> projectRemove(@RequestParam String id) {
-        MeterMidPayItemProject obj = payItemProjectService.getById(id);
-        if (obj != null && ObjectUtil.isNotEmpty(obj.getDataSourceId())) {
-            /*修改回未被引用状态*/
-            payItemSystemService.update(Wrappers.<MeterMidPayItemSystem>lambdaUpdate().set(MeterMidPayItemSystem::getIsReferenced, 0).eq(MeterMidPayItemSystem::getId, obj.getDataSourceId()));
+        if (ObjectUtil.isNotEmpty(id)) {
             payItemProjectService.removeById(id);
             jdbcTemplate.execute("DELETE FROM s_meter_mid_pay_item_relation WHERE mid_pay_id = " + id);
             return R.success("操作成功");
@@ -256,23 +272,45 @@ public class MidPayItemController extends BladeController {
 
     @PostMapping("/project/page")
     @ApiOperationSupport(order = 10)
-    @ApiOperation(value = "项目中期支付项分页", notes = "传入MeterMidPayItemProject、Query")
-    public R<IPage<MeterMidPayItemProjectVO>> projectPage(@RequestBody MeterMidPayItemProject meterMidPayItemProject, @RequestBody Query query) {
-        IPage<MeterMidPayItemProject> pages = payItemProjectService.page(Condition.getPage(query), Condition.getQueryWrapper(meterMidPayItemProject));
+    @ApiOperation(value = "项目中期支付项分页", notes = "传入MeterMidPayItemProjectDTO、Query")
+    public R<IPage<MeterMidPayItemProjectVO>> projectPage(@RequestBody MeterMidPayItemProjectDTO dto, @RequestBody Query query) {
+        IPage<MeterMidPayItemProject> pages = payItemProjectService.page(Condition.getPage(query), Condition.getQueryWrapper(dto));
 
         Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
         Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
 
+        /*如果是添加汇总的请求,那么剔除已被引用过的*/
+        Map<Long, MeterMidPayItemRelation> collect = new HashMap<>();
+        if (query.getSize().equals(10000) && ObjectUtil.isNotEmpty(dto.getRecordId())) {
+            List<MeterMidPayItemRelation> relationList = jdbcTemplate.query("SELECT * FROM s_meter_mid_pay_item_relation WHERE mid_pay_id = " + dto.getRecordId(), new BeanPropertyRowMapper<>(MeterMidPayItemRelation.class));
+            collect = relationList.stream().collect(Collectors.toMap(MeterMidPayItemRelation::getMidPayIdRelation, Function.identity()));
+        }
+        Map<Long, MeterMidPayItemRelation> finalCollect = collect;
+
         List<MeterMidPayItemProjectVO> sortResult = pages.getRecords().stream()
                 .map(project -> {
                     MeterMidPayItemProjectVO vo = new MeterMidPayItemProjectVO();
                     BeanUtil.copyProperties(project, vo);
+
+                    /*剔除本身*/
+                    if (query.getSize().equals(10000) && ObjectUtil.isNotEmpty(dto.getRecordId()) && dto.getRecordId().equals(vo.getId().toString())) {
+                        return null;
+                    }
+                    /*剔除已引用过的*/
+                    if (finalCollect.size() > 0) {
+                        MeterMidPayItemRelation orDefault = finalCollect.getOrDefault(vo.getId(), null);
+                        if (orDefault != null) {
+                            return null;
+                        }
+                    }
+
                     if (ObjectUtil.isNotEmpty(project.getPayApplicableType())) {
                         vo.setPayApplicableTypeName(meterPayAppTypeMap.getOrDefault(project.getPayApplicableType().toString(), null));
                     }
                     if (ObjectUtil.isNotEmpty(project.getPayType())) {
                         vo.setPayTypeName(meterPayTypeMap.getOrDefault(project.getPayType().toString(), null));
                     }
+
                     return vo;
                 })
                 .sorted(
@@ -288,8 +326,10 @@ public class MidPayItemController extends BladeController {
                                         Comparator.nullsLast(Comparator.comparing(MeterMidPayItemProjectVO::getCreateTime))
                                 )
                 )
+                .filter(Objects::nonNull)
                 .collect(Collectors.toList());
 
+
         IPage<MeterMidPayItemProjectVO> resultPage = new Page<>();
         resultPage.setTotal(pages.getTotal());
         resultPage.setCurrent(pages.getCurrent());
@@ -300,19 +340,25 @@ public class MidPayItemController extends BladeController {
 
     @PostMapping("/project/list")
     @ApiOperationSupport(order = 11)
-    @ApiOperation(value = "项目中期支付项列表", notes = "传入type=0(未被引用),type=1(已引用),type=空(全部)、projectId")
-    public R<List<MeterMidPayItemProjectVO>> projectList(@RequestParam String type, @RequestParam String projectId) {
+    @ApiOperation(value = "项目中期支付项列表", notes = "传入合同段contractId、项目projectId")
+    public R<List<MeterMidPayItemProjectVO>> projectList(@RequestParam String contractId, @RequestParam String projectId) {
         Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
         Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
 
-        LambdaQueryWrapper<MeterMidPayItemProject> queryWrapper = Wrappers.lambdaQuery();
-        if (type != null) {
-            queryWrapper.eq(MeterMidPayItemProject::getIsReferenced, type);
+        List<MeterMidPayItemContract> meterMidPayItemContracts = payItemContractService.getBaseMapper().selectList(Wrappers.<MeterMidPayItemContract>lambdaQuery().eq(MeterMidPayItemContract::getContractId, contractId));
+        List<Long> collect = meterMidPayItemContracts.stream().map(MeterMidPayItemContract::getDataSourceId).collect(Collectors.toList());
+
+        List<MeterMidPayItemProject> meterMidPayItemProjects;
+        if (collect.size() > 0) {
+            meterMidPayItemProjects = payItemProjectService.getBaseMapper().selectList(Wrappers.<MeterMidPayItemProject>lambdaQuery()
+                    .eq(MeterMidPayItemProject::getProjectId, projectId)
+                    .notIn(MeterMidPayItemProject::getId, collect)
+                    .orderByAsc(MeterMidPayItemProject::getCreateTime));
+        } else {
+            meterMidPayItemProjects = payItemProjectService.getBaseMapper().selectList(Wrappers.<MeterMidPayItemProject>lambdaQuery()
+                    .eq(MeterMidPayItemProject::getProjectId, projectId)
+                    .orderByAsc(MeterMidPayItemProject::getCreateTime));
         }
-        queryWrapper.eq(MeterMidPayItemProject::getProjectId, projectId);
-        queryWrapper.orderByAsc(MeterMidPayItemProject::getCreateTime);
-
-        List<MeterMidPayItemProject> meterMidPayItemProjects = payItemProjectService.getBaseMapper().selectList(queryWrapper);
 
         List<MeterMidPayItemProjectVO> VOS = BeanUtil.copyProperties(meterMidPayItemProjects, MeterMidPayItemProjectVO.class);
         for (MeterMidPayItemProjectVO vo : VOS) {
@@ -386,14 +432,8 @@ public class MidPayItemController extends BladeController {
                 }
             }
             if (meterMidPayItemContracts.size() > 0) {
-                /*批量修改状态为被引用*/
-                UpdateWrapper<MeterMidPayItemProject> updateWrapper = new UpdateWrapper<>();
-                updateWrapper.in("id", projectIds);
-                MeterMidPayItemProject updateEntity = new MeterMidPayItemProject();
-                updateEntity.setIsReferenced(1);
-                boolean b1 = payItemProjectService.update(updateEntity, updateWrapper);
-                boolean b2 = payItemContractService.saveBatch(meterMidPayItemContracts, 1000);
-                if (b1 && b2) {
+                boolean b1 = payItemContractService.saveBatch(meterMidPayItemContracts, 1000);
+                if (b1) {
                     return R.success("操作成功");
                 }
             }
@@ -412,14 +452,10 @@ public class MidPayItemController extends BladeController {
     @ApiOperationSupport(order = 15)
     @ApiOperation(value = "合同段中期支付项删除", notes = "传入id")
     public R<Object> contractRemove(@RequestParam String id) {
-        MeterMidPayItemContract obj = payItemContractService.getById(id);
-        if (obj != null && ObjectUtil.isNotEmpty(obj.getDataSourceId())) {
-            /*修改回未被引用状态*/
-            if (payItemProjectService.update(Wrappers.<MeterMidPayItemProject>lambdaUpdate().set(MeterMidPayItemProject::getIsReferenced, 0).eq(MeterMidPayItemProject::getId, obj.getDataSourceId()))) {
-                if (payItemContractService.removeById(id)) {
-                    jdbcTemplate.execute("DELETE FROM s_meter_mid_pay_item_relation WHERE mid_pay_id = " + id);
-                    return R.success("操作成功");
-                }
+        if (ObjectUtil.isNotEmpty(id)) {
+            if (payItemContractService.removeById(id)) {
+                jdbcTemplate.execute("DELETE FROM s_meter_mid_pay_item_relation WHERE mid_pay_id = " + id);
+                return R.success("操作成功");
             }
         }
         return R.fail("操作失败");
@@ -427,23 +463,45 @@ public class MidPayItemController extends BladeController {
 
     @PostMapping("/contract/page")
     @ApiOperationSupport(order = 16)
-    @ApiOperation(value = "合同段中期支付项分页", notes = "传入MeterMidPayItemContract、Query")
-    public R<IPage<MeterMidPayItemContractVO>> contractPage(@RequestBody MeterMidPayItemContract meterMidPayItemContract, @RequestBody Query query) {
-        IPage<MeterMidPayItemContract> pages = payItemContractService.page(Condition.getPage(query), Condition.getQueryWrapper(meterMidPayItemContract));
+    @ApiOperation(value = "合同段中期支付项分页", notes = "传入MeterMidPayItemContractDTO、Query")
+    public R<IPage<MeterMidPayItemContractVO>> contractPage(@RequestBody MeterMidPayItemContractDTO dto, @RequestBody Query query) {
+        IPage<MeterMidPayItemContract> pages = payItemContractService.page(Condition.getPage(query), Condition.getQueryWrapper(dto));
 
         Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
         Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
 
+        /*如果是添加汇总的请求,那么剔除已被引用过的*/
+        Map<Long, MeterMidPayItemRelation> collect = new HashMap<>();
+        if (query.getSize().equals(100000) && ObjectUtil.isNotEmpty(dto.getRecordId())) {
+            List<MeterMidPayItemRelation> relationList = jdbcTemplate.query("SELECT * FROM s_meter_mid_pay_item_relation WHERE mid_pay_id = " + dto.getRecordId(), new BeanPropertyRowMapper<>(MeterMidPayItemRelation.class));
+            collect = relationList.stream().collect(Collectors.toMap(MeterMidPayItemRelation::getMidPayIdRelation, Function.identity()));
+        }
+        Map<Long, MeterMidPayItemRelation> finalCollect = collect;
+
         List<MeterMidPayItemContractVO> sortResult = pages.getRecords().stream()
                 .map(contract -> {
                     MeterMidPayItemContractVO vo = new MeterMidPayItemContractVO();
                     BeanUtil.copyProperties(contract, vo);
+
+                    /*剔除本身*/
+                    if (query.getSize().equals(100000) && ObjectUtil.isNotEmpty(dto.getRecordId()) && dto.getRecordId().equals(vo.getId().toString())) {
+                        return null;
+                    }
+                    /*剔除已引用过的*/
+                    if (finalCollect.size() > 0) {
+                        MeterMidPayItemRelation orDefault = finalCollect.getOrDefault(vo.getId(), null);
+                        if (orDefault != null) {
+                            return null;
+                        }
+                    }
+
                     if (ObjectUtil.isNotEmpty(contract.getPayApplicableType())) {
                         vo.setPayApplicableTypeName(meterPayAppTypeMap.getOrDefault(contract.getPayApplicableType().toString(), null));
                     }
                     if (ObjectUtil.isNotEmpty(contract.getPayType())) {
                         vo.setPayTypeName(meterPayTypeMap.getOrDefault(contract.getPayType().toString(), null));
                     }
+
                     return vo;
                 })
                 .sorted(
@@ -459,6 +517,7 @@ public class MidPayItemController extends BladeController {
                                         Comparator.nullsLast(Comparator.comparing(MeterMidPayItemContractVO::getCreateTime))
                                 )
                 )
+                .filter(Objects::nonNull)
                 .collect(Collectors.toList());
 
         IPage<MeterMidPayItemContractVO> resultPage = new Page<>();

+ 13 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -1288,6 +1288,19 @@ public class TaskController extends BladeController {
         if (task != null) {
             check(task);
 
+            MaterialMeterFormTask old = materialMeterFormServiceTask.getById(obj.getId());
+            if (ObjectUtil.isEmpty(obj.getPrice())) {
+                obj.setPrice(old.getPrice());
+            }
+            if (ObjectUtil.isEmpty(obj.getMeterAmount())){
+                obj.setMeterAmount(old.getMeterAmount());
+            }
+
+            BigDecimal price = obj.getPrice();
+            BigDecimal meterAmount = obj.getMeterAmount();
+            BigDecimal meterMoney = price.multiply(meterAmount);
+            obj.setMeterMoney(meterMoney);
+
             if (materialMeterFormServiceTask.updateById(obj)) {
                 return R.success("操作成功");
             }

+ 4 - 4
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml

@@ -133,8 +133,8 @@
     </select>
     <select id="getNotResolveForm" resultType="org.springblade.meter.vo.ContractFromVO">
         select cif.id, cif.form_number,cif.form_name,cif.current_price,cif.contract_total,cif.change_total,cif.is_supplement,
-               IFNULL((SELECT SUM(build_picture_total) from s_inventory_form_meter
-                       WHERE contract_id = #{contractId} and contract_form_id = cif.id),0)  as poseNum
+               IFNULL((SELECT SUM(change_build_picture_total) from s_inventory_form_meter
+                       WHERE contract_id = #{contractId} and contract_form_id = cif.id and is_deleted = 0),0)  as poseNum
         from s_contract_inventory_form cif
         WHERE cif.contract_id = #{contractId} and cif.is_deleted = 0 and cif.is_form_node = 1
             <if test="formNum != null and formNum != ''">
@@ -152,9 +152,9 @@
                           where contract_id = #{contractId} and is_deleted = 0 and contract_form_id = ifm.contract_form_id and contract_meter_id = ifm.contract_meter_id)=0,0,1)
                    ,1),1) as citeStatus,
 
-            IFNULL((SELECT SUM(build_picture_total) from s_inventory_form_meter WHERE contract_id = #{contractId} and contract_form_id = cif.id
+            IFNULL((SELECT SUM(change_build_picture_total) from s_inventory_form_meter WHERE contract_id = #{contractId} and contract_form_id = cif.id
                      and is_deleted = 0 and contract_meter_id and contract_meter_id != #{meterId}),0)  as otherPoseNum,
-            IFNULL((SELECT SUM(build_picture_total) from s_inventory_form_meter
+            IFNULL((SELECT SUM(change_build_picture_total) from s_inventory_form_meter
                 WHERE contract_id = #{contractId} and is_deleted = 0 and contract_form_id = cif.id),0)  as poseNum
         from s_inventory_form_meter ifm left join s_contract_inventory_form cif on ifm.contract_form_id = cif.id
         WHERE ifm.contract_id = #{contractId} and ifm.is_deleted = 0