被驳回时发送消息通知

This commit is contained in:
wangliwen 2022-08-03 14:40:42 +08:00
parent 975d6654ce
commit 1ec9b2db5c
9 changed files with 112 additions and 17 deletions

View File

@ -94,6 +94,9 @@ public class ActivitiNoticeAspect {
case TaskListener.EVENTNAME_COMPLETE: // 节点执行完成
task_complete_notice(delegateTask, activitiNoticeOperation);
break;
case TaskListener.EVENTNAME_CREATE: // 节点被创建
task_create_notice(delegateTask, activitiNoticeOperation);
break;
default:
}
});
@ -118,6 +121,79 @@ public class ActivitiNoticeAspect {
LOGGER.error("执行时长{} ms", time);
}
/**
* 特殊处理驳回
*
* @param delegateTask
* @param activitiNoticeOperation
*/
private void task_create_notice(final DelegateTask delegateTask, final ActivitiNoticeOperation activitiNoticeOperation) {
Map<String, Object> kv = delegateTask.getVariables();
LOGGER.error("表单:{}", JSON.toJSONString(kv));
final String workKey = TaskListener.EVENTNAME_CREATE + kv.get("id").toString();
if (work.contains(workKey)) {
LOGGER.error("------------出现重放------------");
return;
}
work.add(workKey);
String creator = null;
if (kv.containsKey("creator")) { // 表单存在创建者
creator = kv.get("creator").toString();
} else if (kv.containsKey("userId")) {
creator = kv.get("userId").toString();
}
if (StringUtils.isEmpty(creator)) {
work.remove(workKey);
return;
}
if (!"发起人录入表单".equals(activitiNoticeOperation.process())) { // 非驳回到录入表单
work.remove(workKey);
return;
}
try {
String result;
Boolean backToFirst = Boolean.valueOf(kv.get("backToFirst") != null ? kv.get("backToFirst").toString() : Boolean.FALSE.toString()); // 存在驳回
if (Boolean.TRUE.equals(backToFirst)) {
result = "被驳回";
} else {
work.remove(workKey);
return;
}
String finalCreator = creator;
String finalResult = result;
CompletableFuture.runAsync(() -> { // 发起人
SysUserDTO userDTO = sysUserService.get(Long.valueOf(finalCreator));
String content = "【通知】" + userDTO.getRealName() + ",您发起的流程 " + kv.getOrDefault("flowType", "") + finalResult;
SysNoticeDTO dto = new SysNoticeDTO();
dto.setType(2);
dto.setTitle("流程节点系统通知");
dto.setContent(content); // 通知内容
dto.setReceiverType(1);
dto.setReceiverTypeIds(finalCreator);
dto.setStatus(NoticeStatusEnum.SEND.value());
dto.setSenderName("流程系统");
dto.setSenderDate(new Date());
dto.setCreator(sysUserService.getByUsername("admin").getId());
dto.setCreateDate(new Date());
dto.setFrom("通知");
sysNoticeService.save(dto);
}, EXECUTOR);
} catch (Exception exception) {
LOGGER.error("发送通知消息异常", exception);
} finally {
// 防止重放
new Thread(() -> {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
work.remove(workKey);
}
}).start();
}
}
/**
* 进行节点流转
*
@ -127,11 +203,12 @@ public class ActivitiNoticeAspect {
private void task_complete_notice(final DelegateTask delegateTask, final ActivitiNoticeOperation activitiNoticeOperation) {
Map<String, Object> kv = delegateTask.getVariables();
LOGGER.error("表单:{}", JSON.toJSONString(kv));
if (work.contains(TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString())) {
final String workKey = TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString();
if (work.contains(workKey)) {
LOGGER.error("------------出现重放------------");
return;
}
work.add(TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString());
work.add(workKey);
String creator = null;
if (kv.containsKey("creator")) { // 表单存在创建者
creator = kv.get("creator").toString();
@ -139,6 +216,7 @@ public class ActivitiNoticeAspect {
creator = kv.get("userId").toString();
}
if (StringUtils.isEmpty(creator)) {
work.remove(workKey);
return;
}
try {
@ -186,7 +264,7 @@ public class ActivitiNoticeAspect {
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
work.remove(TaskListener.EVENTNAME_COMPLETE + kv.get("id").toString());
work.remove(workKey);
}
}).start();
}
@ -201,11 +279,12 @@ public class ActivitiNoticeAspect {
private void end_notice(final DelegateExecution execution, final ActivitiNoticeOperation activitiNoticeOperation) {
Map<String, Object> kv = execution.getVariables();
LOGGER.error("表单:{}", JSON.toJSONString(kv));
if (work.contains(ExecutionListener.EVENTNAME_END + kv.get("id").toString())) {
final String workKey = ExecutionListener.EVENTNAME_END + kv.get("id").toString();
if (work.contains(workKey)) {
LOGGER.error("------------出现重放------------");
return;
}
work.add(ExecutionListener.EVENTNAME_END + kv.get("id").toString());
work.add(workKey);
String creator = null;
if (kv.containsKey("creator")) { // 表单存在创建者
creator = kv.get("creator").toString();
@ -213,6 +292,7 @@ public class ActivitiNoticeAspect {
creator = kv.get("userId").toString();
}
if (StringUtils.isEmpty(creator)) {
work.remove(workKey);
return;
}
try {
@ -284,7 +364,7 @@ public class ActivitiNoticeAspect {
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
work.remove(ExecutionListener.EVENTNAME_END + kv.get("id").toString());
work.remove(workKey);
}
}).start();
}
@ -300,11 +380,12 @@ public class ActivitiNoticeAspect {
private void assignment_notice(final DelegateTask delegateTask, final ActivitiNoticeOperation activitiNoticeOperation) {
Map<String, Object> kv = delegateTask.getVariables();
LOGGER.error("表单:{}", JSON.toJSONString(kv));
if (work.contains(TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString())) {
final String workKey = TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString();
if (work.contains(workKey)) {
LOGGER.error("------------出现重放------------");
return;
}
work.add(TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString());
work.add(workKey);
String creator = null;
if (kv.containsKey("creator")) { // 表单存在创建者
creator = kv.get("creator").toString();
@ -312,6 +393,7 @@ public class ActivitiNoticeAspect {
creator = kv.get("userId").toString();
}
if (StringUtils.isEmpty(creator)) {
work.remove(workKey);
return;
}
try {
@ -365,9 +447,10 @@ public class ActivitiNoticeAspect {
new Thread(() -> {
try {
Thread.sleep(200);
work.remove(TaskListener.EVENTNAME_ASSIGNMENT + kv.get("id").toString());
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
work.remove(workKey);
}
}).start();
}

View File

@ -112,6 +112,7 @@ public class AbilityCenterController {
tAbilityApplicationDTO.setUserId(abilityBatchApplicationDTO.getUserId());
tAbilityApplicationDTO.setApproveStatus("审核中");
tAbilityApplicationDTO.setDelFlag(0);
tAbilityApplicationDTO.setFlowType("能力申请");
tAbilityApplicationDTO.setEnclosureName(abilityBatchApplicationDTO.getEnclosureName());
// 仿照请求接口 /processForm/tabilityapplication
ValidatorUtils.validateEntity(tAbilityApplicationDTO, AddGroup.class, DefaultGroup.class);

View File

@ -170,6 +170,8 @@ public class AbilityCenterControllerV2 {
// 归为同一次申请
tAbilityApplicationDTO.setApplyFlag(abilityBatchApplicationDTO.getApplyFlag());
tAbilityApplicationDTO.setFlowType("能力申请");
// 仿照请求接口 /processForm/tabilityapplication
ValidatorUtils.validateEntity(tAbilityApplicationDTO, AddGroup.class, DefaultGroup.class);
tAbilityApplicationService.save(tAbilityApplicationDTO); // 写能力申请数据
@ -232,10 +234,10 @@ public class AbilityCenterControllerV2 {
processStartDTO.setProcessDefinitionKey(KEY); //限定
AuditingBaseDTO auditingBaseDTO = new AuditingBaseDTO();
auditingBaseDTO.setCompleteEntry(Boolean.TRUE); // 首次录入
auditingBaseDTO.setFlowType("能力申请");
Map<String, Object> variables = oMapper.convertValue(auditingBaseDTO, Map.class);
variables.putAll(new HashMap<String, Object>() { // 流程内携带属性值
{
put("tAbilityApplicationDTOList", dtoList); // 归属该部门的申请

View File

@ -86,6 +86,7 @@ public class CommentController {
}
tDemandCommentDTO.setDelFlag(2); // 待审核
tDemandCommentDTO.setCompleteEntry(Boolean.TRUE);
tDemandCommentDTO.setFlowType("评论审核");
tDemandCommentService.update(tDemandCommentDTO);
codeGenerationUtils.setApplyNumber("XQPL", Arrays.asList(tDemandCommentDTO.getId()), jdbcTemplate);

View File

@ -1,7 +1,6 @@
package io.renren.common.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.renren.common.annotation.LogOperation;
import io.renren.common.page.PageData;
import io.renren.common.utils.CodeGenerationUtils;
@ -73,7 +72,7 @@ public class DemandDataController {
logger.info(JSON.toJSONString(tDemandDataDTO));
logger.info("####################################################");
tDemandDataDTO.setFlag(TDemandDataEntityFlag.UNDER_REVIEW.getFlag());
tDemandDataDTO.setFlowType("能力需求申请");
ValidatorUtils.validateEntity(tDemandDataDTO, AddGroup.class, DefaultGroup.class);
tDemandDataService.save(tDemandDataDTO);
if (tDemandDataDTO.getId() == null) {

View File

@ -116,6 +116,7 @@ public class ResourceMountController {
tResourceMountApplyDTO.setParameterContentMd5(SecureUtil.md5(JSON.toJSONString(index)));
tResourceMountApplyDTO.setResourceDTO(index);
tResourceMountApplyDTO.setEnclosure(index.getEnclosure());
tResourceMountApplyDTO.setFlowType("资源上架");
try {
tResourceMountApplyDTO.setResourceId(tResourceMountApplyDTO.getResourceDTO().getId());
} catch (Exception e) {
@ -209,6 +210,7 @@ public class ResourceMountController {
dto.setUndercarriageReason(tResourceUndercarriageApplyDTO.getReason());
dto.setUndercarriageEnclosure(tResourceUndercarriageApplyDTO.getEnclosure());
dto.setDelFlag(ResourceEntityDelFlag.NORMAL.getFlag()); // 设置为正常
dto.setFlowType("资源下架");
String userId = SecurityUser.getUserId().toString();
Optional<SysUserDTO> userDTO = Optional.ofNullable(sysUserService.get(Long.valueOf(userId)));
userDTO.ifPresent(user -> {

View File

@ -11,6 +11,7 @@ import java.io.Serializable;
public class AuditingBaseDTO implements Serializable {
private static final long serialVersionUID = -6612029904210773020L;
/**
* 流程中是否存在拒绝
*/
@ -41,4 +42,9 @@ public class AuditingBaseDTO implements Serializable {
*/
private Boolean endByUser = null;
/**
* 流程类型
*/
private String flowType = null;
}

