Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,25 +28,25 @@ public class ApprovalTodoController {
private ApprovalTodoService approvalTodoService;

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

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

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

@PostMapping("/cc/page")
@Operation(summary = "审核代办-抄送我的审批分页")
@Operation(summary = "审核代办-抄送我的审批分页", description = "返回值:Pager<List<ApprovalTodoItemResponse>>")
public Pager<List<ApprovalTodoItemResponse>> ccPage(@Validated @RequestBody ApprovalProcessedPageRequest request) {
return approvalTodoService.getCcPage(request, SessionUtils.getUserId());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,10 @@ public class ApprovalTodoItemResponse {

@Schema(description = "审批人ID")
private String approvalId;

@Schema(description = "审批流ID")
private String approvalFlowId;

@Schema(description = "审批流版本ID")
private String approvalFlowVersionId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,37 @@

import cn.cordys.crm.approval.domain.ApprovalTask;
import cn.cordys.crm.approval.dto.response.ApprovalTodoCountResponse;
import cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse;
import org.apache.ibatis.annotations.Param;


/**
* 审批任务扩展Mapper
*/
public interface ExtApprovalTaskMapper {
/**
* 分页查询待我审批任务,按创建时间和ID倒序。
*/
java.util.List<ApprovalTodoItemResponse> selectPendingTasks(@Param("approverId") String approverId,
@Param("pendingStatus") String pendingStatus,
@Param("resourceType") String resourceType,
@Param("resourceName") String resourceName);

java.util.List<ApprovalTodoItemResponse> selectProcessedTasks(@Param("approverId") String approverId,
@Param("pendingStatus") String pendingStatus,
@Param("keyword") String keyword);

java.util.List<ApprovalTodoItemResponse> selectInitiatedTasks(@Param("submitterId") String submitterId,
@Param("keyword") String keyword);

java.util.List<ApprovalTodoItemResponse> selectCcTasks(@Param("approverId") String approverId,
@Param("keyword") String keyword);

/**
* 统计待我审批数量(总数 + 各资源类型)。
*/
ApprovalTodoCountResponse countPendingByApprover(@Param("approverId") String approverId,
@Param("pendingStatus") String pendingStatus);

void updateTaskById(@Param("approvalTask") ApprovalTask approvalTask);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,131 @@

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

<select id="selectPendingTasks" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse">
SELECT
ai.resource_id AS resourceId,
COALESCE(oq.name, c.name, so.name, ci.name, '') AS resourceName,
UPPER(ai.type) AS resourceType,
u.name AS applicant,
ai.submit_time AS submitTime,
CASE WHEN at.action IS NULL OR at.action = '' THEN at.status ELSE at.action END AS approvalOperation,
ai.approval_status AS dataResult,
at.id AS approvalTaskId,
at.node_id AS approvalNodeId,
at.instance_id AS approvalInstanceId,
at.approver_id AS approvalId,
afv.flow_id AS approvalFlowId,
afv.id AS approvalFlowVersionId
FROM approval_task at
INNER JOIN approval_instance ai ON ai.id = at.instance_id
INNER JOIN approval_flow_version afv ON afv.id = ai.flow_version_id
LEFT JOIN sys_user u ON u.id = ai.submitter_id
LEFT JOIN opportunity_quotation oq ON ai.resource_id = oq.id AND ai.type IN ('quotation', 'quote')
LEFT JOIN contract c ON ai.resource_id = c.id AND ai.type = 'contract'
LEFT JOIN sales_order so ON ai.resource_id = so.id AND ai.type = 'order'
LEFT JOIN contract_invoice ci ON ai.resource_id = ci.id AND ai.type = 'invoice'
WHERE at.approver_id = #{approverId}
AND at.status = #{pendingStatus}
<if test="resourceType != null and resourceType != ''">
AND ai.type = #{resourceType}
</if>
<if test="resourceName != null and resourceName != ''">
AND COALESCE(oq.name, c.name, so.name, ci.name) LIKE CONCAT('%', #{resourceName}, '%')
</if>
ORDER BY at.create_time DESC, at.id DESC
</select>

<select id="selectProcessedTasks" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse">
SELECT
ai.resource_id AS resourceId,
COALESCE(oq.name, c.name, so.name, ci.name, '') AS resourceName,
UPPER(ai.type) AS resourceType,
u.name AS applicant,
ai.submit_time AS submitTime,
CASE WHEN at.action IS NULL OR at.action = '' THEN at.status ELSE at.action END AS approvalOperation,
ai.approval_status AS dataResult,
at.id AS approvalTaskId,
at.node_id AS approvalNodeId,
at.instance_id AS approvalInstanceId,
at.approver_id AS approvalId,
afv.flow_id AS approvalFlowId,
afv.id AS approvalFlowVersionId
FROM approval_task at
INNER JOIN approval_instance ai ON ai.id = at.instance_id
INNER JOIN approval_flow_version afv ON afv.id = ai.flow_version_id
LEFT JOIN sys_user u ON u.id = ai.submitter_id
LEFT JOIN opportunity_quotation oq ON ai.resource_id = oq.id AND ai.type IN ('quotation', 'quote')
LEFT JOIN contract c ON ai.resource_id = c.id AND ai.type = 'contract'
LEFT JOIN sales_order so ON ai.resource_id = so.id AND ai.type = 'order'
LEFT JOIN contract_invoice ci ON ai.resource_id = ci.id AND ai.type = 'invoice'
WHERE at.approver_id = #{approverId}
AND at.status != #{pendingStatus}
<if test="keyword != null and keyword != ''">
AND COALESCE(oq.name, c.name, so.name, ci.name) LIKE CONCAT('%', #{keyword}, '%')
</if>
ORDER BY at.update_time DESC, at.id DESC
</select>

<select id="selectInitiatedTasks" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse">
SELECT
ai.resource_id AS resourceId,
COALESCE(oq.name, c.name, so.name, ci.name, '') AS resourceName,
UPPER(ai.type) AS resourceType,
u.name AS applicant,
ai.submit_time AS submitTime,
ai.approval_status AS approvalOperation,
ai.approval_status AS dataResult,
NULL AS approvalTaskId,
ai.current_node_id AS approvalNodeId,
ai.id AS approvalInstanceId,
ai.submitter_id AS approvalId,
afv.flow_id AS approvalFlowId,
afv.id AS approvalFlowVersionId
FROM approval_instance ai
INNER JOIN approval_flow_version afv ON afv.id = ai.flow_version_id
LEFT JOIN sys_user u ON u.id = ai.submitter_id
LEFT JOIN opportunity_quotation oq ON ai.resource_id = oq.id AND ai.type IN ('quotation', 'quote')
LEFT JOIN contract c ON ai.resource_id = c.id AND ai.type = 'contract'
LEFT JOIN sales_order so ON ai.resource_id = so.id AND ai.type = 'order'
LEFT JOIN contract_invoice ci ON ai.resource_id = ci.id AND ai.type = 'invoice'
WHERE ai.submitter_id = #{submitterId}
<if test="keyword != null and keyword != ''">
AND COALESCE(oq.name, c.name, so.name, ci.name) LIKE CONCAT('%', #{keyword}, '%')
</if>
ORDER BY ai.update_time DESC, ai.id DESC
</select>

<select id="selectCcTasks" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoItemResponse">
SELECT
ai.resource_id AS resourceId,
COALESCE(oq.name, c.name, so.name, ci.name, '') AS resourceName,
UPPER(ai.type) AS resourceType,
u.name AS applicant,
ai.submit_time AS submitTime,
CASE WHEN at.action IS NULL OR at.action = '' THEN at.status ELSE at.action END AS approvalOperation,
ai.approval_status AS dataResult,
at.id AS approvalTaskId,
at.node_id AS approvalNodeId,
at.instance_id AS approvalInstanceId,
at.approver_id AS approvalId,
afv.flow_id AS approvalFlowId,
afv.id AS approvalFlowVersionId
FROM approval_task at
INNER JOIN approval_instance ai ON ai.id = at.instance_id
INNER JOIN approval_flow_version afv ON afv.id = ai.flow_version_id
LEFT JOIN sys_user u ON u.id = ai.submitter_id
LEFT JOIN opportunity_quotation oq ON ai.resource_id = oq.id AND ai.type IN ('quotation', 'quote')
LEFT JOIN contract c ON ai.resource_id = c.id AND ai.type = 'contract'
LEFT JOIN sales_order so ON ai.resource_id = so.id AND ai.type = 'order'
LEFT JOIN contract_invoice ci ON ai.resource_id = ci.id AND ai.type = 'invoice'
WHERE at.approver_id = #{approverId}
AND at.type IN ('cc', 'CC')
<if test="keyword != null and keyword != ''">
AND COALESCE(oq.name, c.name, so.name, ci.name) LIKE CONCAT('%', #{keyword}, '%')
</if>
ORDER BY at.update_time DESC, at.id DESC
</select>

<select id="countPendingByApprover" resultType="cn.cordys.crm.approval.dto.response.ApprovalTodoCountResponse">
SELECT
IFNULL(SUM(t.cnt), 0) AS total,
Expand Down
Loading
Loading