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 8c10ba7..39503b7 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 @@ -1,14 +1,18 @@ package com.ruoyi.oa.controller; +import java.time.LocalDate; import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; import com.ruoyi.oa.domain.vo.ProjectReportCardVo; +import com.ruoyi.oa.domain.vo.ProjectReportPieVo; +import com.ruoyi.oa.domain.vo.ProjectReportTrendVo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import com.ruoyi.common.annotation.RepeatSubmit; @@ -49,6 +53,16 @@ public class OaProjectReportController extends BaseController { return iOaProjectReportService.queryPageList(bo, pageQuery); } + /** + * 查询项目报工列表 + */ + @SaCheckPermission("oa:projectReport:list") + @GetMapping("/report") + public R> clearList( @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start, + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) { + return R.ok(iOaProjectReportService.clearList(start,end)); + } + /** * 导出项目报工列表 */ @@ -108,6 +122,19 @@ public class OaProjectReportController extends BaseController { } + + /** + * 数据统计接口 + */ + @GetMapping("/rank") + public R> getRankData(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start, + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end + ){ + + return R.ok(iOaProjectReportService.getRankData(start,end)); + } + + /** * 数据统计接口 */ @@ -116,4 +143,39 @@ public class OaProjectReportController extends BaseController { return R.ok(iOaProjectReportService.getCardData()); } + + /** + * GET /api/reports/trend?start=2025-06-01&end=2025-06-07 + */ + @GetMapping("/trend") + public R> trend( + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start, + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end + ) { + return R.ok(iOaProjectReportService.getTrend(start, end)); + } + + /** + * GET /api/reports/distribution + */ + @GetMapping("/distribution") + public R> distribution( + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start, + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end + ) { + return R.ok(iOaProjectReportService.getDistribution(start,end)); + } + + @GetMapping("/projects") + public R> getProjects( @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start, + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) { + return R.ok(iOaProjectReportService.getProjects(start,end)); + } + + + @GetMapping("/summary") + public R> summary( @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start, + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) { + return R.ok(iOaProjectReportService.getSummaryData(start,end)); + } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaApplication.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaApplication.java index b7f5987..9a23857 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaApplication.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaApplication.java @@ -58,5 +58,9 @@ public class OaApplication extends BaseEntity { * 备注 */ private String remark; + /** + * 路由类型 + */ + private String routeType; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaProjectReport.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaProjectReport.java index 9f15922..f2e5dc6 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaProjectReport.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaProjectReport.java @@ -58,4 +58,10 @@ public class OaProjectReport extends BaseEntity { */ private Long isTrip; + /** + * 报工时间 + */ + private Long workType; + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaApplicationBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaApplicationBo.java index e0d0ce9..38ac4eb 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaApplicationBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaApplicationBo.java @@ -78,5 +78,10 @@ public class OaApplicationBo extends BaseEntity { */ private String remark; + /** + * 路由类型 + */ + private String routeType; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProjectReportBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProjectReportBo.java index a06df48..03638e0 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProjectReportBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaProjectReportBo.java @@ -76,4 +76,10 @@ public class OaProjectReportBo extends BaseEntity { */ private String nickName; + /** + * 报工时间 + */ + private Long workType; + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaApplicationVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaApplicationVo.java index 4f4d9c9..81bca0f 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaApplicationVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaApplicationVo.java @@ -65,5 +65,9 @@ public class OaApplicationVo { @ExcelProperty(value = "备注") private String remark; + /** + * 路由类型 + */ + private String routeType; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectReportVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectReportVo.java index d6e9b57..7a560fb 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectReportVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectReportVo.java @@ -87,6 +87,46 @@ public class OaProjectReportVo { */ private Long isTrip; + /** + * 报工次数 + */ + private Long count; + /** + * 报工次数 + */ + private Long reportCount; + + /** + * 项目剩余时间 + */ + private Long remainTime; + + /** + * 项目状态 + */ + private Long projectStatus; + + /** + * 报工时间 + */ + private Date createTime; + + /** + * 报工时间 + */ + private Long workType; + + /** + * inWorkNum + * 国内工作时间 + */ + private Long inWorkNum; + + /** + * inWorkNum + * 国外工作时间 + */ + private Long outWorkNum; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/ProjectReportPieVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/ProjectReportPieVo.java new file mode 100644 index 0000000..d63d3a7 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/ProjectReportPieVo.java @@ -0,0 +1,11 @@ +package com.ruoyi.oa.domain.vo; + + +import lombok.Data; + +@Data +public class ProjectReportPieVo { + + private String projectName; + private Integer value; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/ProjectReportTrendVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/ProjectReportTrendVo.java new file mode 100644 index 0000000..50d95e1 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/ProjectReportTrendVo.java @@ -0,0 +1,14 @@ +package com.ruoyi.oa.domain.vo; + +import lombok.Data; + +import java.time.LocalDate; + +@Data +public class ProjectReportTrendVo { + + private LocalDate date; + + private Integer count; + +} 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 d55bfe8..cb0cfb8 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 @@ -6,9 +6,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.oa.domain.OaProjectReport; import com.ruoyi.oa.domain.vo.OaProjectReportVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; +import com.ruoyi.oa.domain.vo.ProjectReportPieVo; +import com.ruoyi.oa.domain.vo.ProjectReportTrendVo; import org.apache.ibatis.annotations.Param; +import java.time.LocalDate; import java.util.Date; +import java.util.List; /** * 项目报工Mapper接口 @@ -25,4 +29,26 @@ public interface OaProjectReportMapper extends BaseMapperPlus selectReportTrend( + @Param("start") + LocalDate start, + @Param("end") LocalDate end + ); + + /** + * 项目分布:各项目报工次数分布 + */ + List selectProjectDistribution(@Param("start") LocalDate start, @Param("end") LocalDate end); + + List selectRankData(@Param("start") LocalDate start, @Param("end") LocalDate end); + + List getProjects(@Param("start") LocalDate start, @Param("end") LocalDate end); + + List getClearList(@Param("start") LocalDate start, @Param("end") LocalDate end); + + List getSummaryData(@Param("start") LocalDate start, @Param("end") LocalDate end); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProjectReportService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProjectReportService.java index 8c685ae..337e4ab 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProjectReportService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaProjectReportService.java @@ -1,12 +1,14 @@ package com.ruoyi.oa.service; -import com.ruoyi.oa.domain.OaProjectReport; import com.ruoyi.oa.domain.vo.OaProjectReportVo; import com.ruoyi.oa.domain.bo.OaProjectReportBo; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.oa.domain.vo.ProjectReportCardVo; +import com.ruoyi.oa.domain.vo.ProjectReportPieVo; +import com.ruoyi.oa.domain.vo.ProjectReportTrendVo; +import java.time.LocalDate; import java.util.Collection; import java.util.List; @@ -54,4 +56,16 @@ public interface IOaProjectReportService { */ ProjectReportCardVo getCardData(); + public List getTrend(LocalDate start, LocalDate end); + + public List getDistribution(LocalDate start, LocalDate end); + + + List getRankData(LocalDate start, LocalDate end); + + List getProjects(LocalDate start, LocalDate end); + + List clearList(LocalDate start, LocalDate end); + + List getSummaryData(LocalDate start, LocalDate end); } 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 99df3a3..07b5dac 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 @@ -7,11 +7,12 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; 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 com.ruoyi.oa.domain.vo.ProjectReportPieVo; +import com.ruoyi.oa.domain.vo.ProjectReportTrendVo; import lombok.RequiredArgsConstructor; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.OaProjectReportBo; import com.ruoyi.oa.domain.vo.OaProjectReportVo; @@ -22,10 +23,7 @@ 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; +import java.util.*; /** * 项目报工Service业务层处理 @@ -71,6 +69,7 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService { QueryWrapper lqw = Wrappers.query(); lqw.eq("opr.del_flag", 0); lqw.eq(bo.getUserId()!=null, "opr.user_id", bo.getUserId()); + lqw.eq(bo.getWorkType()!=null, "opr.work_type", bo.getWorkType()); lqw.eq(bo.getProjectId() != null, "opr.project_id", bo.getProjectId()); lqw.like(StringUtils.isNotBlank(bo.getNickName()), "su.nick_name", bo.getNickName()); @@ -88,6 +87,7 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService { lqw.ge("opr.create_time", start) .lt("opr.create_time", end); // [start, end) } + lqw.orderByDesc("opr.create_time"); return lqw; } @@ -176,9 +176,41 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService { projectReportCardVo.setTodayCountChange(baseMapper.selectCount(ClearbuildQueryWrapper(oaProjectReportBo))); // 查询昨日涉及项目数据量 - oaProjectReportQueryWrapper.select("COUNT(DISTINCT project_id) AS cnt"); + oaProjectReportQueryWrapper.select("DISTINCT project_id"); projectReportCardVo.setProjectChange(baseMapper.selectCount(oaProjectReportQueryWrapper)); projectReportCardVo.setCompletionChange(baseMapper.countWithCompleted(yesterday)); return projectReportCardVo; } + + public List getTrend(LocalDate start, LocalDate end) { + return baseMapper.selectReportTrend(start, end); + } + + public List getDistribution( LocalDate start, LocalDate end) { + return baseMapper.selectProjectDistribution(start,end); + } + + @Override + public List getRankData(LocalDate start, LocalDate end) { + + return baseMapper.selectRankData(start,end); + } + + @Override + public List getProjects(LocalDate start, LocalDate end) { + return baseMapper.getProjects(start,end); + } + + @Override + public List clearList(LocalDate start, LocalDate end) { + + return baseMapper.getClearList(start,end); + } + + @Override + public List getSummaryData(LocalDate start, LocalDate end) { + + return baseMapper.getSummaryData(start,end); + + } } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectReportMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectReportMapper.xml index ca65fad..52f573e 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectReportMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectReportMapper.xml @@ -36,6 +36,7 @@ op.project_num, op.project_code, su.nick_name, + opr.work_type, sd.dept_name from oa_project_report opr left join sys_oa_project op on opr.project_id = op.project_id @@ -60,6 +61,7 @@ op.project_name, op.project_num, op.project_code, + opr.work_type, su.nick_name, sd.dept_name from oa_project_report opr @@ -74,10 +76,11 @@ SELECT COUNT(*) FROM oa_project_report WHERE del_flag = 0 - AND content LIKE CONCAT('%', '完成', '%') - AND create_time >= #{createTime} + AND DATE_FORMAT(create_time, '%Y-%m') = DATE_FORMAT(#{createTime}, '%Y-%m') + + + + + + + + + + + + + + + + +