diff --git a/src/main/java/com/gxwebsoft/approval/constant/ApprovalConstants.java b/src/main/java/com/gxwebsoft/approval/constant/ApprovalConstants.java index ed5bbaf..cd8b795 100644 --- a/src/main/java/com/gxwebsoft/approval/constant/ApprovalConstants.java +++ b/src/main/java/com/gxwebsoft/approval/constant/ApprovalConstants.java @@ -23,7 +23,7 @@ public final class ApprovalConstants { public static final String STATUS_APPROVED = "APPROVED"; public static final String STATUS_ARCHIVED = "ARCHIVED"; - /** 发起人可编辑、可提交的状态。 */ + /** 报送人可编辑、可提交的状态。 */ public static final Set EDITABLE_STATUSES = Collections.unmodifiableSet(new java.util.HashSet<>(Arrays.asList( STATUS_DRAFT, STATUS_REJECTED, STATUS_WITHDRAWN))); @@ -72,6 +72,14 @@ public final class ApprovalConstants { public static final String ROLE_USER = "user"; public static final String ROLE_GUEST = "guest"; + // 权限串(与 spec 约定一致;菜单/按钮共用) + public static final String PERMISSION_LIST = "approval:instance:list"; + public static final String PERMISSION_SUBMIT = "approval:instance:submit"; + public static final String PERMISSION_APPROVE = "approval:instance:approve"; + public static final String PERMISSION_ARCHIVE = "approval:instance:archive"; + public static final String PERMISSION_ASSIGN = "approval:instance:assign"; + public static final String PERMISSION_EXPORT = "approval:instance:export"; + // 附件规则 public static final long MAX_ATTACHMENT_SIZE = 20L * 1024 * 1024; public static final int MAX_ATTACHMENT_COUNT = 9; @@ -141,11 +149,16 @@ public final class ApprovalConstants { + "{\"key\":\"archive\",\"type\":\"ARCHIVE\",\"resolver\":\"archivist\",\"name\":\"归档\"}" + "]"; - /** 内部协调单流程定义(version=1,表单与派单由后续迭代启用)。 */ + /** + * 内部协调单流程定义(version=2)。 + * + *

version=1 的派单节点按受理部门全员生成任务,导致普通成员也能派单且部门无成员时卡单; + * v2 改为受理部门负责人(或签)。版本不可变:已发布实例仍引用其定义版本。

+ */ public static final String COORDINATION_NODES_JSON = "[" + "{\"key\":\"reportLeader\",\"type\":\"APPROVE\",\"resolver\":\"reporterOrgLeader\",\"name\":\"报送部门负责人\"}," + "{\"key\":\"acceptLeader\",\"type\":\"APPROVE\",\"resolver\":\"acceptOrgLeader\",\"name\":\"受理部门负责人\"}," - + "{\"key\":\"dispatch\",\"type\":\"DISPATCH\",\"resolver\":\"acceptOrgMembers\",\"name\":\"派单\"}," + + "{\"key\":\"dispatch\",\"type\":\"DISPATCH\",\"resolver\":\"acceptOrgLeader\",\"name\":\"派单\"}," + "{\"key\":\"confirm\",\"type\":\"CONFIRM\",\"resolver\":\"reporterAndDispatchTarget\",\"name\":\"存档\"}," + "{\"key\":\"archive\",\"type\":\"ARCHIVE\",\"resolver\":\"archivist\",\"name\":\"归档\"}" + "]"; diff --git a/src/main/java/com/gxwebsoft/approval/mapper/ApprovalExportMapper.java b/src/main/java/com/gxwebsoft/approval/mapper/ApprovalExportMapper.java index 2663ca4..e2053fb 100644 --- a/src/main/java/com/gxwebsoft/approval/mapper/ApprovalExportMapper.java +++ b/src/main/java/com/gxwebsoft/approval/mapper/ApprovalExportMapper.java @@ -18,5 +18,6 @@ public interface ApprovalExportMapper { */ List selectExportRows(@Param("param") ApprovalQueryParam param, @Param("userId") Integer userId, - @Param("allVisible") Integer allVisible); + @Param("allVisible") Integer allVisible, + @Param("assignVisible") Integer assignVisible); } diff --git a/src/main/java/com/gxwebsoft/approval/mapper/ApprovalInstanceMapper.java b/src/main/java/com/gxwebsoft/approval/mapper/ApprovalInstanceMapper.java index 0212f77..3754eb8 100644 --- a/src/main/java/com/gxwebsoft/approval/mapper/ApprovalInstanceMapper.java +++ b/src/main/java/com/gxwebsoft/approval/mapper/ApprovalInstanceMapper.java @@ -24,7 +24,8 @@ public interface ApprovalInstanceMapper extends BaseMapper { */ int countVisible(@Param("id") Long id, @Param("userId") Integer userId, - @Param("allVisible") Integer allVisible); + @Param("allVisible") Integer allVisible, + @Param("assignVisible") Integer assignVisible); /** * 我发起的列表。 diff --git a/src/main/java/com/gxwebsoft/approval/mapper/ApprovalQueryMapper.java b/src/main/java/com/gxwebsoft/approval/mapper/ApprovalQueryMapper.java index e3ae64c..45f0817 100644 --- a/src/main/java/com/gxwebsoft/approval/mapper/ApprovalQueryMapper.java +++ b/src/main/java/com/gxwebsoft/approval/mapper/ApprovalQueryMapper.java @@ -18,5 +18,6 @@ public interface ApprovalQueryMapper { List selectInstancePage(@Param("page") IPage page, @Param("param") ApprovalQueryParam param, @Param("userId") Integer userId, - @Param("allVisible") Integer allVisible); + @Param("allVisible") Integer allVisible, + @Param("assignVisible") Integer assignVisible); } diff --git a/src/main/java/com/gxwebsoft/approval/mapper/ApprovalTaskMapper.java b/src/main/java/com/gxwebsoft/approval/mapper/ApprovalTaskMapper.java index ece5152..6399fb4 100644 --- a/src/main/java/com/gxwebsoft/approval/mapper/ApprovalTaskMapper.java +++ b/src/main/java/com/gxwebsoft/approval/mapper/ApprovalTaskMapper.java @@ -22,6 +22,12 @@ public interface ApprovalTaskMapper extends BaseMapper { @Param("userId") Integer userId, @Param("taskStatus") String taskStatus); + /** + * 全租户待办列表:任一 PENDING 任务对应的实例,按实例去重。 + */ + List selectPendingInstancePage(@Param("page") IPage page, + @Param("param") ApprovalTaskListParam param); + /** * 本人待办实例数量(同一实例多任务只算一条)。 */ diff --git a/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalExportMapper.xml b/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalExportMapper.xml index 837c511..985bafc 100644 --- a/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalExportMapper.xml +++ b/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalExportMapper.xml @@ -31,6 +31,7 @@ i.reporter_id = #{userId} OR (i.status != 'DRAFT' AND ( #{allVisible} = 1 + OR (#{assignVisible} = 1 AND i.status = 'PENDING') OR EXISTS (SELECT 1 FROM approval_task t WHERE t.instance_id = i.id AND t.assignee_id = #{userId}) OR EXISTS (SELECT 1 FROM approval_record r WHERE r.instance_id = i.id AND r.operator_id = #{userId}) OR i.dispatch_target_id = #{userId} @@ -54,11 +55,11 @@ AND i.status = #{param.status} - - AND (i.biz_no LIKE CONCAT('%', #{param.keyword}, '%') - OR f.name LIKE CONCAT('%', #{param.keyword}, '%') - OR co.title LIKE CONCAT('%', #{param.keyword}, '%') - OR f.implement_org LIKE CONCAT('%', #{param.keyword}, '%')) + + AND (i.biz_no LIKE CONCAT('%', #{param.keywords}, '%') + OR f.name LIKE CONCAT('%', #{param.keywords}, '%') + OR co.title LIKE CONCAT('%', #{param.keywords}, '%') + OR f.implement_org LIKE CONCAT('%', #{param.keywords}, '%')) AND i.submit_time >= #{param.submitTimeStart} diff --git a/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalInstanceMapper.xml b/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalInstanceMapper.xml index e934317..0e84228 100644 --- a/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalInstanceMapper.xml +++ b/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalInstanceMapper.xml @@ -17,6 +17,7 @@ i.reporter_id = #{userId} OR (i.status != 'DRAFT' AND ( #{allVisible} = 1 + OR (#{assignVisible} = 1 AND i.status = 'PENDING') OR EXISTS (SELECT 1 FROM approval_task t WHERE t.instance_id = i.id AND t.assignee_id = #{userId}) OR EXISTS (SELECT 1 FROM approval_record r WHERE r.instance_id = i.id AND r.operator_id = #{userId}) OR i.dispatch_target_id = #{userId} diff --git a/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalQueryMapper.xml b/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalQueryMapper.xml index 1b13427..6056a81 100644 --- a/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalQueryMapper.xml +++ b/src/main/java/com/gxwebsoft/approval/mapper/xml/ApprovalQueryMapper.xml @@ -2,7 +2,7 @@ - + + +