统一待办集成

This commit is contained in:
梁琦涛
2024-02-02 14:50:16 +08:00
parent 75c220e2c9
commit 2bf17b67b5
9 changed files with 360 additions and 145 deletions
@@ -1,43 +0,0 @@
package com.jero.modules.docking.hiwork.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Author: liao
* @Date: 2023/10/16 17:23
* @Description: 统一待办集成-添加
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="统一待办集成-添加", description="统一待办集成-添加")
public class HiworkTodoAdd {
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "任务id")
private String taskId;
@ApiModelProperty(value = "流程类型,字典")
private String processType;
@ApiModelProperty(value = "是否会签")
private Integer isCounterSignature;
@ApiModelProperty(value = "节点编号")
private String nodeNumber;
@ApiModelProperty(value = "跳转链接")
private String jumpLink;
@ApiModelProperty(value = "APP跳转链接")
private String appJumpLink;
@ApiModelProperty(value = "创建人id")
private String creatorId;
@ApiModelProperty(value = "接收人id")
private String recipientId;
@ApiModelProperty(value = "截止时间")
private Long endTime;
@ApiModelProperty(value = "业务主键")
private String businessId;
@ApiModelProperty(value = "待办、已办(1、待办 2已办 3结束 6 删除)")
private String isTodo;
}
@@ -1,6 +1,7 @@
package com.jero.modules.docking.hiwork.service;
import com.jero.modules.docking.hiwork.entity.HiworkTodoAdd;
import com.jero.common.api.dto.message.HiworkTodoAdd;
import java.util.List;
@@ -1,41 +1,68 @@
package com.jero.modules.docking.hiwork.service.impl;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.docking.hiwork.entity.HiworkTodoAdd;
import com.jero.modules.docking.hiwork.service.IHiworkTodoService;
import com.jero.modules.docking.hiwork.util.HiworkPostUtil;
import com.jero.modules.docking.hiwork.entity.HiworkTodo;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.PushWorkflowIntegrationAPI;
import com.jero.common.api.dto.message.HiworkTodoAdd;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.docking.hiwork.entity.HiworkTodo;
import com.jero.modules.docking.hiwork.util.HiworkPostUtil;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.apache.shiro.SecurityUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @Author: liao
* @Date: 2023/10/13 14:23
* @Description: 待办
*/
@Slf4j
@Service
public class HiworkTodoServiceImpl implements IHiworkTodoService {
public class HiworkTodoServiceImpl implements PushWorkflowIntegrationAPI {
@Autowired
@Resource
private ISysUserService sysUserService;
@Autowired
private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
@Autowired
@Resource
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private HiworkPostUtil hiworkPostUtil;
@Resource
private ProcessNodeService processNodeService;
@Resource
private ProcessAllService processAllService;
@Value("${hiwork.isWorkflow}")
private boolean isWorkflow;
@Value("${hiwork.sysCode}")
private String hiworkSysCode;
@Value("${hiwork.fontUrl}")
private String hiworkFontUrl;
private static final String PROCESS_TYPE = "标准法规SRMS";
/**
* @Author: liao
@@ -44,75 +71,91 @@ public class HiworkTodoServiceImpl implements IHiworkTodoService {
**/
@Override
public void sendTodoTask(List<HiworkTodoAdd> hiworkTodoAddList) {
if(!isWorkflow){
return;
}
if (CollectionUtils.isEmpty(hiworkTodoAddList)) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "hiworkTodoAddList");
}
try {
List<HiworkTodo> hiworkTodoList = getHiworkTodos(hiworkTodoAddList);
log.info("统一待办推送入参" + JSON.toJSONString(hiworkTodoList));
// 远程调用
hiworkPostUtil.postTodo(hiworkTodoList);
}catch (Exception e){
log.error("统一待办推送异常",e);
}
}
@NotNull
private List<HiworkTodo> getHiworkTodos(List<HiworkTodoAdd> hiworkTodoAddList) {
List<HiworkTodo> hiworkTodoList = new ArrayList<>();
hiworkTodoAddList.forEach(hiworkTodoAdd -> {
for (HiworkTodoAdd hiworkTodoAdd : hiworkTodoAddList) {
String recordId = hiworkTodoAdd.getRecordId();
String processDefinitionId = hiworkTodoAdd.getProcessDefinitionId();
ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getById(recordId);
if(Objects.isNull(processApprovalRecord)){
continue;
}
HiworkTodo hiworkTodo = new HiworkTodo();
// 异步系统标识
hiworkTodo.setSysCode(HiworkPostUtil.getSysCode());
// 标题
hiworkTodo.setNoticeTitle(hiworkTodoAdd.getTitle());
hiworkTodo.setSysCode(hiworkSysCode);
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String date = new SimpleDateFormat("yyyy年MM月dd日").format(new Date());
String noticeTitle = processApprovalRecord.getTaskName() + "(" + loginUser.getUsername() + date + ")";
hiworkTodo.setNoticeTitle(noticeTitle);
hiworkTodo.setProcessId(processApprovalRecord.getProcessInstanceId());
hiworkTodo.setProcessName(processApprovalRecord.getTaskName());
hiworkTodo.setProcessType(PROCESS_TYPE);
hiworkTodo.setTaskId(processApprovalRecord.getTaskId());
hiworkTodo.setTaskName(processApprovalRecord.getTaskName());
if (StringUtils.isBlank(hiworkTodoAdd.getTaskId())) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "taskId");
LambdaQueryWrapper<ProcessNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId);
wrapper.eq(ProcessNode::getNodeName,processApprovalRecord.getTaskName());
wrapper.eq(ProcessNode::getIsView, YesOrNoEnum.YES.getValue());
ProcessNode processNode = processNodeService.getOne(wrapper,false);
if(!Objects.isNull(processNode)){
if(processNode.getNodeName().contains("会签")){
hiworkTodo.setMultiInstance(1);
}
hiworkTodo.setNodeBusiCode(processNode.getXmlNodeId());
// 是否显示(0否,1是)
hiworkTodo.setIsShow(String.valueOf(processNode.getIsView()));
}
Task task = taskService.createTaskQuery().taskId(hiworkTodoAdd.getTaskId()).singleResult();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(task.getProcessInstanceId()).singleResult();
// 流程实例id
hiworkTodo.setProcessId(processInstance.getId());
// 流程实例名称
hiworkTodo.setProcessName(processInstance.getName());
// 流程类型,字典
hiworkTodo.setProcessType(hiworkTodoAdd.getProcessType());
// 任务id
hiworkTodo.setTaskId(hiworkTodoAdd.getTaskId());
// 节点名称
hiworkTodo.setTaskName(task.getName());
// 是否会签
hiworkTodo.setMultiInstance(hiworkTodoAdd.getIsCounterSignature());
// 节点编号
hiworkTodo.setNodeBusiCode(hiworkTodoAdd.getNodeNumber());
// 跳转链接
hiworkTodo.setBusinessLink(hiworkTodoAdd.getJumpLink());
// APP跳转链接
hiworkTodo.setAppBusinessLink(hiworkTodoAdd.getAppJumpLink());
if (StringUtils.isBlank(hiworkTodoAdd.getCreatorId())) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "creatorId");
LambdaQueryWrapper<ProcessAll> queryProcessAll = new LambdaQueryWrapper<>();
queryProcessAll.eq(ProcessAll::getProcessInstanceId,processApprovalRecord.getProcessInstanceId());
ProcessAll processAll = processAllService.getOne(queryProcessAll);
if(!Objects.isNull(processAll)){
SysUser sysUser = sysUserService.getById(processAll.getCreateUserId());
if(!Objects.isNull(sysUser)){
hiworkTodo.setCreateUserCode(sysUser.getUsername());
hiworkTodo.setCreateUserName(sysUser.getRealname());
}
hiworkTodo.setDueTime(processAll.getDueTime().getTime());
hiworkTodo.setBid(processAll.getProjectId());
String url = hiworkFontUrl.replace("{projectId}",processAll.getProjectId())
.replace("{taskName}",processApprovalRecord.getTaskName())
.replace("{taskId}",processApprovalRecord.getTaskId())
.replace("{processInstanceId}",processApprovalRecord.getProcessInstanceId())
.replace("{nodeId}",processApprovalRecord.getNodeId());
// 跳转链接
hiworkTodo.setBusinessLink(url.replace("{url}", Objects.requireNonNull(ProcessTypeEnum.getFontReturnUrlPc(processAll.getPrcType()))));
// APP跳转链接
hiworkTodo.setAppBusinessLink(url.replace("{url}", Objects.requireNonNull(ProcessTypeEnum.getFontReturnUrlPc(processAll.getPrcType()))));
}
SysUser creatorUser = sysUserService.getById(hiworkTodoAdd.getCreatorId());
// 创建人code
hiworkTodo.setCreateUserCode(creatorUser.getUsername());
// 创建人姓名
hiworkTodo.setCreateUserName(creatorUser.getRealname());
if (StringUtils.isBlank(hiworkTodoAdd.getRecipientId())) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "recipientId");
SysUser sysUser = sysUserService.getById(processApprovalRecord.getUserId());
if(!Objects.isNull(sysUser)){
hiworkTodo.setUserId(processApprovalRecord.getUserId());
hiworkTodo.setUserCode(sysUser.getUsername());
hiworkTodo.setUserName(sysUser.getRealname());
}
SysUser recipientUser = sysUserService.getById(hiworkTodoAdd.getRecipientId());
// 接收人id
hiworkTodo.setUserId(recipientUser.getId());
// 接收人code
hiworkTodo.setUserCode(recipientUser.getUsername());
// 接收人姓名
hiworkTodo.setUserName(recipientUser.getRealname());
// 截止时间
hiworkTodo.setDueTime(hiworkTodoAdd.getEndTime());
// 业务主键
hiworkTodo.setBid(hiworkTodoAdd.getBusinessId());
// 待办、已办
hiworkTodo.setIsTodo(hiworkTodoAdd.getIsTodo());
hiworkTodo.setReceiveTime(Instant.now());
hiworkTodo.setIsTodo(String.valueOf(processApprovalRecord.getFinishFlag()));
hiworkTodoList.add(hiworkTodo);
});
// 远程调用
hiworkPostUtil.postTodo(hiworkTodoList);
}
return hiworkTodoList;
}
}