diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProjectReportController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProjectReportController.java index 6021a9a..8c10ba7 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProjectReportController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaProjectReportController.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; +import com.ruoyi.oa.domain.vo.ProjectReportCardVo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -105,4 +106,14 @@ public class OaProjectReportController extends BaseController { @PathVariable Long[] reportIds) { return toAjax(iOaProjectReportService.deleteWithValidByIds(Arrays.asList(reportIds), true)); } + + + /** + * 数据统计接口 + */ + @GetMapping("/card") + public R getCardData(){ + + return R.ok(iOaProjectReportService.getCardData()); + } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/ProjectReportCardVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/ProjectReportCardVo.java new file mode 100644 index 0000000..4a9bfbd --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/ProjectReportCardVo.java @@ -0,0 +1,44 @@ +package com.ruoyi.oa.domain.vo; + + +import lombok.Data; + +@Data +public class ProjectReportCardVo { + + /** + * 今日报工 + */ + private Long todayCount; + + /** + * 昨日报工 + */ + private Long todayCountChange; + + /** + * 今日涉及项目数 + */ + private Long inProgressProjects; + + /** + * 昨日涉及项目数量 + */ + private Long projectChange; + + /** + * 涉及完成 + */ + private Long completionRate; + + /** + * 昨日涉及完成 + */ + private Long completionChange; + + /** + * 未完成(等待,未完成,待) + */ + private Long exceptions; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectReportMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectReportMapper.java index ddcad7e..d55bfe8 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectReportMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectReportMapper.java @@ -8,6 +8,8 @@ import com.ruoyi.oa.domain.vo.OaProjectReportVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; import org.apache.ibatis.annotations.Param; +import java.util.Date; + /** * 项目报工Mapper接口 * @@ -20,4 +22,7 @@ public interface OaProjectReportMapper extends BaseMapperPlus ids, Boolean isValid); + + /** + * 报工数据看板 + * @return + */ + ProjectReportCardVo getCardData(); + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectReportServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectReportServiceImpl.java index 83dc5db..f256cb1 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectReportServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectReportServiceImpl.java @@ -9,6 +9,8 @@ import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.oa.domain.vo.ProjectReportCardVo; +import liquibase.pro.packaged.D; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.OaProjectReportBo; @@ -17,8 +19,10 @@ import com.ruoyi.oa.domain.OaProjectReport; import com.ruoyi.oa.mapper.OaProjectReportMapper; import com.ruoyi.oa.service.IOaProjectReportService; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Collection; @@ -58,13 +62,14 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService { */ @Override public List queryList(OaProjectReportBo bo) { - QueryWrapper lqw = buildQueryWrapper(bo); + QueryWrapper lqw = ClearbuildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private QueryWrapper buildQueryWrapper(OaProjectReportBo bo) { Map params = bo.getParams(); QueryWrapper lqw = Wrappers.query(); + lqw.eq("opr.del_flag", 0); lqw.eq(bo.getUserId()!=null, "opr.user_id", bo.getUserId()); lqw.eq(bo.getProjectId() != null, "opr.project_id", bo.getProjectId()); @@ -86,6 +91,23 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService { return lqw; } + private QueryWrapper ClearbuildQueryWrapper(OaProjectReportBo bo) { + Map params = bo.getParams(); + QueryWrapper lqw = Wrappers.query(); + if (bo.getCreateTime() != null) { + LocalDateTime start = bo.getCreateTime() // LocalDateTime / Date 都行 + .toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate() // 先取日期 + .atStartOfDay(); // 00:00:00 + LocalDateTime end = start.plusDays(1); // 下一天 00:00:00 + + lqw.ge("create_time", start) + .lt("create_time", end); // [start, end) + } + return lqw; + } + /** * 新增项目报工 */ @@ -128,4 +150,35 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService { } return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + public ProjectReportCardVo getCardData() { + ProjectReportCardVo projectReportCardVo = new ProjectReportCardVo(); + OaProjectReportBo oaProjectReportBo = new OaProjectReportBo(); + oaProjectReportBo.setCreateTime(new Date()); + QueryWrapper oaProjectReportQueryWrapper = ClearbuildQueryWrapper(oaProjectReportBo); + // 查询今日数据 + projectReportCardVo.setTodayCount(baseMapper.selectCount(oaProjectReportQueryWrapper)); + oaProjectReportQueryWrapper.select("COUNT(DISTINCT project_id) AS cnt"); + projectReportCardVo.setInProgressProjects(baseMapper.selectCount(oaProjectReportQueryWrapper)); + projectReportCardVo.setExceptions(baseMapper.countWithPending(new Date())); + projectReportCardVo.setCompletionRate(baseMapper.countWithCompleted(new Date())); + + // 把 new Date() 换成昨天 + Date yesterday = Date.from( + LocalDate.now() + .minusDays(1) // 昨天的日期 + .atStartOfDay(ZoneId.systemDefault()) // 当天零点 + .toInstant() + ); + oaProjectReportBo.setCreateTime(yesterday); + // 查询昨日报工数据两 + projectReportCardVo.setTodayCountChange(baseMapper.selectCount(ClearbuildQueryWrapper(oaProjectReportBo))); + + // 查询昨日涉及项目数据量 + oaProjectReportQueryWrapper.select("COUNT(DISTINCT project_id) AS cnt"); + projectReportCardVo.setProjectChange(baseMapper.selectCount(oaProjectReportQueryWrapper)); + projectReportCardVo.setCompletionChange(baseMapper.countWithCompleted(yesterday)); + return projectReportCardVo; + } } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectReportMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectReportMapper.xml index 8535c91..ca65fad 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectReportMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectReportMapper.xml @@ -17,6 +17,8 @@ + + + + + + +