diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/lease/WorkPeopleInfo.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/lease/WorkPeopleInfo.java index 3b027ee1..97a6e3ea 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/lease/WorkPeopleInfo.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/lease/WorkPeopleInfo.java @@ -61,5 +61,5 @@ public class WorkPeopleInfo implements Serializable { @ApiModelProperty(value = "角色数组") private String[] roleIdArray; - private int nextNodeId; + private Integer nextNodeId; } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/ApplyEventListener.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/ApplyEventListener.java index 478f5d7b..8aa471a4 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/ApplyEventListener.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/ApplyEventListener.java @@ -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 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 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); + } + + } + } + } + } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/InsertWorkflowEvent.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/InsertWorkflowEvent.java index a7b1f9d0..ddf46b35 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/InsertWorkflowEvent.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/event/InsertWorkflowEvent.java @@ -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; } } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/domain/DirectApplyInfo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/domain/DirectApplyInfo.java index e094ab0b..ad2e3c2d 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/domain/DirectApplyInfo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/domain/DirectApplyInfo.java @@ -201,4 +201,7 @@ public class DirectApplyInfo extends BaseEntity { @ApiModelProperty(value = "结束时间") private String endTime; + + @ApiModelProperty(value = "任务状态列表") + private List statusList; } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/service/impl/DirectRotationImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/service/impl/DirectRotationImpl.java index 5d2cf44b..177f724b 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/service/impl/DirectRotationImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/ma/service/impl/DirectRotationImpl.java @@ -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); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/controller/SysWorkflowRecordHisController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/controller/SysWorkflowRecordHisController.java index 14e5409e..deb25d57 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/controller/SysWorkflowRecordHisController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/controller/SysWorkflowRecordHisController.java @@ -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()); + } + } + /** * 审批 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java index 3a1cd844..a5bf4dde 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/DirectAuditMapper.java @@ -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 selectWorkPeopleInfoList(int flowId); + + List selectUserListByRoleAndDept(WorkPeopleInfo param); + + void insertWorkPeople(WorkPeopleInfo workPeopleInfo); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java index d43daee2..0c3ef542 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/mapper/SysWorkflowRecordMapper.java @@ -31,4 +31,6 @@ public interface SysWorkflowRecordMapper { List getAuditUserByRecordId(@Param("recordId") Integer recordId); int updateSysWorkflowType(SysWorkflowRecord sysWorkflowRecord); + + int selectLeaseAgreementIdByRecordId(Integer taskId); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/SysWorkflowRecordHistoryService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/SysWorkflowRecordHistoryService.java index b8b11e92..5417dd94 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/SysWorkflowRecordHistoryService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/SysWorkflowRecordHistoryService.java @@ -9,4 +9,6 @@ public interface SysWorkflowRecordHistoryService { int updateSysWorkflowRecordHistory(SysWorkflowRecordHistory sysWorkflowRecordHistory); SysWorkflowRecordHistory getAuditStatus(SysWorkflowRecordHistory sysWorkflowRecordHistory); + + int updateDirectSysWorkflowRecordHistory(SysWorkflowRecordHistory sysWorkflowRecordHistory); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowNodeServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowNodeServiceImpl.java index e2b5001c..1e8c3e56 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowNodeServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowNodeServiceImpl.java @@ -242,7 +242,7 @@ public class SysWorkflowNodeServiceImpl implements SysWorkflowNodeService { String[] roleIdArray = roleIds.split(","); for (String forRoleId : roleIdArray) { List 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 iterator = userList.iterator(); diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowRecordHistoryServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowRecordHistoryServiceImpl.java index b8be4937..d8b4c926 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowRecordHistoryServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/work/service/impl/SysWorkflowRecordHistoryServiceImpl.java @@ -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 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 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 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 sysWorkflowNodeList) { List 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 sysWorkflowNodeList) { +// List 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 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 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 diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/DirectAuditMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/DirectAuditMapper.xml index bedab9c3..1a1420be 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/DirectAuditMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/DirectAuditMapper.xml @@ -3,6 +3,12 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + + + + + + + update sys_workflow_record set workflow_status = #{flowStatus} where id = #{id} update direct_apply_info set status = #{status} where id = #{id} + + + insert into uni_org.sys_information + + id, + create_time, + create_user_name, + title, + content, + web_app_id, + type, + extend, + send_user_name, + web_url, + type_id, + business_id, + flow_state, + rout, + next_status, + extend_name, + + + #{id}, + now(), + #{createUserName}, + #{title}, + #{content}, + #{webAppId}, + #{type}, + #{extend}, + #{sendUserName}, + #{webUrl}, + #{typeId}, + #{businessId}, + #{flowState}, + #{rout}, + #{nextStatus}, + #{extendName}, + + + + + insert into uni_org.sys_information_people + + id, + create_time, + update_time, + information_id, + read_state, + handle_state, + receiver_username, + update_user, + is_examine, + + + + #{id}, + now(), + #{updateTime}, + #{informationId}, + #{readState}, + #{handleState}, + #{receiverUsername}, + #{updateUser}, + #{isExamine}, + + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml index abbad509..a1d23452 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/work/SysWorkflowRecordMapper.xml @@ -111,4 +111,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and sp.is_examine = 0 +