直转审核流程

This commit is contained in:
hongchao 2025-09-02 22:50:48 +08:00
parent 082330c4a2
commit f08ce31bd0
13 changed files with 509 additions and 19 deletions

View File

@ -61,5 +61,5 @@ public class WorkPeopleInfo implements Serializable {
@ApiModelProperty(value = "角色数组")
private String[] roleIdArray;
private int nextNodeId;
private Integer nextNodeId;
}

View File

@ -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);
}
}
}
}
}

View File

@ -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;
}
}

View File

@ -201,4 +201,7 @@ public class DirectApplyInfo extends BaseEntity {
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "任务状态列表")
private List<Integer> statusList;
}

View File

@ -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);

View File

@ -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());
}
}
/**
* 审批
*/

View File

@ -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);
}

View File

@ -31,4 +31,6 @@ public interface SysWorkflowRecordMapper {
List<SysWorkflowRecordHistory> getAuditUserByRecordId(@Param("recordId") Integer recordId);
int updateSysWorkflowType(SysWorkflowRecord sysWorkflowRecord);
int selectLeaseAgreementIdByRecordId(Integer taskId);
}

View File

@ -9,4 +9,6 @@ public interface SysWorkflowRecordHistoryService {
int updateSysWorkflowRecordHistory(SysWorkflowRecordHistory sysWorkflowRecordHistory);
SysWorkflowRecordHistory getAuditStatus(SysWorkflowRecordHistory sysWorkflowRecordHistory);
int updateDirectSysWorkflowRecordHistory(SysWorkflowRecordHistory sysWorkflowRecordHistory);
}

View File

@ -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();

View File

@ -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

View File

@ -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>

View File

@ -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>