huangjn 2 سال پیش
والد
کامیت
9bb8252ee6

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

@@ -77,6 +77,21 @@ public class ContractLogController extends BladeController {
 
 	private final ProjectClient projectClient;
 
+	/**
+	 * 删除日志
+	 */
+	@PostMapping("/removeByIds")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "删除日志")
+	@ApiImplicitParam(name = "ids", value = "删除的数据ID", required = true)
+	public R<Boolean> removeByIds(@RequestBody JSONObject json){
+		if(json.containsKey("ids")){
+			List<Long> ids = JSONArray.parseArray(JSONObject.toJSONString(json.get("ids")), Long.class);
+			return R.status(this.contractLogService.deleteLogic(ids));
+		}
+		return R.data(300, false, "未找到具体数据");
+	}
+
 	/**
 	 * 单个废除(填报页)
 	 */
@@ -90,7 +105,10 @@ public class ContractLogController extends BladeController {
 	})
 	public R<Boolean> oneAbolish(@RequestParam String nodePrimaryKeyId, @RequestParam String recordTime, @RequestParam String contractId){
 		//查询数据
-		ContractLog log = this.contractLogService.getOne(Wrappers.<ContractLog>lambdaQuery().eq(ContractLog::getWbsNodeId, nodePrimaryKeyId).eq(ContractLog::getRecordTime, recordTime).eq(ContractLog::getContractId, contractId));
+		ContractLog log = this.contractLogService.getOne(Wrappers.<ContractLog>lambdaQuery().eq(ContractLog::getWbsNodeId, nodePrimaryKeyId)
+				.eq(ContractLog::getCreateUser, AuthUtil.getUserId())
+				.eq(ContractLog::getRecordTime, recordTime)
+				.eq(ContractLog::getContractId, contractId));
 		if(log != null){
 			//调用批量废除接口
 			return this.batchAbolish(log.getId().toString());
@@ -266,7 +284,7 @@ public class ContractLogController extends BladeController {
 	@ApiOperation(value = "批量废除")
 	public R<Boolean> batchAbolish(@RequestParam String ids){
 		//获取所有相关任务记录
-		List<Task> taskList =  this.taskClient.queryTaskListByFormDataId(ids);
+		List<Task> taskList = this.taskClient.queryTaskListByFormDataId(ids);
 		if(taskList != null && taskList.size() > 0){
 			//执行废除
 			for(Task task : taskList){
@@ -422,5 +440,5 @@ public class ContractLogController extends BladeController {
 	public R<List<WbsTreeContractTreeVOS>> queryCurrentContractLogList(@RequestParam String contractId){
 		return R.data(this.wbsTreeContractClient.queryCurrentContractLogList(contractId));
 	}
-	
+
 }

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

@@ -232,12 +232,16 @@ public class TaskController extends BladeController {
 		if(StringUtils.isNotEmpty(taskIds)){
 			String[] taskIdArray = taskIds.split(",");
 			String[] parallelProcessInstanceIdArray = parallelProcessInstanceIds.split(",");
+			String[] approvalType = batchTaskVO.getApprovalType().split(",");
+			String[] formDataId = batchTaskVO.getFormDataId().split(",");
 			for(int i = 0, l = taskIdArray.length; i < l; i ++){
 				TaskApprovalVO approvalVO = new TaskApprovalVO();
 				approvalVO.setTaskId(taskIdArray[i]);
 				approvalVO.setParallelProcessInstanceId(parallelProcessInstanceIdArray[i]);
 				approvalVO.setFlag(batchTaskVO.getFlag());
 				approvalVO.setComment(batchTaskVO.getComment());
+				approvalVO.setApprovalType(Integer.parseInt(approvalType[i]));
+				approvalVO.setFormDataId(formDataId[i]);
 
 				//批量审批
 				this.taskService.completeApprovalTask(approvalVO);

+ 150 - 39
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.business.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -78,6 +79,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 
     private final ContractClient contractClient;
 
+    private final Integer FOREACH_MAX = 10;
+
     @Override
     public List<TaskParallel> queryApprovalUser(String formDataIds) {
         //返回结果
@@ -104,6 +107,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
       */
      @Override
      public TaskApprovalVO queryBusinessDataTask(TaskApprovalVO taskApprovalVO) {
+         int foreachNumber = 0;
          do {
              //判断锁是否存在
              if(!DistributedRedisLock.getLockStatus(taskApprovalVO.getFormDataId())){
@@ -126,13 +130,21 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                  }
              } else {
                 try{
-                    //如果存在锁,则等待解锁
-                    TimeUnit.MILLISECONDS.sleep(5);
+                    if(foreachNumber < FOREACH_MAX){
+                        //如果存在锁,则等待解锁
+                        TimeUnit.MILLISECONDS.sleep(5);
+                        foreachNumber ++;
+                    } else {
+                        break;
+                    }
                 }catch (Exception e){
                     e.printStackTrace();
                 }
              }
          } while (true);
+         //能走到这说明找不到文件或者超过锁定次数,解锁并返回
+         DistributedRedisLock.release(taskApprovalVO.getFormDataId());
+         return taskApprovalVO;
      }
 
      @Override
@@ -409,49 +421,113 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             //修改对应的业务数据状态为已废除
             this.updateBusinessDataByFormDataId(this.getOne(Wrappers.<Task>lambdaQuery().eq(Task::getProcessInstanceId, masterProcessInstanceId)), 3, null);
 
-            //查询合同段及项目名称
-            ProjectInfo projectInfo = this.projectClient.queryProjectList(Func.toStrList(masterTask.getProjectId())).get(0);
-            String projectName = StringUtils.isNotEmpty(projectInfo.getProjectAlias()) ? projectInfo.getProjectAlias() : projectInfo.getProjectName();
-            ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(masterTask.getContractId()));
-            String contractName = contractInfo.getContractName();
-
-            try{
-                //设置废除通知信息
-                List<MessageWarningVO> messageWarningList = new ArrayList<>();
-                List<TaskParallel> linkTaskList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, masterProcessInstanceId));
-                for(TaskParallel parallel : linkTaskList){
-                    if(!currentLink.getId().equals(parallel.getId())){
-                        messageWarningList.add(new MessageWarningVO(
-                                Long.parseLong(masterTask.getProjectId()),
-                                Long.parseLong(masterTask.getContractId()),
-                                3,
-                                "【" + projectName + "-" + contractName + "】的用户【" + AuthUtil.getNickName() + "】废除了【" + masterTask.getTaskName() + "】,废除原因为【" + comment + "】,请及时查看",
-                                Long.parseLong(parallel.getTaskUser()),
-                                0
-                        ));
-                    }
-                }
+            //任务废除通知
+            this.abolishMessage(masterTask, currentLink, comment);
 
-                //通知上报人
-                messageWarningList.add(new MessageWarningVO(
-                        Long.parseLong(masterTask.getProjectId()),
-                        Long.parseLong(masterTask.getContractId()),
-                        3,
-                        "【" + projectName + "-" + contractName + "】的用户【" + AuthUtil.getNickName() + "】废除了【" + masterTask.getTaskName() + "】,废除原因为【" + comment + "】,请及时查看",
-                        masterTask.getCreateUser(),
-                        0
-                ));
-
-                //生成废除通知
-                this.messageWarningService.savePushUserMessageWarning(messageWarningList);
-            }catch (Exception e){
-                e.printStackTrace();
-            }
         }
 
         return true;
     }
 
+    /**
+     * 任务废除通知
+     */
+    private void abolishMessage(Task masterTask, TaskParallel currentLink, String comment){
+        //查询合同段及项目名称
+        ProjectInfo projectInfo = this.projectClient.queryProjectList(Func.toStrList(masterTask.getProjectId())).get(0);
+        String projectName = StringUtils.isNotEmpty(projectInfo.getProjectAlias()) ? projectInfo.getProjectAlias() : projectInfo.getProjectName();
+        ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(masterTask.getContractId()));
+        String contractName = contractInfo.getContractName();
+
+        try{
+            //记录已经通知的人
+            List<Long> userIds = new ArrayList<>();
+
+            //设置废除通知信息
+            List<MessageWarningVO> messageWarningList = new ArrayList<>();
+            List<TaskParallel> linkTaskList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, masterTask.getProcessInstanceId()));
+            for(TaskParallel parallel : linkTaskList){
+                if(!currentLink.getId().equals(parallel.getId()) && !userIds.contains(Long.parseLong(parallel.getTaskUser()))){
+                    messageWarningList.add(new MessageWarningVO(
+                            Long.parseLong(masterTask.getProjectId()),
+                            Long.parseLong(masterTask.getContractId()),
+                            3,
+                            "【" + projectName + "-" + contractName + "】的用户【" + AuthUtil.getNickName() + "】废除了【" + masterTask.getTaskName() + "】,废除原因为【" + comment + "】,请及时查看",
+                            Long.parseLong(parallel.getTaskUser()),
+                            0
+                    ));
+                    //记录添加人
+                    userIds.add(Long.parseLong(parallel.getTaskUser()));
+                }
+            }
+
+            //通知上报人
+            messageWarningList.add(new MessageWarningVO(
+                    Long.parseLong(masterTask.getProjectId()),
+                    Long.parseLong(masterTask.getContractId()),
+                    3,
+                    "【" + projectName + "-" + contractName + "】的用户【" + AuthUtil.getNickName() + "】废除了【" + masterTask.getTaskName() + "】,废除原因为【" + comment + "】,请及时查看",
+                    masterTask.getCreateUser(),
+                    0
+            ));
+            userIds.add(masterTask.getCreateUser());
+
+            //查询业务数据
+            JSONObject businessJson = this.queryTaskBusinessObject(masterTask.getFormDataId());
+            //通知填报人
+            if(businessJson.containsKey("isQuery") || businessJson.containsKey("isLog") || businessJson.containsKey("isArchive")){
+                //获取集合
+                List<JSONObject> result = JSONArray.parseArray(JSONObject.toJSONString(businessJson.get("result")), JSONObject.class);
+                for(JSONObject json : result){
+                    if(businessJson.containsKey("isQuery")){
+                        //填报资料,获取参与的填报人
+                        String fileUserIdAndName = json.getString("fileUserIdAndName");
+                        if(StringUtils.isNotEmpty(fileUserIdAndName)){
+                            String[] fileUserIdAndNames = fileUserIdAndName.split(",");
+                            for(String str : fileUserIdAndNames){
+                                String[] strs = str.split("-");
+                                //可能上报人就是填报人,防止重复推送
+                                if(!userIds.contains(Long.parseLong(strs[0]))){
+                                    //通知上报人
+                                    messageWarningList.add(new MessageWarningVO(
+                                            Long.parseLong(masterTask.getProjectId()),
+                                            Long.parseLong(masterTask.getContractId()),
+                                            3,
+                                            "【" + projectName + "-" + contractName + "】的用户【" + AuthUtil.getNickName() + "】废除了【" + masterTask.getTaskName() + "】,废除原因为【" + comment + "】,请及时查看",
+                                            Long.parseLong(strs[0]),
+                                            0
+                                    ));
+                                    userIds.add(Long.parseLong(strs[0]));
+                                }
+                            }
+                        }
+
+                    } else if(businessJson.containsKey("isLog") || businessJson.containsKey("isArchive")){
+                        //获取填写人
+                        String fillUser = json.getString("createUser");
+                        if(StringUtils.isNotEmpty(fillUser) && !userIds.contains(Long.parseLong(fillUser))){
+                            //通知上报人
+                            messageWarningList.add(new MessageWarningVO(
+                                    Long.parseLong(masterTask.getProjectId()),
+                                    Long.parseLong(masterTask.getContractId()),
+                                    3,
+                                    "【" + projectName + "-" + contractName + "】的用户【" + AuthUtil.getNickName() + "】废除了【" + json.getString("fileName") + "】,废除原因为【" + comment + "】,请及时查看",
+                                    Long.parseLong(fillUser),
+                                    0
+                            ));
+                            userIds.add(Long.parseLong(fillUser));
+                        }
+                    }
+                }
+            }
+
+            //生成废除通知
+            this.messageWarningService.savePushUserMessageWarning(messageWarningList);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
     @Override
     public Boolean startApproval(TaskVO vo) {
         //获取业务表
@@ -536,6 +612,41 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
         return true;
     }
 
+    /**
+     * 获取业务数据
+     */
+    private JSONObject queryTaskBusinessObject(String formDataId){
+        JSONObject json = new JSONObject();
+        List<JSONObject> jsonResult;
+        //先检查是否是资料填报
+        List<InformationQuery> querys = this.informationQueryService.list(Wrappers.<InformationQuery>lambdaQuery().in(InformationQuery::getId, Func.toStrList(formDataId)));
+        if(querys != null && querys.size() > 0){
+            jsonResult = JSONArray.parseArray(JSONObject.toJSONString(querys), JSONObject.class);
+            //设置标记
+            json.put("isQuery", "true");
+            json.put("result", jsonResult);
+        } else {
+            //再检查是否是日志
+            List<ContractLog> logs = this.contractLogService.list(Wrappers.<ContractLog>lambdaQuery().in(ContractLog::getId, Func.toStrList(formDataId)));
+            if(logs != null && logs.size() > 0){
+                jsonResult = JSONArray.parseArray(JSONObject.toJSONString(logs), JSONObject.class);
+                //设置标记
+                json.put("isLog", "true");
+                json.put("result", jsonResult);
+            } else {
+                //工程文件
+                List<ArchiveFile> archiveList = this.archiveFileService.list(Wrappers.<ArchiveFile>lambdaQuery().eq(ArchiveFile::getId, Func.toStrList(formDataId)));
+                if(archiveList != null && archiveList.size() > 0){
+                    jsonResult = JSONArray.parseArray(JSONObject.toJSONString(archiveList), JSONObject.class);
+                    //设置标记
+                    json.put("isArchive", "true");
+                    json.put("result", jsonResult);
+                }
+            }
+        }
+        return json;
+    }
+
     /**
      * 修改业务数据状态
      */