feat(oa): 添加项目置顶功能和任务关联项目进度字段

- 在项目实体类 SysOaProject 及其相关 BO、VO 类中增加 isTop 字段,用于标识项目是否置顶- 更新 SysOaProjectMapper.xml 查询语句,将 is_top 字段纳入查询结果
- 修改 SysOaProjectServiceImpl 中的查询逻辑,优先展示置顶项目,并按创建时间排序
- 在任务实体类 SysOaTask 及其相关 BO、VO 类中新增 trackId 字段,用于关联项目进度- 更新 SysOaTaskMapper.xml 查询语句,联查 oa_project_schedule_step 表获取节点信息
- 优化 SQL 查询中的字段对齐格式,提升可读性
This commit is contained in:
2025-10-22 14:19:55 +08:00
parent b132d297c0
commit fe7ac6a523
9 changed files with 38 additions and 8 deletions

View File

@@ -165,4 +165,6 @@ public class SysOaProject extends BaseEntity {
@TableField(updateStrategy = FieldStrategy.IGNORED)
private Long customerId;
//是否置顶
private Integer isTop;
}

View File

@@ -145,4 +145,7 @@ public class SysOaTask extends BaseEntity {
*/
private String files;
//关联项目进度id
private Long trackId;
}

View File

@@ -201,5 +201,7 @@ public class SysOaProjectBo extends BaseEntity {
private Long customerId;
//客户名称
private String customerName;
//是否置顶
private Integer isTop;
}

View File

@@ -188,4 +188,7 @@ public class SysOaTaskBo extends BaseEntity {
private String projectCode;
//部门id
private Long deptId;
//关联项目进度id
private Long trackId;
}

View File

@@ -267,4 +267,7 @@ public class SysOaProjectVo {
private Long customerId;
//客户名称
private String customerName;
//是否置顶
private Integer isTop;
}

View File

@@ -1,6 +1,7 @@
package com.ruoyi.oa.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@@ -108,7 +109,7 @@ public class SysOaTaskVo {
/**
* 涉及工人列表
* */
*/
private List<SysUser> workerList;
/**
@@ -216,4 +217,12 @@ public class SysOaTaskVo {
private String projectCode;
//部门名称
private String deptName;
//关联项目进度id
private Long trackId;
//联查的节点信息
private String tabNode;
private String firstLevelNode;
private String secondLevelNode;
}

View File

@@ -189,9 +189,10 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
lqw.eq(bo.getSigningCompany()!= null, SysOaProject::getSigningCompany, bo.getSigningCompany());
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,
SysOaProject::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
lqw.orderByDesc(SysOaProject::getCreateTime);
//客户id作为筛选条件
lqw.eq(bo.getCustomerId() != null, SysOaProject::getCustomerId, bo.getCustomerId());
lqw.orderByDesc(SysOaProject::getIsTop) // 置顶项目优先
.orderByDesc(SysOaProject::getCreateTime); // 同状态下按创建时间倒序(多个置顶项目按创建时间排序)
return lqw;
}

View File

@@ -308,7 +308,8 @@
p.original_finish_time,
TIMESTAMPDIFF(DAY, NOW(), p.postpone_time) AS remainTime,
p.customer_id AS customerId,
c.name AS customerName
c.name AS customerName,
p.is_top AS isTop
FROM sys_oa_project p
LEFT JOIN oa_customer c ON p.customer_id = c.customer_id
${ew.getCustomSqlSegment}
@@ -551,7 +552,8 @@
color,
trade_type,
sop.project_code,
pre_pay
pre_pay,
is_top
FROM sys_oa_project sop
INNER JOIN sys_oa_warehouse_master sown
ON sown.project_id = sop.project_id

View File

@@ -77,12 +77,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sot.update_time,
sot.del_flag,
sot.own_rank,
sot.track_id,
stepAgg.tab_node AS tabNode,
stepAgg.first_level_node AS firstLevelNode,
stepAgg.second_level_node AS secondLevelNode,
sop.project_name,
sop.project_num,
sop.project_code,
su1.nick_name AS createUserNickName,
su2.nick_name AS workerNickName,
sd.dept_name AS deptName,
su1.nick_name AS createUserNickName,
su2.nick_name AS workerNickName,
sd.dept_name AS deptName,
IF(
sot.completed_time IS NULL,
IF(
@@ -93,7 +97,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE a.task_id = sot.task_id
AND a.completed_time IS NULL
LIMIT 1
) IS NOT NULL,
) IS NOT NULL,
-- 如果子查询有值,就用它来算超期天数
DATEDIFF(
NOW(),
@@ -115,6 +119,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN sys_user su2 ON su2.user_id = sot.worker_id
LEFT JOIN sys_oa_project sop ON sop.project_id = sot.project_id
LEFT JOIN sys_dept sd ON sd.dept_id = su2.dept_id
LEFT JOIN oa_project_schedule_step stepAgg ON stepAgg.track_id = sot.track_id
${ew.getCustomSqlSegment}
</select>