View File

@ -4,6 +4,7 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import io.renren.common.annotation.ActivitiNoticeOperation;
import io.renren.common.dto.AuditingBaseDTO;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateTask;
@ -28,6 +29,7 @@ public class InitiatorDataEntryListener implements TaskListener {
private TaskService taskService;
@Override
@ActivitiNoticeOperation(value = "任意流程", process = "发起人录入表单")
public void notify(DelegateTask delegateTask) {
logger.error("----------------------流程发起人录入表单节点---------------------------");
logger.error("事件类型:{}", delegateTask.getEventName());

View File

@ -459,9 +459,9 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
List<ResourceDTO> resourceDTOS;
if (orderField.equals("total")) { // 对总体评价特殊处理
List<Long> ids = new ArrayList<>();
switch (orderType) {
switch (orderType.toUpperCase()) {
case "DESC": // total 倒序
ids = selectDTOPageSpecilTotal.parallelStream().map(Map.class::cast).sorted(Comparator.comparing(x -> {
ids = selectDTOPageSpecilTotal.stream().map(Map.class::cast).sorted(Comparator.comparing(x -> {
Map index = (Map) x;
String string = (index.get("total") == null) ? "0" : index.get("total").toString();
return Long.valueOf(string);
@ -471,7 +471,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
).collect(Collectors.toList());
break;
case "ASC": // total 升序
ids = selectDTOPageSpecilTotal.parallelStream().map(Map.class::cast).sorted(Comparator.comparing(x -> {
ids = selectDTOPageSpecilTotal.stream().map(Map.class::cast).sorted(Comparator.comparing(x -> {
String string = (x.get("total") == null) ? "0" : x.get("total").toString();
return Long.valueOf(string);
}
@ -500,7 +500,6 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
} else {
logger.info("排序要求 orderField:{} orderType:{}", orderField, orderType);
List<ResourceDTO> resourceDTOS = resourceDao.selectWithAttrs(resourceDTO, orderField, orderType);
int j = Math.min(pageNum * pageSize, resourceDTOS.size());
if (resourceDTOS.isEmpty()) {
resultPage.setRecords(new ArrayList<>());
resultPage.setTotal(0);
@ -1426,7 +1425,7 @@ public class ResourceServiceImpl extends CrudServiceImpl<ResourceDao, ResourceEn
}
public PageData<Map<String,Object>> resourceInstallationOrDataResourceDetails(Map<String, Object> params){
public PageData<Map<String, Object>> resourceInstallationOrDataResourceDetails(Map<String, Object> params) {
List<Map<String, Object>> result;
Integer page = Integer.parseInt(params.get("page").toString()) - 1;
Integer pageSize = Integer.parseInt(params.get("limit").toString());