|
|
@@ -143,39 +143,39 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
new LambdaQueryWrapper<CostProjectTaskProccess>()
|
|
|
.eq(CostProjectTaskProccess::getTaskId, task.getId())
|
|
|
);
|
|
|
-
|
|
|
+
|
|
|
if (process == null) {
|
|
|
return "green"; // 默认绿色预警
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 获取当前环节的节点信息
|
|
|
CostProjectTaskNode currentNode = costProjectTaskNodeManager.getOne(
|
|
|
new LambdaQueryWrapper<CostProjectTaskNode>()
|
|
|
.eq(CostProjectTaskNode::getTaskId, task.getId())
|
|
|
.eq(CostProjectTaskNode::getProcessNodeKey, task.getCurrentNode())
|
|
|
);
|
|
|
-
|
|
|
+
|
|
|
// 获取当前时间
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
-
|
|
|
+
|
|
|
// 1. 如果超过流程期限,红色预警
|
|
|
- if (process.getPlannedAuditEndDate() != null &&
|
|
|
+ if (process.getPlannedAuditEndDate() != null &&
|
|
|
now.toLocalDate().isAfter(process.getPlannedAuditEndDate())) {
|
|
|
return "red";
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 2. 如果当前环节有截止时间且已超过,但未超过流程期限,黄色预警
|
|
|
- if (currentNode != null && currentNode.getEndTime() != null &&
|
|
|
+ if (currentNode != null && currentNode.getEndTime() != null &&
|
|
|
now.isAfter(currentNode.getEndTime())) {
|
|
|
// 检查是否超过流程期限
|
|
|
- if (process.getPlannedAuditEndDate() != null &&
|
|
|
+ if (process.getPlannedAuditEndDate() != null &&
|
|
|
now.toLocalDate().isAfter(process.getPlannedAuditEndDate())) {
|
|
|
return "red"; // 超过流程期限,红色预警
|
|
|
} else {
|
|
|
return "yellow"; // 超过环节期限但未超过流程期限,黄色预警
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 3. 默认绿色预警(在办理期限内)
|
|
|
return "green";
|
|
|
}
|
|
|
@@ -504,7 +504,7 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
// 判断是中止还是恢复
|
|
|
String status = req.getStatus() == null ? TaskStatusConstant.SUSPENDED.getStatusCode() : TaskStatusConstant.AUDITING.getStatusCode();
|
|
|
boolean isSuspend = TaskStatusConstant.SUSPENDED.getStatusCode().equals(status);
|
|
|
-
|
|
|
+
|
|
|
// 如果是主任务 同步所有子任务的中止/恢复状态
|
|
|
if ("0".equals(task.getPid())) {
|
|
|
List<CostProjectTask> children = costProjectTaskManager.list(
|
|
|
@@ -673,7 +673,7 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
if (nextNode == null) {
|
|
|
throw new RuntimeException("当前节点已是最后一步,无法扭转");
|
|
|
}
|
|
|
- String nextNodeStatus = nextNode.getNodeKey();
|
|
|
+ String nextNodeStatus = nextNode.getNodeKey();
|
|
|
List<CostProjectTask> children = costProjectTaskManager.list(
|
|
|
new LambdaQueryWrapper<CostProjectTask>()
|
|
|
.eq(CostProjectTask::getPid, nTask.getId())
|
|
|
@@ -687,13 +687,13 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
if (!allChildrenCompleted) {
|
|
|
throw new RuntimeException("子任务未全部办结,主任务无法扭转");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 主任务扭转到下一节点
|
|
|
nTask.setStatus(TaskStatusConstant.AUDITING.getStatusCode());
|
|
|
nTask.setCurrentNode(nextNodeStatus);
|
|
|
nTask.setIsGd("0");
|
|
|
costProjectTaskManager.updateById(nTask);
|
|
|
-
|
|
|
+
|
|
|
// 子任务同步节点流转,根据节点设置对应状态
|
|
|
String childStatus = "";
|
|
|
switch (nextNodeStatus) {
|
|
|
@@ -709,7 +709,7 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
childStatus = TaskStatusConstant.AUDITING.getStatusCode();
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 同步所有非中止状态的子任务
|
|
|
for (CostProjectTask child : children) {
|
|
|
if (!child.getStatus().equals(TaskStatusConstant.SUSPENDED.getStatusCode())) {
|
|
|
@@ -850,16 +850,95 @@ public class CostProjectTaskManagerImpl extends BaseManagerImpl<CostProjectTaskD
|
|
|
// 获取当前用户
|
|
|
IUser currentUser = ContextUtil.getCurrentUser();
|
|
|
String currentUserId = currentUser.getUserId();
|
|
|
-
|
|
|
// 查询发送给当前用户的消息
|
|
|
LambdaQueryWrapper<CostNotice> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
queryWrapper.eq(CostNotice::getIsDeleted, "0")
|
|
|
// .eq(CostNotice::getSendTarget, currentUserId)
|
|
|
.orderByDesc(CostNotice::getCreateTime)
|
|
|
.last("limit 8");
|
|
|
+ if(!currentUser.isAdmin()){
|
|
|
+ queryWrapper.eq(CostNotice::getSendTarget, currentUserId);
|
|
|
+ }
|
|
|
return costNoticeManager.list(queryWrapper);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public IPage<CostProjectTask> pageListForReviewTaskChild(CostTaskReviewPageReq req) {
|
|
|
+ // 获取当前用户
|
|
|
+ IUser currentUser = ContextUtil.getCurrentUser();
|
|
|
+ String currentUserId = currentUser.getUserId();
|
|
|
+
|
|
|
+ // 1. 先查询当前用户有权限的立项(负责人或项目组成员)
|
|
|
+ LambdaQueryWrapper<CostProjectApproval> approvalQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ approvalQueryWrapper.eq(CostProjectApproval::getIsDeleted, "0");
|
|
|
+ approvalQueryWrapper.and(wrapper -> wrapper
|
|
|
+ .eq(CostProjectApproval::getLeaderId, currentUserId)
|
|
|
+ .or(projectMembersWrapper -> {
|
|
|
+ projectMembersWrapper.like(CostProjectApproval::getProjectMembers, currentUserId);
|
|
|
+ })
|
|
|
+ );
|
|
|
+
|
|
|
+ List<CostProjectApproval> accessibleApprovals = costProjectApprovalManager.list(approvalQueryWrapper);
|
|
|
+
|
|
|
+ // 如果没有权限的立项,返回空结果
|
|
|
+ if (accessibleApprovals.isEmpty()) {
|
|
|
+ return new Page<>(req.getPageNum(), req.getPageSize());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取有权限的立项ID列表
|
|
|
+ List<String> accessibleProjectIds = accessibleApprovals.stream()
|
|
|
+ .map(CostProjectApproval::getProjectId)
|
|
|
+ .distinct()
|
|
|
+ .collect(java.util.stream.Collectors.toList());
|
|
|
+
|
|
|
+ if (req.getAreaCode()!=null){
|
|
|
+ List<CostProjectTaskApproval> list = costProjectTaskApprovalManager.list(
|
|
|
+ new LambdaQueryWrapper<CostProjectTaskApproval>().eq(CostProjectTaskApproval::getAreaCode, req.getAreaCode())
|
|
|
+ );
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ return new Page<>(req.getPageNum(), req.getPageSize());
|
|
|
+ }
|
|
|
+ List<String> projectIds =
|
|
|
+ list.stream().map(CostProjectTaskApproval::getProjectId).collect(Collectors.toList());
|
|
|
+ accessibleProjectIds.addAll(projectIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 构建任务查询条件
|
|
|
+ LambdaQueryWrapper<CostProjectTask> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+
|
|
|
+ // 查询未删除的记录
|
|
|
+ queryWrapper.eq(CostProjectTask::getIsDeleted, "0");
|
|
|
+
|
|
|
+ // 查询根任务(pid为0)
|
|
|
+ queryWrapper.ne(CostProjectTask::getPid, "0");
|
|
|
+
|
|
|
+ // 只查询当前用户有权限的立项对应的任务
|
|
|
+ queryWrapper.in(CostProjectTask::getProjectId, accessibleProjectIds);
|
|
|
+
|
|
|
+ // 根据请求参数添加查询条件
|
|
|
+ if (StringUtil.isNotEmpty(req.getProjectName())) {
|
|
|
+ queryWrapper.like(CostProjectTask::getProjectName, req.getProjectName());
|
|
|
+ }
|
|
|
+ if (StringUtil.isNotEmpty(req.getAuditedUnitName())) {
|
|
|
+ queryWrapper.like(CostProjectTask::getAuditedUnitName, req.getAuditedUnitName());
|
|
|
+ }
|
|
|
+ if (StringUtil.isNotEmpty(req.getStatus())) {
|
|
|
+ queryWrapper.eq(CostProjectTask::getStatus, req.getStatus());
|
|
|
+ }
|
|
|
+ if (StringUtil.isNotEmpty(req.getYear())) {
|
|
|
+ queryWrapper.eq(CostProjectTask::getYear, req.getYear());
|
|
|
+ }
|
|
|
+ queryWrapper.eq(req.getCurrentNode()!=null,CostProjectTask::getCurrentNode,req.getCurrentNode());
|
|
|
+ queryWrapper.ne(req.getNCurrentNode()!=null,CostProjectTask::getCurrentNode,req.getNCurrentNode());
|
|
|
+ queryWrapper.ne(req.getNStatus()!=null,CostProjectTask::getStatus,req.getNStatus() );
|
|
|
+ // 按创建时间倒序排列
|
|
|
+ queryWrapper.orderByDesc(CostProjectTask::getCreateTime);
|
|
|
+
|
|
|
+ Page<CostProjectTask> page = new Page<>(req.getPageNum(), req.getPageSize());
|
|
|
+ IPage<CostProjectTask> result = costProjectTaskManager.page(page, queryWrapper);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
private List<String> getAllChildCatalogIds(String catalogId) {
|
|
|
List<String> result = new ArrayList<>();
|
|
|
result.add(catalogId);
|