fix(日志管理): 修复日志管理的一些问题。
fix(项目任务): 任务完成后需要依然能够修改工作日志,但是只能修改工作内容和上传附件;任务完成后,协办人的工作日志不应该能删除、所有任务里的成员不能新增工作日志。
This commit is contained in:
@@ -105,6 +105,7 @@ public class TaskWorklogServiceImpl implements TaskWorklogService {
|
||||
permission = ProjectTaskConstants.PERMISSION_WORKLOG)
|
||||
public Long createWorklog(Long projectId, Long executionId, Long taskId, TaskWorklogSaveReqVO reqVO) {
|
||||
ProjectTaskDO task = validateEditableContext(projectId, executionId, taskId);
|
||||
validateCreateAllowed(task);
|
||||
validateLeafTask(taskId);
|
||||
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
||||
validateFileWorklogPermission(taskId, task.getOwnerId(), loginUserId);
|
||||
@@ -177,6 +178,7 @@ public class TaskWorklogServiceImpl implements TaskWorklogService {
|
||||
permission = ProjectTaskConstants.PERMISSION_WORKLOG)
|
||||
public void deleteWorklog(Long projectId, Long executionId, Long taskId, Long worklogId) {
|
||||
ProjectTaskDO task = validateEditableContext(projectId, executionId, taskId);
|
||||
validateDeleteAllowed(task);
|
||||
TaskWorklogDO worklog = loadWorklog(worklogId, taskId);
|
||||
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
||||
boolean isFiler = Objects.equals(worklog.getUserId(), loginUserId);
|
||||
@@ -240,24 +242,30 @@ public class TaskWorklogServiceImpl implements TaskWorklogService {
|
||||
ProjectExecutionDO execution = validateExecutionExists(projectId, executionId);
|
||||
validateAllowEdit(ProjectExecutionConstants.OBJECT_TYPE, execution.getStatusCode());
|
||||
ProjectTaskDO task = validateTaskExists(projectId, executionId, taskId);
|
||||
// 任务层放宽:completed 状态下非 owner(即协办人)允许继续维护自己的工时(§4.2.4 矩阵)。
|
||||
// 其他状态(pending / active / paused / cancelled)仍按 allow_edit 判定,owner 在 completed 下被拦截,
|
||||
// 避免与"完成时硬置进度 100%"冲突。
|
||||
if (!isCompletedAssigneeWorklogContext(task)) {
|
||||
// 工作日志维护在任务 completed 状态下统一放行;新增/删除是否允许由各自接口单独判定。
|
||||
if (!isCompletedWorklogContext(task)) {
|
||||
validateAllowEdit(ProjectTaskConstants.OBJECT_TYPE, task.getStatusCode());
|
||||
}
|
||||
return task;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否处于"任务已完成、协办人维护工时"的放行场景。
|
||||
* 是否处于“任务已完成”的工作日志维护场景。
|
||||
*/
|
||||
private boolean isCompletedAssigneeWorklogContext(ProjectTaskDO task) {
|
||||
if (!"completed".equals(task.getStatusCode())) {
|
||||
return false;
|
||||
private boolean isCompletedWorklogContext(ProjectTaskDO task) {
|
||||
return "completed".equals(task.getStatusCode());
|
||||
}
|
||||
|
||||
private void validateCreateAllowed(ProjectTaskDO task) {
|
||||
if (isCompletedWorklogContext(task)) {
|
||||
throw exception(ErrorCodeConstants.PROJECT_TASK_WORKLOG_CREATE_NOT_ALLOWED_BY_TASK_STATUS);
|
||||
}
|
||||
}
|
||||
|
||||
private void validateDeleteAllowed(ProjectTaskDO task) {
|
||||
if (isCompletedWorklogContext(task)) {
|
||||
throw exception(ErrorCodeConstants.PROJECT_TASK_WORKLOG_DELETE_NOT_ALLOWED_BY_TASK_STATUS);
|
||||
}
|
||||
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
||||
return loginUserId != null && !Objects.equals(loginUserId, task.getOwnerId());
|
||||
}
|
||||
|
||||
private void validateExecutionAndTaskExists(Long projectId, Long executionId, Long taskId) {
|
||||
|
||||
Reference in New Issue
Block a user