diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowCcController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowCcController.java index ea434d7..ff5dcf1 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowCcController.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowCcController.java @@ -66,7 +66,14 @@ public class HrmFlowCcController extends BaseController { Long userId = LoginHelper.getUserId(); return toAjax(service.markRead(ccId, userId)); } - + /** + * 标记抄送未读(新增) + */ + @PostMapping("/{ccId}/unread") + public R unread(@PathVariable Long ccId) { + Long userId = LoginHelper.getUserId(); + return toAjax(service.markUnread(ccId, userId)); + } @GetMapping("/ping") public R ping(@RequestParam @NotNull String x) { return R.ok(x); diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowCcService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowCcService.java index 9dab1ca..a94c427 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowCcService.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowCcService.java @@ -27,5 +27,9 @@ public interface IHrmFlowCcService { * 标记已读 */ Boolean markRead(Long ccId, Long userId); + /** + * 标记未读 + */ + Boolean markUnread(Long ccId, Long userId); } diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowCcServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowCcServiceImpl.java index 2d4a292..28db56c 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowCcServiceImpl.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowCcServiceImpl.java @@ -99,6 +99,23 @@ public class HrmFlowCcServiceImpl implements IHrmFlowCcService { .eq(HrmFlowCc::getDelFlag, 0) ) > 0; } + /** + * 标记未读 + */ + @Override + public Boolean markUnread(Long ccId, Long userId) { + if (ccId == null || userId == null) { + return false; + } + return baseMapper.update( + null, + Wrappers.lambdaUpdate() + .set(HrmFlowCc::getReadFlag, 0) + .eq(HrmFlowCc::getCcId, ccId) + .eq(HrmFlowCc::getCcUserId, userId) + .eq(HrmFlowCc::getDelFlag, 0) + ) > 0; + } private LambdaQueryWrapper buildQueryWrapper(HrmFlowCcBo bo) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java index d44d20f..b2b1fa9 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java @@ -15,7 +15,6 @@ import com.ruoyi.system.domain.SysOss; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Date; import java.util.List; @@ -286,7 +285,20 @@ public class SysOaProjectVo { private Long deliveryOrderCount; - /** 进度步骤总数(列表请求 scheduleStats=true 时由后端填充) */ + /** 列表 SQL 聚合:任务/进度总览 */ + @ExcelIgnore + private Long taskFinishCount; + + @ExcelIgnore + private Long taskTotalCount; + + @ExcelIgnore + private Long scheduleTotalCount; + + @ExcelIgnore + private Long scheduleFinishCount; + + /** 进度步骤汇总(列表请求 scheduleStats=true 时由服务层填充) */ @ExcelIgnore private Long scheduleStepTotal; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java index 872a2a6..6adc965 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java @@ -251,6 +251,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { } qw.eq(bo.getCustomerId() != null, "p.customer_id", bo.getCustomerId()); qw.orderByDesc("p.is_top").orderByDesc("p.create_time"); + qw.groupBy("p.project_id"); return qw; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java index 7c56621..8835b78 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java @@ -154,6 +154,7 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService { QueryWrapper lqw = Wrappers.query(); lqw.eq("sot.del_flag", 0); lqw.eq(bo.getProjectId()!=null, "sot.project_id", bo.getProjectId()); + lqw.eq(bo.getTaskId()!=null, "sot.task_id", bo.getTaskId()); lqw.eq(bo.getCreateUserId()!=null, "sot.create_user_id", bo.getCreateUserId()); lqw.eq(bo.getWorkerId()!=null, "sot.worker_id", bo.getWorkerId()); lqw.eq(bo.getProjectId()!=null, "sot.project_id", bo.getProjectId()); diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml index 17a1595..dd9ebdf 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml @@ -310,9 +310,15 @@ TIMESTAMPDIFF(DAY, NOW(), p.postpone_time) AS remainTime, p.customer_id AS customerId, c.name AS customerName, - p.is_top AS isTop + p.is_top AS isTop, + COUNT(sot.task_id) AS taskTotalCount , + SUM(CASE WHEN sot.status = 1 THEN 1 ELSE 0 END) AS taskFinishCount, + COUNT(ops.schedule_id) AS scheduleTotalCount, + SUM(CASE WHEN ops.status = 2 THEN 1 ELSE 0 END) AS scheduleFinishCount FROM sys_oa_project p LEFT JOIN oa_customer c ON p.customer_id = c.customer_id + left join sys_oa_task sot on sot.project_id = p.project_id and sot.del_flag = 0 + left join oa_project_schedule ops on ops.project_id = p.project_id and ops.del_flag = 0 ${ew.getCustomSqlSegment} diff --git a/ruoyi-ui/src/api/hrm/cc.js b/ruoyi-ui/src/api/hrm/cc.js index 1bf5c74..a6b8998 100644 --- a/ruoyi-ui/src/api/hrm/cc.js +++ b/ruoyi-ui/src/api/hrm/cc.js @@ -16,7 +16,13 @@ export function readCc(ccId) { method: 'post' }) } - +// 标记抄送为未读 +export function unreadCc(ccId) { + return request({ + url: `/hrm/flow/cc/${ccId}/unread`, + method: 'post' + }) +} // 手动抄送 export function addCc(data) { return request({ diff --git a/ruoyi-ui/src/store/modules/oaProjectDashboard2.js b/ruoyi-ui/src/store/modules/oaProjectDashboard2.js index 6db4e82..a45e626 100644 --- a/ruoyi-ui/src/store/modules/oaProjectDashboard2.js +++ b/ruoyi-ui/src/store/modules/oaProjectDashboard2.js @@ -24,7 +24,7 @@ const state = { projectQuery: { pageNum: 1, - pageSize: 10, + pageSize: 15, keyword: '' }, projectList: [], diff --git a/ruoyi-ui/src/views/hrm/flow/cc.vue b/ruoyi-ui/src/views/hrm/flow/cc.vue index 49bc06b..a2ca8d4 100644 --- a/ruoyi-ui/src/views/hrm/flow/cc.vue +++ b/ruoyi-ui/src/views/hrm/flow/cc.vue @@ -56,8 +56,8 @@