From 895de04138daec8174c6163e73e8753b7cb4e4c8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 22 Jan 2026 14:48:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=A9=E5=B1=95=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E4=BB=BB=E5=8A=A1=E5=8D=A1=E7=89=87=E7=9A=84?= =?UTF-8?q?=E6=89=80=E6=9C=89=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. TaskMapper selectTaskHall 和 selectTaskHallByDept 方法: - 添加明细完善人、接收人、任务类型的关联查询 - 扩展搜索条件,支持搜索品牌、类目、平台、任务类型、发布人部门、一级需求人、一级需求部门、明细完善人、接收人、任务描述、产品条码等所有任务卡片信息 2. TaskService getCompletedTasks 方法: - 扩展搜索条件,使用 apply 方法添加自定义 SQL,支持搜索任务卡片的所有信息 3. TaskItemMapper 所有子任务查询方法: - selectAvailableItems、selectAvailableItemsByTaskTypes、selectInProgressItems、selectCompletedItems - 扩展搜索条件,支持搜索子任务卡片的所有信息,包括主任务和子任务的所有关联信息 --- .../com/designhub/mapper/TaskItemMapper.java | 80 +++++++++++++++++-- .../java/com/designhub/mapper/TaskMapper.java | 42 +++++++++- .../com/designhub/service/TaskService.java | 30 ++++++- 3 files changed, 141 insertions(+), 11 deletions(-) diff --git a/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java b/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java index 8aabdd8..d94ed5c 100644 --- a/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java +++ b/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java @@ -59,7 +59,17 @@ public interface TaskItemMapper extends BaseMapper { " OR t.task_no LIKE CONCAT('%', #{keyword}, '%') " + " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%') " + " OR t.spu_info LIKE CONCAT('%', #{keyword}, '%') " + - " OR u.real_name LIKE CONCAT('%', #{keyword}, '%'))" + + " OR COALESCE(t.remark, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.description, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.product_barcodes, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR u.real_name LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(pp.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(ppd.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dc.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(b.brand_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(c.category_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(p.platform_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dt.type_name, '') LIKE CONCAT('%', #{keyword}, '%'))" + " " + "ORDER BY ti.create_time DESC" + "") @@ -108,7 +118,17 @@ public interface TaskItemMapper extends BaseMapper { " OR t.task_no LIKE CONCAT('%', #{keyword}, '%') " + " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%') " + " OR t.spu_info LIKE CONCAT('%', #{keyword}, '%') " + - " OR u.real_name LIKE CONCAT('%', #{keyword}, '%'))" + + " OR COALESCE(t.remark, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.description, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.product_barcodes, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR u.real_name LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(pp.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(ppd.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dc.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(b.brand_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(c.category_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(p.platform_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dt.type_name, '') LIKE CONCAT('%', #{keyword}, '%'))" + " " + " " + " AND ti.task_type_id IN " + @@ -164,9 +184,21 @@ public interface TaskItemMapper extends BaseMapper { " AND ti.receiver_dept_id = #{deptId} " + " " + " AND (t.title LIKE CONCAT('%', #{keyword}, '%') " + + " OR t.task_no LIKE CONCAT('%', #{keyword}, '%') " + + " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%') " + " OR t.spu_info LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.remark, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.description, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.product_barcodes, '') LIKE CONCAT('%', #{keyword}, '%') " + " OR u.real_name LIKE CONCAT('%', #{keyword}, '%') " + - " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%'))" + + " OR COALESCE(pp.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(ppd.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dc.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(r.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(b.brand_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(c.category_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(p.platform_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dt.type_name, '') LIKE CONCAT('%', #{keyword}, '%'))" + " " + "ORDER BY ti.update_time DESC" + "") @@ -217,9 +249,21 @@ public interface TaskItemMapper extends BaseMapper { " AND ti.receiver_dept_id = #{deptId} " + " " + " AND (t.title LIKE CONCAT('%', #{keyword}, '%') " + + " OR t.task_no LIKE CONCAT('%', #{keyword}, '%') " + + " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%') " + " OR t.spu_info LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.remark, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.description, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.product_barcodes, '') LIKE CONCAT('%', #{keyword}, '%') " + " OR u.real_name LIKE CONCAT('%', #{keyword}, '%') " + - " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%'))" + + " OR COALESCE(pp.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(ppd.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dc.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(r.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(b.brand_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(c.category_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(p.platform_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dt.type_name, '') LIKE CONCAT('%', #{keyword}, '%'))" + " " + "ORDER BY ti.complete_time DESC" + "") @@ -269,9 +313,21 @@ public interface TaskItemMapper extends BaseMapper { " " + " " + " AND (t.title LIKE CONCAT('%', #{keyword}, '%') " + + " OR t.task_no LIKE CONCAT('%', #{keyword}, '%') " + + " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%') " + " OR t.spu_info LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.remark, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.description, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.product_barcodes, '') LIKE CONCAT('%', #{keyword}, '%') " + " OR u.real_name LIKE CONCAT('%', #{keyword}, '%') " + - " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%'))" + + " OR COALESCE(pp.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(ppd.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dc.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(r.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(b.brand_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(c.category_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(p.platform_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dt.type_name, '') LIKE CONCAT('%', #{keyword}, '%'))" + " " + "ORDER BY ti.update_time DESC" + "") @@ -320,9 +376,21 @@ public interface TaskItemMapper extends BaseMapper { " " + " " + " AND (t.title LIKE CONCAT('%', #{keyword}, '%') " + + " OR t.task_no LIKE CONCAT('%', #{keyword}, '%') " + + " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%') " + " OR t.spu_info LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.remark, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.description, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.product_barcodes, '') LIKE CONCAT('%', #{keyword}, '%') " + " OR u.real_name LIKE CONCAT('%', #{keyword}, '%') " + - " OR ti.item_no LIKE CONCAT('%', #{keyword}, '%'))" + + " OR COALESCE(pp.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(ppd.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dc.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(r.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(b.brand_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(c.category_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(p.platform_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dt.type_name, '') LIKE CONCAT('%', #{keyword}, '%'))" + " " + "ORDER BY ti.complete_time DESC" + "") diff --git a/backend/src/main/java/com/designhub/mapper/TaskMapper.java b/backend/src/main/java/com/designhub/mapper/TaskMapper.java index 223103d..dc7b92b 100644 --- a/backend/src/main/java/com/designhub/mapper/TaskMapper.java +++ b/backend/src/main/java/com/designhub/mapper/TaskMapper.java @@ -30,7 +30,10 @@ public interface TaskMapper extends BaseMapper { " p.platform_name AS platform_name, " + " approver.real_name AS current_approver_name, " + " primary_user.real_name AS primary_publisher_name, " + - " primary_dept.dept_name AS primary_publisher_dept_name " + + " primary_dept.dept_name AS primary_publisher_dept_name, " + + " detail_completer.real_name AS detail_completer_name, " + + " receiver.real_name AS receiver_name, " + + " dt.type_name AS task_type_name " + "FROM task t " + "LEFT JOIN sys_user u ON t.publisher_id = u.id " + "LEFT JOIN sys_dept d ON t.publisher_dept_id = d.id " + @@ -40,6 +43,9 @@ public interface TaskMapper extends BaseMapper { "LEFT JOIN sys_user approver ON t.current_approver_id = approver.id " + "LEFT JOIN sys_user primary_user ON t.primary_publisher_id = primary_user.id " + "LEFT JOIN sys_dept primary_dept ON t.primary_publisher_dept_id = primary_dept.id " + + "LEFT JOIN sys_user detail_completer ON t.detail_completer_id = detail_completer.id " + + "LEFT JOIN sys_user receiver ON t.receiver_id = receiver.id " + + "LEFT JOIN task_type dt ON t.task_type_id = dt.id " + "WHERE t.status = 'pending' AND t.approval_status = 'approved' AND t.deleted = 0 AND (t.is_pipeline = 0 OR t.is_pipeline IS NULL)" + " AND t.task_type_id = #{taskTypeId}" + " AND t.demand_type_id = #{demandTypeId}" + @@ -54,7 +60,18 @@ public interface TaskMapper extends BaseMapper { " OR t.task_no LIKE CONCAT('%', #{keyword}, '%') " + " OR t.spu_info LIKE CONCAT('%', #{keyword}, '%') " + " OR t.remark LIKE CONCAT('%', #{keyword}, '%') " + - " OR u.real_name LIKE CONCAT('%', #{keyword}, '%'))" + + " OR COALESCE(t.description, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.product_barcodes, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR u.real_name LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(d.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(b.brand_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(c.category_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(p.platform_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dt.type_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(primary_user.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(primary_dept.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(detail_completer.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(receiver.real_name, '') LIKE CONCAT('%', #{keyword}, '%'))" + "" + " AND u.real_name LIKE CONCAT('%', #{publisherName}, '%')" + " AND DATE(t.create_time) = CURDATE()" + @@ -93,7 +110,10 @@ public interface TaskMapper extends BaseMapper { " p.platform_name AS platform_name, " + " approver.real_name AS current_approver_name, " + " primary_user.real_name AS primary_publisher_name, " + - " primary_dept.dept_name AS primary_publisher_dept_name " + + " primary_dept.dept_name AS primary_publisher_dept_name, " + + " detail_completer.real_name AS detail_completer_name, " + + " receiver.real_name AS receiver_name, " + + " dt.type_name AS task_type_name " + "FROM task t " + "LEFT JOIN sys_user u ON t.publisher_id = u.id " + "LEFT JOIN sys_dept d ON t.publisher_dept_id = d.id " + @@ -103,6 +123,9 @@ public interface TaskMapper extends BaseMapper { "LEFT JOIN sys_user approver ON t.current_approver_id = approver.id " + "LEFT JOIN sys_user primary_user ON t.primary_publisher_id = primary_user.id " + "LEFT JOIN sys_dept primary_dept ON t.primary_publisher_dept_id = primary_dept.id " + + "LEFT JOIN sys_user detail_completer ON t.detail_completer_id = detail_completer.id " + + "LEFT JOIN sys_user receiver ON t.receiver_id = receiver.id " + + "LEFT JOIN task_type dt ON t.task_type_id = dt.id " + "WHERE t.status = 'pending' AND t.approval_status = 'approved' AND t.deleted = 0 AND (t.is_pipeline = 0 OR t.is_pipeline IS NULL)" + "" + " AND t.task_type_id IN " + @@ -123,7 +146,18 @@ public interface TaskMapper extends BaseMapper { " OR t.task_no LIKE CONCAT('%', #{keyword}, '%') " + " OR t.spu_info LIKE CONCAT('%', #{keyword}, '%') " + " OR t.remark LIKE CONCAT('%', #{keyword}, '%') " + - " OR u.real_name LIKE CONCAT('%', #{keyword}, '%'))" + + " OR COALESCE(t.description, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(t.product_barcodes, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR u.real_name LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(d.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(b.brand_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(c.category_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(p.platform_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(dt.type_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(primary_user.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(primary_dept.dept_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(detail_completer.real_name, '') LIKE CONCAT('%', #{keyword}, '%') " + + " OR COALESCE(receiver.real_name, '') LIKE CONCAT('%', #{keyword}, '%'))" + "" + " AND u.real_name LIKE CONCAT('%', #{publisherName}, '%')" + " AND DATE(t.create_time) = CURDATE()" + diff --git a/backend/src/main/java/com/designhub/service/TaskService.java b/backend/src/main/java/com/designhub/service/TaskService.java index e45621e..346d2b6 100644 --- a/backend/src/main/java/com/designhub/service/TaskService.java +++ b/backend/src/main/java/com/designhub/service/TaskService.java @@ -1082,12 +1082,40 @@ public class TaskService { log.info("接单部门用户查看自己接单的已完成任务: userId={}", userId); } - // 4. 关键词搜索 + // 4. 关键词搜索(支持搜索任务卡片的所有信息) if (org.springframework.util.StringUtils.hasText(keyword)) { wrapper.and(w -> w .like(Task::getTitle, keyword) .or() .like(Task::getTaskNo, keyword) + .or() + .like(Task::getSpuInfo, keyword) + .or() + .like(Task::getRemark, keyword) + .or() + .apply("EXISTS (SELECT 1 FROM sys_user u WHERE u.id = t.publisher_id AND u.real_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("EXISTS (SELECT 1 FROM sys_dept d WHERE d.id = t.publisher_dept_id AND d.dept_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("EXISTS (SELECT 1 FROM brand b WHERE b.id = t.brand_id AND b.brand_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("EXISTS (SELECT 1 FROM category c WHERE c.id = t.category_id AND c.category_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("EXISTS (SELECT 1 FROM platform p WHERE p.id = t.platform_id AND p.platform_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("EXISTS (SELECT 1 FROM task_type dt WHERE dt.id = t.task_type_id AND dt.type_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("EXISTS (SELECT 1 FROM sys_user pp WHERE pp.id = t.primary_publisher_id AND pp.real_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("EXISTS (SELECT 1 FROM sys_dept pd WHERE pd.id = t.primary_publisher_dept_id AND pd.dept_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("EXISTS (SELECT 1 FROM sys_user dc WHERE dc.id = t.detail_completer_id AND dc.real_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("EXISTS (SELECT 1 FROM sys_user r WHERE r.id = t.receiver_id AND r.real_name LIKE CONCAT('%', {0}, '%'))", keyword) + .or() + .apply("COALESCE(t.description, '') LIKE CONCAT('%', {0}, '%')", keyword) + .or() + .apply("COALESCE(t.product_barcodes, '') LIKE CONCAT('%', {0}, '%')", keyword) ); }