|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 修改业务数据状态
|
|
|
*/
|