diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/SysUser.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/SysUser.java index aa0d4ce..4ad3644 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/SysUser.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/SysUser.java @@ -108,6 +108,11 @@ public class SysUser extends BaseEntity { @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) private Date loginDate; + /** + * 组织机构名称 + */ + private String deptName; + /** * 部门对象 */ @@ -230,6 +235,14 @@ public class SysUser extends BaseEntity { return phonenumber; } + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + public void setPhonenumber(String phonenumber) { this.phonenumber = phonenumber; } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/controller/ApprovalProcessController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/controller/ApprovalProcessController.java index e9199c9..4f405c5 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/controller/ApprovalProcessController.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/controller/ApprovalProcessController.java @@ -49,6 +49,17 @@ public class ApprovalProcessController extends BaseController { return success(processService.selectProcessById(id)); } + /** + * 根据业务类型和组织机构ID查询审批流程 + */ + @ApiOperation("根据业务类型和组织机构ID查询审批流程") + //@RequiresPermissions("material:approval:process:query") + @GetMapping("/query") + public AjaxResult queryByBusinessTypeAndOrgId(@RequestParam("businessType") String businessType, @RequestParam(value = "orgId", required = false) Long orgId) { + ApprovalProcess process = processService.selectProcessByBusinessTypeAndOrgId(businessType, orgId); + return success(process); + } + /** * 新增审批流程 */ diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/domain/ApprovalNode.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/domain/ApprovalNode.java index cd66abd..cbd5dc5 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/domain/ApprovalNode.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/domain/ApprovalNode.java @@ -30,9 +30,6 @@ public class ApprovalNode implements Serializable { @ApiModelProperty("流程ID") private Long processId; - @ApiModelProperty("节点编码") - private String nodeCode; - @ApiModelProperty("节点名称") private String nodeName; diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/domain/ApprovalProcess.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/domain/ApprovalProcess.java index 089b22b..a22d8fe 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/domain/ApprovalProcess.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/domain/ApprovalProcess.java @@ -28,15 +28,18 @@ public class ApprovalProcess implements Serializable { @ApiModelProperty("主键ID") private Long id; - @ApiModelProperty("流程编码") - private String processCode; - @ApiModelProperty("流程名称") private String processName; @ApiModelProperty("业务类型") private String businessType; + @ApiModelProperty("组织机构ID") + private Long orgId; + + @ApiModelProperty("组织机构名称") + private String orgName; + @ApiModelProperty("流程描述") private String description; diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/mapper/ApprovalProcessMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/mapper/ApprovalProcessMapper.java index 5df10e4..332685c 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/mapper/ApprovalProcessMapper.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/mapper/ApprovalProcessMapper.java @@ -33,19 +33,21 @@ public interface ApprovalProcessMapper { /** * 根据业务类型查询审批流程 - * + * * @param businessType 业务类型 * @return 流程信息 */ ApprovalProcess selectProcessByBusinessType(@Param("businessType") String businessType); /** - * 根据流程编码查询审批流程 - * - * @param processCode 流程编码 + * 根据业务类型和组织机构ID查询审批流程 + * + * @param businessType 业务类型 + * @param orgId 组织机构ID * @return 流程信息 */ - ApprovalProcess selectProcessByCode(@Param("processCode") String processCode); + ApprovalProcess selectProcessByBusinessTypeAndOrgId(@Param("businessType") String businessType, + @Param("orgId") Long orgId); /** * 新增审批流程 diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/IApprovalEngineService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/IApprovalEngineService.java index bfa59e1..bff9b7f 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/IApprovalEngineService.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/IApprovalEngineService.java @@ -13,7 +13,7 @@ public interface IApprovalEngineService { /** * 创建审批实例 - * + * * @param businessType 业务类型 * @param businessId 业务ID * @param businessData 业务数据(JSON) @@ -21,6 +21,17 @@ public interface IApprovalEngineService { */ ApprovalInstance createApprovalInstance(String businessType, String businessId, String businessData); + /** + * 创建审批实例(支持多组织机构) + * + * @param businessType 业务类型 + * @param businessId 业务ID + * @param businessData 业务数据(JSON) + * @param orgId 组织机构ID + * @return 审批实例 + */ + ApprovalInstance createApprovalInstance(String businessType, String businessId, String businessData, Long orgId); + /** * 执行审批操作 * diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/IApprovalProcessService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/IApprovalProcessService.java index cc43c66..04f07d8 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/IApprovalProcessService.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/IApprovalProcessService.java @@ -30,12 +30,21 @@ public interface IApprovalProcessService { /** * 根据业务类型查询审批流程 - * + * * @param businessType 业务类型 * @return 流程信息 */ ApprovalProcess selectProcessByBusinessType(String businessType); + /** + * 根据业务类型和组织机构ID查询审批流程 + * + * @param businessType 业务类型 + * @param orgId 组织机构ID + * @return 流程信息 + */ + ApprovalProcess selectProcessByBusinessTypeAndOrgId(String businessType, Long orgId); + /** * 新增审批流程 * diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/impl/ApprovalEngineServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/impl/ApprovalEngineServiceImpl.java index 1f2a7f5..576e178 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/impl/ApprovalEngineServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/impl/ApprovalEngineServiceImpl.java @@ -32,8 +32,7 @@ import java.util.stream.Collectors; /** * 审批引擎服务实现 * - * @author bonus - * @date 2024-11-18 + * @author syruan */ @Service public class ApprovalEngineServiceImpl implements IApprovalEngineService { @@ -67,8 +66,28 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService { @Override @Transactional(rollbackFor = Exception.class) public ApprovalInstance createApprovalInstance(String businessType, String businessId, String businessData) { + // 调用新的方法,orgId 为 null(使用默认流程) + Long orgId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + return createApprovalInstance(businessType, businessId, businessData, orgId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ApprovalInstance createApprovalInstance(String businessType, String businessId, String businessData, Long orgId) { // 1. 查询审批流程配置 - ApprovalProcess process = processMapper.selectProcessByBusinessType(businessType); + ApprovalProcess process; + if (orgId != null) { + // 按组织机构查询 + process = processMapper.selectProcessByBusinessTypeAndOrgId(businessType, orgId); + if (process == null) { + // 按业务类型查询(兼容旧逻辑) + process = processMapper.selectProcessByBusinessType(businessType); + } + } else { + // 按业务类型查询(兼容旧逻辑) + process = processMapper.selectProcessByBusinessType(businessType); + } + if (process == null) { throw new ServiceException("未找到业务类型[" + businessType + "]的审批流程配置"); } @@ -105,16 +124,7 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService { log.info("第一个节点[{}]设置为自动通过,开始自动审批", firstNode.getNodeName()); // 创建自动审批记录 - ApprovalRecord autoRecord = new ApprovalRecord(); - autoRecord.setInstanceId(instance.getId()); - autoRecord.setNodeId(firstNode.getId()); - autoRecord.setNodeName(firstNode.getNodeName()); - autoRecord.setNodeOrder(firstNode.getNodeOrder()); - autoRecord.setApproverId(0L); // 系统自动审批 - autoRecord.setApproverName("系统自动审批"); - autoRecord.setApproveResult(ApprovalResultEnum.PASS.getCode()); - autoRecord.setApproveOpinion("自动通过"); - autoRecord.setApproveTime(new Date()); + ApprovalRecord autoRecord = getAutoRecord(instance, firstNode); recordMapper.insertRecord(autoRecord); log.info("第一个节点[{}]自动审批完成,继续流转", firstNode.getNodeName()); @@ -257,23 +267,14 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService { instanceMapper.updateInstanceStatus(instance.getId(), ApprovalStatusEnum.IN_PROGRESS.getCode()); log.info("审批实例[{}]流转到下一节点[{}]", instance.getInstanceCode(), nextNode.getNodeName()); - // 检查下一个节点是否自动通过 log.info("节点[{}]的autoPass值为:[{}]", nextNode.getNodeName(), nextNode.getAutoPass()); + if ("1".equals(nextNode.getAutoPass())) { log.info("节点[{}]设置为自动通过,开始自动审批", nextNode.getNodeName()); // 创建自动审批记录 - ApprovalRecord autoRecord = new ApprovalRecord(); - autoRecord.setInstanceId(instance.getId()); - autoRecord.setNodeId(nextNode.getId()); - autoRecord.setNodeName(nextNode.getNodeName()); - autoRecord.setNodeOrder(nextNode.getNodeOrder()); - autoRecord.setApproverId(0L); // 系统自动审批 - autoRecord.setApproverName("系统自动审批"); - autoRecord.setApproveResult(ApprovalResultEnum.PASS.getCode()); - autoRecord.setApproveOpinion("自动通过"); - autoRecord.setApproveTime(new Date()); + ApprovalRecord autoRecord = getAutoRecord(instance, nextNode); recordMapper.insertRecord(autoRecord); log.info("节点[{}]自动审批完成,继续流转", nextNode.getNodeName()); @@ -286,6 +287,23 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService { } } + /** + * 创建自动审批记录 + */ + private static ApprovalRecord getAutoRecord(ApprovalInstance instance, ApprovalNode nextNode) { + ApprovalRecord autoRecord = new ApprovalRecord(); + autoRecord.setInstanceId(instance.getId()); + autoRecord.setNodeId(nextNode.getId()); + autoRecord.setNodeName(nextNode.getNodeName()); + autoRecord.setNodeOrder(nextNode.getNodeOrder()); + autoRecord.setApproverId(0L); // 系统自动审批 + autoRecord.setApproverName("系统自动审批"); + autoRecord.setApproveResult(ApprovalResultEnum.PASS.getCode()); + autoRecord.setApproveOpinion("自动通过"); + autoRecord.setApproveTime(new Date()); + return autoRecord; + } + /** * 校验审批人权限 */ @@ -341,8 +359,7 @@ public class ApprovalEngineServiceImpl implements IApprovalEngineService { } } } catch (Exception e) { - log.error("执行审批回调失败,实例编号:{},业务类型:{}", - instance.getInstanceCode(), instance.getBusinessType(), e); + log.error("执行审批回调失败,实例编号:{},业务类型:{}", instance.getInstanceCode(), instance.getBusinessType(), e); // 重新抛出异常,触发事务回滚 throw new RuntimeException("审批回调执行失败:" + e.getMessage(), e); } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/impl/ApprovalProcessServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/impl/ApprovalProcessServiceImpl.java index c162b73..7d87519 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/impl/ApprovalProcessServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/approval/service/impl/ApprovalProcessServiceImpl.java @@ -1,5 +1,6 @@ package com.bonus.material.approval.service.impl; +import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.approval.domain.ApprovalNode; import com.bonus.material.approval.domain.ApprovalProcess; import com.bonus.material.approval.mapper.ApprovalNodeMapper; @@ -14,8 +15,7 @@ import java.util.List; /** * 审批流程配置服务实现 * - * @author bonus - * @date 2024-11-18 + * @author syruan */ @Service public class ApprovalProcessServiceImpl implements IApprovalProcessService { @@ -53,13 +53,35 @@ public class ApprovalProcessServiceImpl implements IApprovalProcessService { return process; } + @Override + public ApprovalProcess selectProcessByBusinessTypeAndOrgId(String businessType, Long orgId) { + if (orgId == null) { + orgId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + } + ApprovalProcess process = processMapper.selectProcessByBusinessTypeAndOrgId(businessType, orgId); + if (process != null) { + // 查询节点列表 + List nodeList = nodeMapper.selectNodeListByProcessId(process.getId()); + process.setNodeList(nodeList); + } + return process; + } + @Override @Transactional(rollbackFor = Exception.class) public int insertProcess(ApprovalProcess process) { - // 检查是否已存在相同业务类型的流程 - ApprovalProcess existingProcess = processMapper.selectProcessByBusinessType(process.getBusinessType()); + if (process == null) { + throw new RuntimeException("审批流程信息不能为空"); + } + if (process.getOrgId() == null) { + process.setOrgId(SecurityUtils.getLoginUser().getSysUser().getDeptId()); + process.setOrgName(SecurityUtils.getLoginUser().getSysUser().getDept().getDeptName()); + } + // 检查是否已存在相同业务类型和组织机构的流程 + ApprovalProcess existingProcess = processMapper.selectProcessByBusinessTypeAndOrgId(process.getBusinessType(), process.getOrgId()); if (existingProcess != null) { - throw new RuntimeException("业务类型 [" + process.getBusinessType() + "] 的审批流程已存在,流程名称:" + existingProcess.getProcessName()); + throw new RuntimeException("业务类型 [" + process.getBusinessType() + "] 在组织机构 [" + + process.getOrgName() + "] 的审批流程已存在,流程名称:" + existingProcess.getProcessName()); } // 插入流程 @@ -94,7 +116,6 @@ public class ApprovalProcessServiceImpl implements IApprovalProcessService { } nodeMapper.batchInsertNode(process.getNodeList()); } - return rows; } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/mapper/SysDeptMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/mapper/SysDeptMapper.java index 955b0d9..eb106ac 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/mapper/SysDeptMapper.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/equipment/mapper/SysDeptMapper.java @@ -1,12 +1,12 @@ package com.bonus.material.equipment.mapper; +import com.bonus.system.api.domain.SysUser; import com.bonus.material.basic.domain.SysDeptVO; import com.bonus.material.equipment.domain.ConfigEntity; import com.bonus.material.equipment.domain.DeptEquipmentConfig; import com.bonus.material.equipment.domain.DeptTreeSelect; import com.bonus.material.equipment.domain.SysDept; import com.bonus.material.equipment.domain.*; -import com.bonus.system.api.domain.SysUser; import java.util.List; diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/controller/UserController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/controller/UserController.java index 4f51ba3..ec3cb84 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/controller/UserController.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/controller/UserController.java @@ -77,4 +77,16 @@ public class UserController extends BaseController { return getDataTableError(new ArrayList<>()); } + @GetMapping("/userList") + @SysLog(title = "用户列表", businessType = OperaType.QUERY,logType = 0,module = "系统管理->用户管理",details = "查询用户列表") + public TableDataInfo userList(com.bonus.common.biz.domain.SysUser user) { + try{ + List list = userService.selectUserList(user); + return getDataTable(list); + }catch (Exception e){ + logger.error(e.toString(),e); + } + return getDataTableError(new ArrayList<>()); + } + } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/mapper/UserMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/mapper/UserMapper.java index efe2ff9..437858c 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/mapper/UserMapper.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/mapper/UserMapper.java @@ -1,5 +1,6 @@ package com.bonus.material.user.mapper; +import com.bonus.common.biz.domain.SysUser; import com.bonus.material.user.entity.UserDto; import com.bonus.common.biz.domain.SysDept; import com.bonus.system.api.domain.SysRole; @@ -18,4 +19,6 @@ public interface UserMapper { List selectDeptList(SysDept dept); List selectRoleList(SysRole role); + + List selectUserList(SysUser user); } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/service/UserService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/service/UserService.java index a387d2c..dc67613 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/service/UserService.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/service/UserService.java @@ -1,5 +1,6 @@ package com.bonus.material.user.service; +import com.bonus.common.biz.domain.SysUser; import com.bonus.common.biz.domain.TreeSelect; import com.bonus.material.user.entity.UserDto; import com.bonus.common.biz.domain.SysDept; @@ -20,4 +21,6 @@ public interface UserService { List selectDeptTreeList(SysDept dept); List selectRoleList(SysRole role); + + List selectUserList(SysUser user); } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/service/impl/UserServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/service/impl/UserServiceImpl.java index fc45128..c38cded 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/service/impl/UserServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/user/service/impl/UserServiceImpl.java @@ -1,6 +1,7 @@ package com.bonus.material.user.service.impl; import com.bonus.common.biz.domain.SysDept; +import com.bonus.common.biz.domain.SysUser; import com.bonus.common.biz.domain.TreeSelect; import com.bonus.common.core.utils.SpringUtils; import com.bonus.common.core.utils.StringUtils; @@ -21,6 +22,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -70,6 +72,11 @@ public class UserServiceImpl implements UserService { } } + @Override + public List selectUserList(SysUser user) { + return userMapper.selectUserList(user); + } + /** * 查询部门管理数据 * diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/approval/ApprovalNodeMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/approval/ApprovalNodeMapper.xml index e0083c4..a0ede22 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/approval/ApprovalNodeMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/approval/ApprovalNodeMapper.xml @@ -7,7 +7,6 @@ - @@ -24,7 +23,6 @@ select id, process_id, - node_code, node_name, node_order, approver_type, @@ -41,7 +39,6 @@ + - - where process_code = #{processCode} + where business_type = #{businessType} and org_id = #{orgId} limit 1 insert ignore into bm_approval_process - process_code, process_name, business_type, + org_id, + org_name, description, status, create_by, @@ -73,9 +71,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_time - #{processCode}, #{processName}, #{businessType}, + #{orgId}, + #{orgName}, #{description}, #{status}, #{createBy}, diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/user/UserMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/user/UserMapper.xml index 217aa40..80b3628 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/user/UserMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/user/UserMapper.xml @@ -15,28 +15,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + +