Skip to content

Commit 5928d3a

Browse files
committed
fix: fix approving task bug
1 parent 9937793 commit 5928d3a

9 files changed

Lines changed: 200 additions & 209 deletions

File tree

backend/crm/src/main/java/cn/cordys/crm/approval/controller/ApprovalTodoController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,25 @@ public class ApprovalTodoController {
2828
private ApprovalTodoService approvalTodoService;
2929

3030
@PostMapping("/pending/page")
31-
@Operation(summary = "审核代办-当前用户待审核资源分页")
31+
@Operation(summary = "审核代办-当前用户待审核资源分页", description = "返回值:Pager<List<ApprovalTodoItemResponse>>")
3232
public Pager<List<ApprovalTodoItemResponse>> todo(@Validated @RequestBody ApprovalTodoPageRequest request) {
3333
return approvalTodoService.getTodoPage(request, SessionUtils.getUserId());
3434
}
3535

3636
@PostMapping("/processed/page")
37-
@Operation(summary = "审核代办-当前用户已处理审批分页")
37+
@Operation(summary = "审核代办-当前用户已处理审批分页", description = "返回值:Pager<List<ApprovalTodoItemResponse>>")
3838
public Pager<List<ApprovalTodoItemResponse>> processedPage(@Validated @RequestBody ApprovalProcessedPageRequest request) {
3939
return approvalTodoService.getProcessedPage(request, SessionUtils.getUserId());
4040
}
4141

4242
@PostMapping("/initiated/page")
43-
@Operation(summary = "审核代办-我发起的审批分页")
43+
@Operation(summary = "审核代办-我发起的审批分页", description = "返回值:Pager<List<ApprovalTodoItemResponse>>")
4444
public Pager<List<ApprovalTodoItemResponse>> initiatedPage(@Validated @RequestBody ApprovalProcessedPageRequest request) {
4545
return approvalTodoService.getInitiatedPage(request, SessionUtils.getUserId());
4646
}
4747

4848
@PostMapping("/cc/page")
49-
@Operation(summary = "审核代办-抄送我的审批分页")
49+
@Operation(summary = "审核代办-抄送我的审批分页", description = "返回值:Pager<List<ApprovalTodoItemResponse>>")
5050
public Pager<List<ApprovalTodoItemResponse>> ccPage(@Validated @RequestBody ApprovalProcessedPageRequest request) {
5151
return approvalTodoService.getCcPage(request, SessionUtils.getUserId());
5252
}

backend/crm/src/main/java/cn/cordys/crm/approval/dto/response/ApprovalTodoItemResponse.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,10 @@ public class ApprovalTodoItemResponse {
3838

3939
@Schema(description = "审批人ID")
4040
private String approvalId;
41+
42+
@Schema(description = "审批流ID")
43+
private String approvalFlowId;
44+
45+
@Schema(description = "审批流版本ID")
46+
private String approvalFlowVersionId;
4147
}

backend/crm/src/main/java/cn/cordys/crm/approval/mapper/ExtApprovalTaskMapper.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,37 @@
22

33
import cn.cordys.crm.approval.domain.ApprovalTask;
44
import cn.cordys.crm.approval.dto.response.ApprovalTodoCountResponse;
5+
import cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse;
56
import org.apache.ibatis.annotations.Param;
67

78

89
/**
910
* 审批任务扩展Mapper
1011
*/
1112
public interface ExtApprovalTaskMapper {
13+
/**
14+
* 分页查询待我审批任务,按创建时间和ID倒序。
15+
*/
16+
java.util.List<ApprovalTodoItemResponse> selectPendingTasks(@Param("approverId") String approverId,
17+
@Param("pendingStatus") String pendingStatus,
18+
@Param("resourceType") String resourceType,
19+
@Param("resourceName") String resourceName);
20+
21+
java.util.List<ApprovalTodoItemResponse> selectProcessedTasks(@Param("approverId") String approverId,
22+
@Param("pendingStatus") String pendingStatus,
23+
@Param("keyword") String keyword);
24+
25+
java.util.List<ApprovalTodoItemResponse> selectInitiatedTasks(@Param("submitterId") String submitterId,
26+
@Param("keyword") String keyword);
27+
28+
java.util.List<ApprovalTodoItemResponse> selectCcTasks(@Param("approverId") String approverId,
29+
@Param("keyword") String keyword);
30+
1231
/**
1332
* 统计待我审批数量(总数 + 各资源类型)。
1433
*/
1534
ApprovalTodoCountResponse countPendingByApprover(@Param("approverId") String approverId,
1635
@Param("pendingStatus") String pendingStatus);
1736

1837
void updateTaskById(@Param("approvalTask") ApprovalTask approvalTask);
19-
}
38+
}

backend/crm/src/main/java/cn/cordys/crm/approval/mapper/ExtApprovalTaskMapper.xml

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,131 @@
33

44
<mapper namespace="cn.cordys.crm.approval.mapper.ExtApprovalTaskMapper">
55

6+
<select id="selectPendingTasks" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse">
7+
SELECT
8+
ai.resource_id AS resourceId,
9+
COALESCE(oq.name, c.name, so.name, ci.name, '') AS resourceName,
10+
UPPER(ai.type) AS resourceType,
11+
u.name AS applicant,
12+
ai.submit_time AS submitTime,
13+
CASE WHEN at.action IS NULL OR at.action = '' THEN at.status ELSE at.action END AS approvalOperation,
14+
ai.approval_status AS dataResult,
15+
at.id AS approvalTaskId,
16+
at.node_id AS approvalNodeId,
17+
at.instance_id AS approvalInstanceId,
18+
at.approver_id AS approvalId,
19+
afv.flow_id AS approvalFlowId,
20+
afv.id AS approvalFlowVersionId
21+
FROM approval_task at
22+
INNER JOIN approval_instance ai ON ai.id = at.instance_id
23+
INNER JOIN approval_flow_version afv ON afv.id = ai.flow_version_id
24+
LEFT JOIN sys_user u ON u.id = ai.submitter_id
25+
LEFT JOIN opportunity_quotation oq ON ai.resource_id = oq.id AND ai.type IN ('quotation', 'quote')
26+
LEFT JOIN contract c ON ai.resource_id = c.id AND ai.type = 'contract'
27+
LEFT JOIN sales_order so ON ai.resource_id = so.id AND ai.type = 'order'
28+
LEFT JOIN contract_invoice ci ON ai.resource_id = ci.id AND ai.type = 'invoice'
29+
WHERE at.approver_id = #{approverId}
30+
AND at.status = #{pendingStatus}
31+
<if test="resourceType != null and resourceType != ''">
32+
AND ai.type = #{resourceType}
33+
</if>
34+
<if test="resourceName != null and resourceName != ''">
35+
AND COALESCE(oq.name, c.name, so.name, ci.name) LIKE CONCAT('%', #{resourceName}, '%')
36+
</if>
37+
ORDER BY at.create_time DESC, at.id DESC
38+
</select>
39+
40+
<select id="selectProcessedTasks" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse">
41+
SELECT
42+
ai.resource_id AS resourceId,
43+
COALESCE(oq.name, c.name, so.name, ci.name, '') AS resourceName,
44+
UPPER(ai.type) AS resourceType,
45+
u.name AS applicant,
46+
ai.submit_time AS submitTime,
47+
CASE WHEN at.action IS NULL OR at.action = '' THEN at.status ELSE at.action END AS approvalOperation,
48+
ai.approval_status AS dataResult,
49+
at.id AS approvalTaskId,
50+
at.node_id AS approvalNodeId,
51+
at.instance_id AS approvalInstanceId,
52+
at.approver_id AS approvalId,
53+
afv.flow_id AS approvalFlowId,
54+
afv.id AS approvalFlowVersionId
55+
FROM approval_task at
56+
INNER JOIN approval_instance ai ON ai.id = at.instance_id
57+
INNER JOIN approval_flow_version afv ON afv.id = ai.flow_version_id
58+
LEFT JOIN sys_user u ON u.id = ai.submitter_id
59+
LEFT JOIN opportunity_quotation oq ON ai.resource_id = oq.id AND ai.type IN ('quotation', 'quote')
60+
LEFT JOIN contract c ON ai.resource_id = c.id AND ai.type = 'contract'
61+
LEFT JOIN sales_order so ON ai.resource_id = so.id AND ai.type = 'order'
62+
LEFT JOIN contract_invoice ci ON ai.resource_id = ci.id AND ai.type = 'invoice'
63+
WHERE at.approver_id = #{approverId}
64+
AND at.status != #{pendingStatus}
65+
<if test="keyword != null and keyword != ''">
66+
AND COALESCE(oq.name, c.name, so.name, ci.name) LIKE CONCAT('%', #{keyword}, '%')
67+
</if>
68+
ORDER BY at.update_time DESC, at.id DESC
69+
</select>
70+
71+
<select id="selectInitiatedTasks" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse">
72+
SELECT
73+
ai.resource_id AS resourceId,
74+
COALESCE(oq.name, c.name, so.name, ci.name, '') AS resourceName,
75+
UPPER(ai.type) AS resourceType,
76+
u.name AS applicant,
77+
ai.submit_time AS submitTime,
78+
ai.approval_status AS approvalOperation,
79+
ai.approval_status AS dataResult,
80+
NULL AS approvalTaskId,
81+
ai.current_node_id AS approvalNodeId,
82+
ai.id AS approvalInstanceId,
83+
ai.submitter_id AS approvalId,
84+
afv.flow_id AS approvalFlowId,
85+
afv.id AS approvalFlowVersionId
86+
FROM approval_instance ai
87+
INNER JOIN approval_flow_version afv ON afv.id = ai.flow_version_id
88+
LEFT JOIN sys_user u ON u.id = ai.submitter_id
89+
LEFT JOIN opportunity_quotation oq ON ai.resource_id = oq.id AND ai.type IN ('quotation', 'quote')
90+
LEFT JOIN contract c ON ai.resource_id = c.id AND ai.type = 'contract'
91+
LEFT JOIN sales_order so ON ai.resource_id = so.id AND ai.type = 'order'
92+
LEFT JOIN contract_invoice ci ON ai.resource_id = ci.id AND ai.type = 'invoice'
93+
WHERE ai.submitter_id = #{submitterId}
94+
<if test="keyword != null and keyword != ''">
95+
AND COALESCE(oq.name, c.name, so.name, ci.name) LIKE CONCAT('%', #{keyword}, '%')
96+
</if>
97+
ORDER BY ai.update_time DESC, ai.id DESC
98+
</select>
99+
100+
<select id="selectCcTasks" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse">
101+
SELECT
102+
ai.resource_id AS resourceId,
103+
COALESCE(oq.name, c.name, so.name, ci.name, '') AS resourceName,
104+
UPPER(ai.type) AS resourceType,
105+
u.name AS applicant,
106+
ai.submit_time AS submitTime,
107+
CASE WHEN at.action IS NULL OR at.action = '' THEN at.status ELSE at.action END AS approvalOperation,
108+
ai.approval_status AS dataResult,
109+
at.id AS approvalTaskId,
110+
at.node_id AS approvalNodeId,
111+
at.instance_id AS approvalInstanceId,
112+
at.approver_id AS approvalId,
113+
afv.flow_id AS approvalFlowId,
114+
afv.id AS approvalFlowVersionId
115+
FROM approval_task at
116+
INNER JOIN approval_instance ai ON ai.id = at.instance_id
117+
INNER JOIN approval_flow_version afv ON afv.id = ai.flow_version_id
118+
LEFT JOIN sys_user u ON u.id = ai.submitter_id
119+
LEFT JOIN opportunity_quotation oq ON ai.resource_id = oq.id AND ai.type IN ('quotation', 'quote')
120+
LEFT JOIN contract c ON ai.resource_id = c.id AND ai.type = 'contract'
121+
LEFT JOIN sales_order so ON ai.resource_id = so.id AND ai.type = 'order'
122+
LEFT JOIN contract_invoice ci ON ai.resource_id = ci.id AND ai.type = 'invoice'
123+
WHERE at.approver_id = #{approverId}
124+
AND at.type IN ('cc', 'CC')
125+
<if test="keyword != null and keyword != ''">
126+
AND COALESCE(oq.name, c.name, so.name, ci.name) LIKE CONCAT('%', #{keyword}, '%')
127+
</if>
128+
ORDER BY at.update_time DESC, at.id DESC
129+
</select>
130+
6131
<select id="countPendingByApprover" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoCountResponse">
7132
SELECT
8133
IFNULL(SUM(t.cnt), 0) AS total,

0 commit comments

Comments
 (0)