feat: 扩展任务搜索功能,支持搜索任务卡片的所有信息

1. TaskMapper selectTaskHall 和 selectTaskHallByDept 方法:
   - 添加明细完善人、接收人、任务类型的关联查询
   - 扩展搜索条件,支持搜索品牌、类目、平台、任务类型、发布人部门、一级需求人、一级需求部门、明细完善人、接收人、任务描述、产品条码等所有任务卡片信息

2. TaskService getCompletedTasks 方法:
   - 扩展搜索条件,使用 apply 方法添加自定义 SQL,支持搜索任务卡片的所有信息

3. TaskItemMapper 所有子任务查询方法:
   - selectAvailableItems、selectAvailableItemsByTaskTypes、selectInProgressItems、selectCompletedItems
   - 扩展搜索条件,支持搜索子任务卡片的所有信息,包括主任务和子任务的所有关联信息
This commit is contained in:
Your Name 2026-01-22 14:48:09 +08:00
parent 77175573c7
commit 895de04138
3 changed files with 141 additions and 11 deletions

View File

@ -59,7 +59,17 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
" 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}, '%'))" +
"</if> " +
"ORDER BY ti.create_time DESC" +
"</script>")
@ -108,7 +118,17 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
" 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}, '%'))" +
"</if> " +
"<if test='allowedTaskTypeIds != null and allowedTaskTypeIds.size() > 0'> " +
" AND ti.task_type_id IN " +
@ -164,9 +184,21 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
" <if test='deptId != null'> AND ti.receiver_dept_id = #{deptId} </if>" +
" <if test='keyword != null and keyword != \"\"'> " +
" 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}, '%'))" +
" </if>" +
"ORDER BY ti.update_time DESC" +
"</script>")
@ -217,9 +249,21 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
" <if test='deptId != null'> AND ti.receiver_dept_id = #{deptId} </if>" +
" <if test='keyword != null and keyword != \"\"'> " +
" 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}, '%'))" +
" </if>" +
"ORDER BY ti.complete_time DESC" +
"</script>")
@ -269,9 +313,21 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
" </foreach> " +
" <if test='keyword != null and keyword != \"\"'> " +
" 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}, '%'))" +
" </if>" +
"ORDER BY ti.update_time DESC" +
"</script>")
@ -320,9 +376,21 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
" </foreach> " +
" <if test='keyword != null and keyword != \"\"'> " +
" 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}, '%'))" +
" </if>" +
"ORDER BY ti.complete_time DESC" +
"</script>")

View File

@ -30,7 +30,10 @@ public interface TaskMapper extends BaseMapper<Task> {
" 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<Task> {
"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)" +
"<if test='taskTypeId != null'> AND t.task_type_id = #{taskTypeId}</if>" +
"<if test='demandTypeId != null'> AND t.demand_type_id = #{demandTypeId}</if>" +
@ -54,7 +60,18 @@ public interface TaskMapper extends BaseMapper<Task> {
" 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}, '%'))" +
"</if>" +
"<if test='publisherName != null and publisherName != \"\"'> AND u.real_name LIKE CONCAT('%', #{publisherName}, '%')</if>" +
"<if test='timeRange != null and timeRange == \"today\"'> AND DATE(t.create_time) = CURDATE()</if>" +
@ -93,7 +110,10 @@ public interface TaskMapper extends BaseMapper<Task> {
" 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<Task> {
"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)" +
"<if test='allowedTaskTypeIds != null and allowedTaskTypeIds.size() > 0'>" +
" AND t.task_type_id IN " +
@ -123,7 +146,18 @@ public interface TaskMapper extends BaseMapper<Task> {
" 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}, '%'))" +
"</if>" +
"<if test='publisherName != null and publisherName != \"\"'> AND u.real_name LIKE CONCAT('%', #{publisherName}, '%')</if>" +
"<if test='timeRange != null and timeRange == \"today\"'> AND DATE(t.create_time) = CURDATE()</if>" +

View File

@ -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)
);
}