feat: 扩展任务搜索功能,支持搜索任务卡片的所有信息
1. TaskMapper selectTaskHall 和 selectTaskHallByDept 方法: - 添加明细完善人、接收人、任务类型的关联查询 - 扩展搜索条件,支持搜索品牌、类目、平台、任务类型、发布人部门、一级需求人、一级需求部门、明细完善人、接收人、任务描述、产品条码等所有任务卡片信息 2. TaskService getCompletedTasks 方法: - 扩展搜索条件,使用 apply 方法添加自定义 SQL,支持搜索任务卡片的所有信息 3. TaskItemMapper 所有子任务查询方法: - selectAvailableItems、selectAvailableItemsByTaskTypes、selectInProgressItems、selectCompletedItems - 扩展搜索条件,支持搜索子任务卡片的所有信息,包括主任务和子任务的所有关联信息
This commit is contained in:
parent
77175573c7
commit
895de04138
@ -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>")
|
||||
|
||||
@ -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>" +
|
||||
|
||||
@ -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)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user