直转审核流程
This commit is contained in:
parent
082330c4a2
commit
f08ce31bd0
|
|
@ -61,5 +61,5 @@ public class WorkPeopleInfo implements Serializable {
|
|||
@ApiModelProperty(value = "角色数组")
|
||||
private String[] roleIdArray;
|
||||
|
||||
private int nextNodeId;
|
||||
private Integer nextNodeId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,31 @@
|
|||
package com.bonus.material.event;
|
||||
|
||||
import com.bonus.common.biz.domain.lease.LeaseApplyInfo;
|
||||
import com.bonus.common.biz.domain.lease.WorkApplyInfo;
|
||||
import com.bonus.common.biz.domain.lease.WorkPeopleInfo;
|
||||
import com.bonus.common.biz.enums.TmTaskTypeEnum;
|
||||
import com.bonus.common.core.exception.ServiceException;
|
||||
import com.bonus.common.core.utils.DateUtils;
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
import com.bonus.common.security.utils.SecurityUtils;
|
||||
import com.bonus.material.basic.domain.dto.SysUserRoleVo;
|
||||
import com.bonus.material.ma.domain.DirectApplyInfo;
|
||||
import com.bonus.material.task.domain.TmTask;
|
||||
import com.bonus.material.work.domain.SysWorkflowNode;
|
||||
import com.bonus.material.work.domain.SysWorkflowRecord;
|
||||
import com.bonus.material.work.domain.SysWorkflowRecordHistory;
|
||||
import com.bonus.material.work.domain.SysWorkflowType;
|
||||
import com.bonus.material.work.mapper.*;
|
||||
import com.bonus.system.api.domain.SysUser;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class ApplyEventListener {
|
||||
|
|
@ -38,9 +46,10 @@ public class ApplyEventListener {
|
|||
private DirectAuditMapper directAuditMapper;
|
||||
|
||||
@EventListener
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
// @Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
public int addSysWorkflowRecord(InsertWorkflowEvent event) {
|
||||
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
|
||||
int count = 0;
|
||||
System.out.println("Workflow工作流监听器收到事件: ");
|
||||
|
||||
//获取审批流id
|
||||
|
|
@ -61,21 +70,26 @@ public class ApplyEventListener {
|
|||
sysWorkflowRecord.setTaskType(event.getTaskType());
|
||||
sysWorkflowRecord.setTaskCode(event.getTaskCode());
|
||||
//创建审批任务
|
||||
int count = sysWorkflowRecordMapper.addSysWorkflowRecord(sysWorkflowRecord);
|
||||
count = sysWorkflowRecordMapper.addSysWorkflowRecord(sysWorkflowRecord);
|
||||
if (0 == count) {
|
||||
throw new RuntimeException("创建审批任务失败!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
sysWorkflowRecord = new SysWorkflowRecord();
|
||||
sysWorkflowRecord.setTaskId(event.getTaskId());
|
||||
sysWorkflowRecord.setTaskType(event.getTaskType());
|
||||
sysWorkflowRecord.setTaskCode(event.getTaskCode());
|
||||
//创建审批任务
|
||||
int count = sysWorkflowRecordMapper.addSysWorkflowRecord(sysWorkflowRecord);
|
||||
if (0 == count) {
|
||||
throw new RuntimeException("创建审批任务失败!");
|
||||
}
|
||||
count = sysWorkflowRecordMapper.addSysWorkflowRecord(sysWorkflowRecord);
|
||||
// int newId = 0;
|
||||
//
|
||||
// newId = sysWorkflowRecord.getId() ;
|
||||
// if (count > 0) {
|
||||
// createWorkOrderAndPeople(sysUser, event, Long.valueOf(sysWorkflowRecord.getTaskId()), newId);
|
||||
// }
|
||||
// 如果该任务类型配置了多个审批流,则根据任务信息判断使用
|
||||
if (event.getTaskType() == TmTaskTypeEnum.TM_TASK_DIRECT.getTaskTypeId()) {
|
||||
// 直转审批任务,则根据转出和转入的部门判断,同一部门使用无需接收审批流,不同部门则使用需要接收审批流
|
||||
|
|
@ -139,7 +153,78 @@ public class ApplyEventListener {
|
|||
sysWorkflowRecordHistory.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString());
|
||||
sysWorkflowRecordHistory.setCreateTime(DateUtils.getNowDate());
|
||||
sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(sysWorkflowRecordHistory);
|
||||
|
||||
if (count > 0) {
|
||||
createWorkOrderAndPeople(sysUser, event, Long.valueOf(sysWorkflowRecord.getTaskId()), newId,sysWorkflowRecordHistory.getNodeId());
|
||||
}
|
||||
return newId;
|
||||
}
|
||||
|
||||
private void createWorkOrderAndPeople(SysUser sysUser, InsertWorkflowEvent event, Long taskId, int newId,int nodeId) {
|
||||
//获取工程名称
|
||||
int projectId = directAuditMapper.getProjectIdById(event.getLeaseAgreementId());
|
||||
String projectName = directAuditMapper.getProjectNameById(projectId);
|
||||
String id = UUID.randomUUID().toString().replace("-", "");
|
||||
String webUrlBase = "/mea-h5/#/pages/businessAudit/directAudit/details";
|
||||
String queryParams = UriComponentsBuilder.newInstance()
|
||||
.queryParam("appId", "9fa73f046ef520b09e94bbffc3b07702")
|
||||
.queryParam("taskId", taskId)
|
||||
.queryParam("id", newId)
|
||||
.queryParam("nodeId", nodeId)
|
||||
.build().encode().toUriString();
|
||||
|
||||
WorkApplyInfo workApplyInfo = new WorkApplyInfo();
|
||||
workApplyInfo.setId(id);
|
||||
workApplyInfo.setTitle("智能机具-直转申请待审核");
|
||||
workApplyInfo.setCreateUserName(sysUser.getUserName());
|
||||
workApplyInfo.setContent(sysUser.getNickName() + ":" + event.getTaskCode() + "-" + projectName);
|
||||
workApplyInfo.setType(1);
|
||||
workApplyInfo.setWebAppId("9fa73f046ef520b09e94bbffc3b07702");
|
||||
workApplyInfo.setSendUserName(sysUser.getUserName());
|
||||
workApplyInfo.setTypeId(2025050901);
|
||||
workApplyInfo.setBusinessId(String.valueOf(newId));
|
||||
workApplyInfo.setNextStatus("待审核");
|
||||
workApplyInfo.setFlowState(null);
|
||||
workApplyInfo.setWebUrl(webUrlBase + queryParams);
|
||||
workApplyInfo.setRout(webUrlBase + queryParams);
|
||||
|
||||
int countWork = directAuditMapper.insertWorkOrder(workApplyInfo);
|
||||
if (countWork > 0) {
|
||||
|
||||
//查询审批人集合
|
||||
WorkPeopleInfo info = new WorkPeopleInfo();
|
||||
info.setFlowId(newId);
|
||||
|
||||
List<WorkPeopleInfo> workPeopleInfoList = directAuditMapper.selectWorkPeopleInfoList(info.getFlowId());
|
||||
// 过滤掉nextNodeId为null的数据
|
||||
if (workPeopleInfoList != null) {
|
||||
workPeopleInfoList = workPeopleInfoList.stream()
|
||||
.filter(person -> person.getNextNodeId() != null) // 过滤条件:nextNodeId不为null
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
if(workPeopleInfoList != null && workPeopleInfoList.size() > 0){
|
||||
WorkPeopleInfo person = workPeopleInfoList.get(0);
|
||||
String roleIds = person.getRoleIds();
|
||||
String[] roleIdArray = roleIds.split(",");
|
||||
long deptId = sysUser.getDeptId();
|
||||
//根据角色和部门查询用户集合
|
||||
WorkPeopleInfo param = new WorkPeopleInfo();
|
||||
param.setRoleIdArray(roleIdArray);
|
||||
param.setDeptId(deptId);
|
||||
List<WorkPeopleInfo> userList = directAuditMapper.selectUserListByRoleAndDept(param);
|
||||
for (WorkPeopleInfo user : userList) {
|
||||
WorkPeopleInfo workPeopleInfo = new WorkPeopleInfo();
|
||||
workPeopleInfo.setId(UUID.randomUUID().toString().replace("-", ""));
|
||||
workPeopleInfo.setInformationId(id);
|
||||
workPeopleInfo.setReceiverUsername(user.getReceiverUsername());
|
||||
workPeopleInfo.setReadState(0);
|
||||
workPeopleInfo.setHandleState(0);
|
||||
workPeopleInfo.setIsExamine(0);
|
||||
directAuditMapper.insertWorkPeople(workPeopleInfo);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,11 +8,15 @@ public class InsertWorkflowEvent {
|
|||
private final int taskId;
|
||||
private final int taskType;
|
||||
private final String taskCode;
|
||||
private final int leaseAgreementId;
|
||||
private final String leaseMan;
|
||||
|
||||
public InsertWorkflowEvent(int taskId, String taskCode, int taskType) {
|
||||
public InsertWorkflowEvent(int taskId, String taskCode, int taskType,int leaseAgreementId, String leaseMan) {
|
||||
this.taskId = taskId;
|
||||
this.taskCode = taskCode;
|
||||
this.taskType = taskType;
|
||||
this.leaseAgreementId = leaseAgreementId;
|
||||
this.leaseMan = leaseMan;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -201,4 +201,7 @@ public class DirectApplyInfo extends BaseEntity {
|
|||
|
||||
@ApiModelProperty(value = "结束时间")
|
||||
private String endTime;
|
||||
|
||||
@ApiModelProperty(value = "任务状态列表")
|
||||
private List<Integer> statusList;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -126,13 +126,15 @@ public class DirectRotationImpl implements DirectRotationService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
// @Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
public AjaxResult submit(DirectApplyInfoDetails directApplyInfoDetails) throws SQLException {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
System.out.println("连接池是否 auto-commit: " + connection.getAutoCommit());
|
||||
}
|
||||
int id;
|
||||
String code;
|
||||
String leaseMan;
|
||||
int leaseAgreementId;
|
||||
if (directApplyInfoDetails != null) {
|
||||
if (directApplyInfoDetails.getDirectApplyInfo() != null) {
|
||||
DirectApplyInfo directApplyInfos = directApplyInfoDetails.getDirectApplyInfo();
|
||||
|
|
@ -152,6 +154,8 @@ public class DirectRotationImpl implements DirectRotationService {
|
|||
directApplyInfos.setDirUrl(String.join(",", urls));
|
||||
}
|
||||
directApplyInfos.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString());
|
||||
leaseMan = directApplyInfos.getLeaseMan();
|
||||
leaseAgreementId = directApplyInfos.getLeaseAgreementId();
|
||||
int i = workSiteDirectManageService.saveDirectApplyInfo(directApplyInfos);
|
||||
if (i < 0) {
|
||||
return AjaxResult.error("保存失败");
|
||||
|
|
@ -178,13 +182,13 @@ public class DirectRotationImpl implements DirectRotationService {
|
|||
// 执行审批流方法🚀
|
||||
//sysWorkflowRecordService.addSysWorkflowRecord(id, code, TM_TASK_DIRECT.getTaskTypeId());
|
||||
// 注册一个在事务提交之后触发事件发布的回调,防止事物未提交时查询数据库数据为空
|
||||
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
|
||||
@Override
|
||||
public void afterCommit() {
|
||||
// TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
|
||||
// @Override
|
||||
// public void afterCommit() {
|
||||
// 发布审批流程事件
|
||||
applicationEventPublisher.publishEvent(new InsertWorkflowEvent(id, code, TM_TASK_DIRECT.getTaskTypeId()));
|
||||
}
|
||||
});
|
||||
applicationEventPublisher.publishEvent(new InsertWorkflowEvent(id, code, TM_TASK_DIRECT.getTaskTypeId(),leaseAgreementId,leaseMan));
|
||||
// }
|
||||
// });
|
||||
|
||||
//initAuditDir(id,code);
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,24 @@ public class SysWorkflowRecordHisController extends BaseController {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审批
|
||||
*/
|
||||
@ApiOperation(value = "直转审批")
|
||||
@PostMapping("/directUpdate")
|
||||
@PreventRepeatSubmit
|
||||
public AjaxResult directUpdate(@RequestBody SysWorkflowRecordHistory sysWorkflowRecordHistory)
|
||||
{
|
||||
try {
|
||||
sysWorkflowRecordHistoryService.updateDirectSysWorkflowRecordHistory(sysWorkflowRecordHistory);
|
||||
return new AjaxResult(200,"修改成功!");
|
||||
}catch (Exception e){
|
||||
logger.error("修改失败{}", e.getMessage(), e);
|
||||
System.err.println("修改失败" + e.getMessage());
|
||||
return error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审批
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package com.bonus.material.work.mapper;
|
|||
|
||||
|
||||
import com.bonus.common.biz.domain.lease.LeaseApplyInfo;
|
||||
import com.bonus.common.biz.domain.lease.WorkApplyInfo;
|
||||
import com.bonus.common.biz.domain.lease.WorkPeopleInfo;
|
||||
import com.bonus.material.lease.domain.LeaseApplyDetails;
|
||||
import com.bonus.material.ma.domain.DirectApplyInfo;
|
||||
import com.bonus.material.ma.domain.Type;
|
||||
|
|
@ -30,4 +32,16 @@ public interface DirectAuditMapper {
|
|||
void updateDirectAudit(DirectApplyInfo directApplyInfo);
|
||||
|
||||
int getImpUnit(@Param("proId") String backProId);
|
||||
|
||||
int getProjectIdById(int leaseAgreementId);
|
||||
|
||||
String getProjectNameById(int projectId);
|
||||
|
||||
int insertWorkOrder(WorkApplyInfo workApplyInfo);
|
||||
|
||||
List<WorkPeopleInfo> selectWorkPeopleInfoList(int flowId);
|
||||
|
||||
List<WorkPeopleInfo> selectUserListByRoleAndDept(WorkPeopleInfo param);
|
||||
|
||||
void insertWorkPeople(WorkPeopleInfo workPeopleInfo);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,4 +31,6 @@ public interface SysWorkflowRecordMapper {
|
|||
List<SysWorkflowRecordHistory> getAuditUserByRecordId(@Param("recordId") Integer recordId);
|
||||
|
||||
int updateSysWorkflowType(SysWorkflowRecord sysWorkflowRecord);
|
||||
|
||||
int selectLeaseAgreementIdByRecordId(Integer taskId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,4 +9,6 @@ public interface SysWorkflowRecordHistoryService {
|
|||
int updateSysWorkflowRecordHistory(SysWorkflowRecordHistory sysWorkflowRecordHistory);
|
||||
|
||||
SysWorkflowRecordHistory getAuditStatus(SysWorkflowRecordHistory sysWorkflowRecordHistory);
|
||||
|
||||
int updateDirectSysWorkflowRecordHistory(SysWorkflowRecordHistory sysWorkflowRecordHistory);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -242,7 +242,7 @@ public class SysWorkflowNodeServiceImpl implements SysWorkflowNodeService {
|
|||
String[] roleIdArray = roleIds.split(",");
|
||||
for (String forRoleId : roleIdArray) {
|
||||
List<SysUserRoleVo> userList = bmUserRoleMapper.getUserRoleListByDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId(), Long.valueOf(forRoleId));
|
||||
if(forSysWorkflowNode.getNodeName().contains("接收方")){
|
||||
if(forSysWorkflowNode.getNodeName().contains("接收")){
|
||||
int proIdLease = sysWorkflowConfigMapper.getImpUnit(directApplyInfo.getLeaseProId());
|
||||
// 使用 Iterator 迭代器遍历,支持安全删除元素
|
||||
Iterator<SysUserRoleVo> iterator = userList.iterator();
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import com.bonus.common.security.utils.SecurityUtils;
|
|||
import com.bonus.material.back.domain.BackApplyDetails;
|
||||
import com.bonus.material.back.domain.BackApplyInfo;
|
||||
import com.bonus.material.back.mapper.BackApplyInfoMapper;
|
||||
import com.bonus.material.event.InsertWorkflowEvent;
|
||||
import com.bonus.material.lease.domain.LeaseApplyDetails;
|
||||
import com.bonus.material.lease.mapper.LeaseApplyDetailsMapper;
|
||||
import com.bonus.material.lease.mapper.LeaseApplyInfoMapper;
|
||||
|
|
@ -150,6 +151,51 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 直转审批
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int updateDirectSysWorkflowRecordHistory(@NotNull(message = "审批方法参数不能为空") SysWorkflowRecordHistory sysWorkflowRecordHistory) {
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
|
||||
Long userId = sysUser.getUserId();
|
||||
Integer recordId = sysWorkflowRecordHistory.getRecordId();
|
||||
|
||||
|
||||
|
||||
//String flag = checkAuditUser(recordId,sysUser);
|
||||
String flag = "0";
|
||||
if("0".equals( flag)){
|
||||
Integer taskId = sysWorkflowRecordHistory.getTaskId();
|
||||
String recordCode = sysWorkflowRecordHistory.getTaskCode();
|
||||
Integer nextNodeId = sysWorkflowRecordHistory.getNextNodeId();
|
||||
Integer nodeId = sysWorkflowRecordHistory.getNodeId();
|
||||
sysWorkflowRecordHistory.setCreateBy(userId.toString());
|
||||
sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(sysWorkflowRecordHistory);
|
||||
|
||||
if (sysWorkflowRecordHistory.getIsAccept() == null) {
|
||||
throw new ServiceException("请选择是否接受审批");
|
||||
}
|
||||
|
||||
// 查询出【当前任务所属审批流】的所有节点
|
||||
List<SysWorkflowNode> sysWorkflowNodeList = getWorkflowNodes(sysWorkflowRecordHistory);
|
||||
if (sysWorkflowRecordHistory.getIsAccept() == 1) {
|
||||
// 处理审批通过✅
|
||||
handleDirectApproval(sysWorkflowNodeList, sysWorkflowRecordHistory, sysUser, taskId, recordCode, recordId,nextNodeId,nodeId);
|
||||
} else {
|
||||
// 处理审核驳回❌
|
||||
handleRejection(sysWorkflowNodeList, sysWorkflowRecordHistory);
|
||||
}
|
||||
}else{
|
||||
throw new ServiceException("当前账号没有审批权限!");
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private String checkAuditUser(Integer recordId, SysUser sysUser) {
|
||||
|
||||
String flag = "0";
|
||||
|
|
@ -302,6 +348,97 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// 直转审批通过的方法 更新任务和审批流以及工单信息
|
||||
private void handleDirectApproval(List<SysWorkflowNode> sysWorkflowNodeList, SysWorkflowRecordHistory sysWorkflowRecordHistory,
|
||||
SysUser sysUser, Integer taskId, String recordCode, Integer recordId, Integer nextNodeId, Integer nodeId) {
|
||||
boolean found = false;
|
||||
|
||||
for (SysWorkflowNode sysWorkflowNode : sysWorkflowNodeList) {
|
||||
// 判断列表中哪个节点是当前审批的节点,如果不是审批的节点不处理
|
||||
if (sysWorkflowRecordHistory.getNodeId().equals(sysWorkflowNode.getId())) {
|
||||
log.info("-------------进入到了当前审批的节点-------------");
|
||||
// 根据传入的节点信息,去判断配置的是角色or用户 自动处理
|
||||
sysWorkflowNodeService.copeNodeConfigPersonValuesByNode(sysWorkflowNode);
|
||||
|
||||
// 增加节点code编码判断,是否有节点审批限制
|
||||
if (StringUtils.isNotBlank(sysWorkflowNode.getNodeRestrictCode())) {
|
||||
log.info("-------------当前节点有审批限制,进行限制🚫-------------");
|
||||
switch (sysWorkflowNode.getNodeRestrictCode()) {
|
||||
case "unit":
|
||||
// 限制同一unit单位
|
||||
// 根据任务类型 + 任务ID + 节点ID 去查询满足限制的用户,然后更新configValues值
|
||||
if (Objects.equals(sysWorkflowRecordHistory.getTaskTypeId(), TmTaskTypeEnum.TM_TASK_DIRECT.getTaskTypeId())) {
|
||||
// 直转任务, 根据任务ID去查询当前任务的接收项目部有哪些人员
|
||||
String thisUnitUserIds = sysWorkflowConfigMapper.selectUnitConfigValuesByTaskId(sysWorkflowRecordHistory.getTaskId());
|
||||
String filterConfigValuesResult = filterStringByReference(sysWorkflowNode.getConfigValues(), thisUnitUserIds);
|
||||
if (StringUtils.isBlank(filterConfigValuesResult)) {
|
||||
throw new ServiceException("您不满足当前节点的审批限制🚫,无法进行此操作!!");
|
||||
}
|
||||
sysWorkflowNode.setConfigValues(filterConfigValuesResult);
|
||||
} else {
|
||||
System.err.println("非直转任务限制同一单位,系统暂不支持!!!" + sysWorkflowRecordHistory.getTypeId());
|
||||
throw new ServiceException("非直转任务限制同一单位,系统暂不支持此配置,请联系管理员");
|
||||
}
|
||||
break;
|
||||
case "project":
|
||||
// 限制工程,暂无相关需求,暂定
|
||||
break;
|
||||
case "org":
|
||||
// 限制分公司,暂无相关需求,暂定
|
||||
break;
|
||||
default:
|
||||
throw new ServiceException("当前节点有审批限制code,却是非法字符,请联系管理员!");
|
||||
}
|
||||
}
|
||||
|
||||
// 判断当前用户是否是当前节点的配置用户
|
||||
if (sysWorkflowNode.getConfigValues().contains(sysUser.getUserId().toString())) {
|
||||
log.info("-------------✅通过校验,当前用户是该节点审批人员,进行更新任务信息-------------");
|
||||
// 根据任务ID 更新审批流状态
|
||||
updateWorkflowStatus(taskId, 1);
|
||||
// 根据任务ID 更新任务状态
|
||||
updateTmTask(taskId.longValue(), LeaseTaskStatusEnum.LEASE_AUDIT_ING.getStatus());
|
||||
found = true;
|
||||
break;
|
||||
} else {
|
||||
throw new ServiceException("您不是当前节点配置的审批人员,无法进行操作!!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果前面更新失败 -> 方法停止 -> 不进行下一步操作,否则继续
|
||||
if (!found) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
log.info("-------------节点更新工单信息✔-------------");
|
||||
// 修改工单信息
|
||||
updateWorkOrder(recordId, sysUser.getUserName());
|
||||
|
||||
// 如果下个节点⬇存在的话,那么就创建下个节点⬇的工单信息
|
||||
if (nextNodeId != null) {
|
||||
//获取leaseAgreementId
|
||||
int leaseAgreementId = sysWorkflowRecordMapper.selectLeaseAgreementIdByRecordId(taskId);
|
||||
createWorkOrderAndPeopleDirect(sysUser,leaseAgreementId, taskId, recordCode, recordId, nodeId);
|
||||
}
|
||||
log.info("-------------节点更新工单信息结束-------------");
|
||||
} catch (Exception e) {
|
||||
System.err.println("更新工单信息失败:" + e.getMessage());
|
||||
log.error("更新工单信息失败: {}", e.getMessage(), e);
|
||||
}
|
||||
|
||||
|
||||
Optional<SysWorkflowNode> maxNodeOptional = sysWorkflowNodeList.stream()
|
||||
.max(Comparator.comparingInt(SysWorkflowNode::getNodeSort));
|
||||
SysWorkflowNode endNodeInfo = maxNodeOptional.orElse(new SysWorkflowNode());
|
||||
|
||||
if (endNodeInfo.getId().equals(sysWorkflowRecordHistory.getNodeId()) && "2".equals(endNodeInfo.getNodeLabel())) {
|
||||
checkFinalNodeDirectApproval(sysWorkflowRecordHistory, sysWorkflowNodeList);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkFinalNodeApproval(SysWorkflowRecordHistory sysWorkflowRecordHistory, List<SysWorkflowNode> sysWorkflowNodeList) {
|
||||
List<SysWorkflowRecordHistory> historyList = sysWorkflowRecordHistoryMapper.seleteSysWorkflowRecordHistory(sysWorkflowRecordHistory);
|
||||
String configValueNew = sysWorkflowConfigMapper.selectConfigValueByNodeId(sysWorkflowRecordHistory.getNodeId());
|
||||
|
|
@ -333,6 +470,25 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis
|
|||
}
|
||||
}
|
||||
|
||||
private void checkFinalNodeDirectApproval(SysWorkflowRecordHistory sysWorkflowRecordHistory, List<SysWorkflowNode> sysWorkflowNodeList) {
|
||||
// List<SysWorkflowRecordHistory> historyList = sysWorkflowRecordHistoryMapper.seleteSysWorkflowRecordHistory(sysWorkflowRecordHistory);
|
||||
// SysWorkflowNode lastNode = sysWorkflowNodeList.get(sysWorkflowNodeList.size() - 1);
|
||||
|
||||
|
||||
|
||||
|
||||
updateWorkflowStatus(sysWorkflowRecordHistory.getTaskId(), 2);
|
||||
log.info("-------------节点更新任务信息为完成-------------");
|
||||
|
||||
SysWorkflowAuditDto dto = sysWorkflowRecordMapper.getSysWorkflowRecodeByTaskIdAndType(sysWorkflowRecordHistory.getTaskId(), null, sysWorkflowRecordHistory.getTypeId());
|
||||
if (dto == null) {
|
||||
throw new ServiceException("任务类型为空");
|
||||
}
|
||||
|
||||
handleBusinessLogic(dto.getTaskType(), sysWorkflowRecordHistory.getTaskId());
|
||||
}
|
||||
|
||||
|
||||
private void handleBusinessLogic(int taskType, Integer taskId) {
|
||||
switch (taskType) {
|
||||
case 19:
|
||||
|
|
@ -558,6 +714,73 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis
|
|||
}
|
||||
}
|
||||
|
||||
private void createWorkOrderAndPeopleDirect(SysUser sysUser, int leaseAgreementId, int taskId,String taskCode, int newId,int nodeId) {
|
||||
//获取工程名称
|
||||
int projectId = directAuditMapper.getProjectIdById(leaseAgreementId);
|
||||
String projectName = directAuditMapper.getProjectNameById(projectId);
|
||||
String id = UUID.randomUUID().toString().replace("-", "");
|
||||
String webUrlBase = "/mea-h5/#/pages/businessAudit/directAudit/details";
|
||||
String queryParams = UriComponentsBuilder.newInstance()
|
||||
.queryParam("appId", "9fa73f046ef520b09e94bbffc3b07702")
|
||||
.queryParam("taskId", taskId)
|
||||
.queryParam("id", newId)
|
||||
.queryParam("nodeId", nodeId)
|
||||
.build().encode().toUriString();
|
||||
|
||||
WorkApplyInfo workApplyInfo = new WorkApplyInfo();
|
||||
workApplyInfo.setId(id);
|
||||
workApplyInfo.setTitle("智能机具-直转申请待审核");
|
||||
workApplyInfo.setCreateUserName(sysUser.getUserName());
|
||||
workApplyInfo.setContent(sysUser.getNickName() + ":" + taskCode + "-" + projectName);
|
||||
workApplyInfo.setType(1);
|
||||
workApplyInfo.setWebAppId("9fa73f046ef520b09e94bbffc3b07702");
|
||||
workApplyInfo.setSendUserName(sysUser.getUserName());
|
||||
workApplyInfo.setTypeId(2025050901);
|
||||
workApplyInfo.setBusinessId(String.valueOf(newId));
|
||||
workApplyInfo.setNextStatus("待审核");
|
||||
workApplyInfo.setFlowState(null);
|
||||
workApplyInfo.setWebUrl(webUrlBase + queryParams);
|
||||
workApplyInfo.setRout(webUrlBase + queryParams);
|
||||
|
||||
int countWork = directAuditMapper.insertWorkOrder(workApplyInfo);
|
||||
if (countWork > 0) {
|
||||
|
||||
//查询审批人集合
|
||||
WorkPeopleInfo info = new WorkPeopleInfo();
|
||||
info.setFlowId(newId);
|
||||
|
||||
List<WorkPeopleInfo> workPeopleInfoList = directAuditMapper.selectWorkPeopleInfoList(info.getFlowId());
|
||||
// 过滤掉nextNodeId为null的数据
|
||||
if (workPeopleInfoList != null) {
|
||||
workPeopleInfoList = workPeopleInfoList.stream()
|
||||
.filter(person -> person.getNextNodeId() != null) // 过滤条件:nextNodeId不为null
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
if(workPeopleInfoList != null && workPeopleInfoList.size() > 0){
|
||||
WorkPeopleInfo person = workPeopleInfoList.get(0);
|
||||
String roleIds = person.getRoleIds();
|
||||
String[] roleIdArray = roleIds.split(",");
|
||||
long deptId = sysUser.getDeptId();
|
||||
//根据角色和部门查询用户集合
|
||||
WorkPeopleInfo param = new WorkPeopleInfo();
|
||||
param.setRoleIdArray(roleIdArray);
|
||||
param.setDeptId(deptId);
|
||||
List<WorkPeopleInfo> userList = directAuditMapper.selectUserListByRoleAndDept(param);
|
||||
for (WorkPeopleInfo user : userList) {
|
||||
WorkPeopleInfo workPeopleInfo = new WorkPeopleInfo();
|
||||
workPeopleInfo.setId(UUID.randomUUID().toString().replace("-", ""));
|
||||
workPeopleInfo.setInformationId(id);
|
||||
workPeopleInfo.setReceiverUsername(user.getReceiverUsername());
|
||||
workPeopleInfo.setReadState(0);
|
||||
workPeopleInfo.setHandleState(0);
|
||||
workPeopleInfo.setIsExamine(0);
|
||||
directAuditMapper.insertWorkPeople(workPeopleInfo);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 插入(领料出库详情表) lease_out_details表数据
|
||||
* @param sltAgreementInfo
|
||||
|
|
|
|||
|
|
@ -3,6 +3,12 @@
|
|||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.bonus.material.work.mapper.DirectAuditMapper">
|
||||
|
||||
<resultMap type="com.bonus.common.biz.domain.lease.WorkPeopleInfo" id="WorkPeopleInfoResult">
|
||||
<result property="id" column="id"/>
|
||||
<result property="nextNodeId" column="next_node_id"/>
|
||||
<result property="roleIds" column="roleIds"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="getList" resultType="com.bonus.material.ma.domain.DirectApplyInfo">
|
||||
SELECT
|
||||
dai.Id,
|
||||
|
|
@ -57,6 +63,12 @@
|
|||
<if test="status != null and status != ''">
|
||||
and swr.workflow_status = #{status}
|
||||
</if>
|
||||
<if test="statusList != null and statusList.size() > 0">
|
||||
and swr.workflow_status in
|
||||
<foreach item="item" collection="statusList" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="isApp != null and taskStatus==0">and dai.status = 0 </if>
|
||||
<if test="isApp != null and taskStatus==1">and (dai.status = 1 or dai.status = 2)</if>
|
||||
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
|
||||
|
|
@ -87,6 +99,7 @@
|
|||
LEFT JOIN sys_workflow_node wn2 on wc.node_id = wn2.id
|
||||
WHERE wh.record_id = #{flowId}
|
||||
</select>
|
||||
|
||||
<select id="getImpUnit" resultType="java.lang.Integer">
|
||||
select
|
||||
imp_unit as impUnit
|
||||
|
|
@ -96,10 +109,125 @@
|
|||
pro_id = #{proId}
|
||||
</select>
|
||||
|
||||
<select id="getProjectIdById" resultType="java.lang.Integer">
|
||||
select
|
||||
project_id as projectId
|
||||
from
|
||||
bm_agreement_info
|
||||
where
|
||||
agreement_Id = #{leaseAgreementId}
|
||||
</select>
|
||||
<select id="getProjectNameById" resultType="java.lang.String">
|
||||
select
|
||||
pro_name as projectName
|
||||
from
|
||||
bm_project
|
||||
where
|
||||
pro_id = #{projectId}
|
||||
</select>
|
||||
|
||||
<select id="selectWorkPeopleInfoList" resultType="com.bonus.common.biz.domain.lease.WorkPeopleInfo">
|
||||
SELECT
|
||||
wh.id as id,
|
||||
wh.next_node_id as nextNodeId,
|
||||
wc.roleIds as roleIds
|
||||
FROM
|
||||
sys_workflow_record_history wh
|
||||
LEFT JOIN sys_workflow_config wc on wh.next_node_id = wc.node_id
|
||||
WHERE wh.record_id = #{flowId}
|
||||
ORDER BY wh.id desc
|
||||
</select>
|
||||
|
||||
<select id="selectUserListByRoleAndDept" resultType="com.bonus.common.biz.domain.lease.WorkPeopleInfo">
|
||||
SELECT
|
||||
su.user_id,
|
||||
su.user_name as receiverUsername
|
||||
FROM
|
||||
sys_user su
|
||||
LEFT JOIN sys_user_role sr on su.user_id = sr.user_id
|
||||
WHERE
|
||||
sr.role_id IN
|
||||
<foreach item="item" index="index" collection="roleIdArray" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
|
||||
<!-- <if test="deptId != 0">-->
|
||||
<!-- and su.dept_id =#{deptId}-->
|
||||
<!-- </if>-->
|
||||
|
||||
</select>
|
||||
|
||||
<update id="updateWorkflowRecord">
|
||||
update sys_workflow_record set workflow_status = #{flowStatus} where id = #{id}
|
||||
</update>
|
||||
<update id="updateDirectAudit">
|
||||
update direct_apply_info set status = #{status} where id = #{id}
|
||||
</update>
|
||||
|
||||
<insert id="insertWorkOrder" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into uni_org.sys_information
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">id,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="createUserName != null">create_user_name,</if>
|
||||
<if test="title != null">title,</if>
|
||||
<if test="content != null">content,</if>
|
||||
<if test="webAppId != null">web_app_id,</if>
|
||||
<if test="type != null">type,</if>
|
||||
<if test="extend != null">extend,</if>
|
||||
<if test="sendUserName != null">send_user_name,</if>
|
||||
<if test="webUrl != null">web_url,</if>
|
||||
<if test="typeId != null">type_id,</if>
|
||||
<if test="businessId != null">business_id,</if>
|
||||
<if test="flowState != null">flow_state,</if>
|
||||
<if test="rout != null">rout,</if>
|
||||
<if test="nextStatus != null">next_status,</if>
|
||||
<if test="extendName != null">extend_name,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">#{id},</if>
|
||||
<if test="createTime != null">now(),</if>
|
||||
<if test="createUserName != null">#{createUserName},</if>
|
||||
<if test="title != null">#{title},</if>
|
||||
<if test="content != null">#{content},</if>
|
||||
<if test="webAppId != null">#{webAppId},</if>
|
||||
<if test="type != null">#{type},</if>
|
||||
<if test="extend != null">#{extend},</if>
|
||||
<if test="sendUserName != null">#{sendUserName},</if>
|
||||
<if test="webUrl != null">#{webUrl},</if>
|
||||
<if test="typeId != null">#{typeId},</if>
|
||||
<if test="businessId != null">#{businessId},</if>
|
||||
<if test="flowState != null">#{flowState},</if>
|
||||
<if test="rout != null">#{rout},</if>
|
||||
<if test="nextStatus != null">#{nextStatus},</if>
|
||||
<if test="extendName != null">#{extendName},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<insert id="insertWorkPeople">
|
||||
insert into uni_org.sys_information_people
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">id,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="informationId != null">information_id,</if>
|
||||
<if test="readState != null">read_state,</if>
|
||||
<if test="handleState != null">handle_state,</if>
|
||||
<if test="receiverUsername != null">receiver_username,</if>
|
||||
<if test="updateUser != null">update_user,</if>
|
||||
<if test="isExamine != null">is_examine,</if>
|
||||
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">#{id},</if>
|
||||
<if test="createTime != null">now(),</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="informationId != null">#{informationId},</if>
|
||||
<if test="readState != null">#{readState},</if>
|
||||
<if test="handleState != null">#{handleState},</if>
|
||||
<if test="receiverUsername != null">#{receiverUsername},</if>
|
||||
<if test="updateUser != null">#{updateUser},</if>
|
||||
<if test="isExamine != null">#{isExamine},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
</mapper>
|
||||
|
|
|
|||
|
|
@ -111,4 +111,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
and sp.is_examine = 0
|
||||
|
||||
</select>
|
||||
<select id="selectLeaseAgreementIdByRecordId" resultType="java.lang.Integer">
|
||||
select
|
||||
dai.lease_agreement_id as leaseAgreementId
|
||||
from
|
||||
direct_apply_info dai
|
||||
WHERE id= #{taskId}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
Loading…
Reference in New Issue