Parcourir la source

homepage相关接口

小车车 il y a 4 mois
Parent
commit
dc47d65cf3

+ 44 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/home/ManagerHomeController.java

@@ -0,0 +1,44 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.home;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.module.iscs.controller.admin.home.vo.manager.WorkCompletedVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.home.vo.manager.WorkCountVO;
+import cn.iocoder.yudao.module.iscs.service.home.ManagerHomeService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+
+@Tag(name = "管理后台 - 管理员首页")
+@RestController
+@RequestMapping("/iscs/manager-home")
+@Validated
+public class ManagerHomeController {
+
+    @Resource
+    private ManagerHomeService managerHomeService;
+
+    @GetMapping("/getManagerWorkCount")
+    @Operation(summary = "作业管理")
+    public CommonResult<WorkCountVO> getManagerWorkCount() {
+        WorkCountVO vo = managerHomeService.getManagerWorkCount();
+        return success(vo);
+    }
+
+    @GetMapping("/getManagerDayWorkCount")
+    @Operation(summary = "全系统作业完成趋势")
+    public CommonResult<List<WorkCompletedVO>> getManagerDayWorkCount() {
+        List<WorkCompletedVO> result = managerHomeService.getManagerDayWorkCount();
+        return success(result);
+    }
+
+
+}

+ 16 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/home/vo/manager/WorkCompletedVO.java

@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.home.vo.manager;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 最近30天完成情况")
+@Data
+public class WorkCompletedVO {
+
+    @Schema(description = "时间")
+    private String day;
+
+    @Schema(description = "完成计数")
+    private Integer completedCount;
+
+}

+ 19 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/home/vo/manager/WorkCountVO.java

@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.home.vo.manager;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 首页头部")
+@Data
+public class WorkCountVO {
+
+    @Schema(description = "进行中计数")
+    private Integer inProgressCount;
+
+    @Schema(description = "完成计数")
+    private Integer completedCount;
+
+    @Schema(description = "逾期计数")
+    private Integer overdueCount;
+
+}

+ 28 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/home/ManagerHomeService.java

@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.module.iscs.service.home;
+
+import cn.iocoder.yudao.module.iscs.controller.admin.home.vo.manager.WorkCompletedVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.home.vo.manager.WorkCountVO;
+
+import java.util.List;
+
+/**
+ * 管理员首页
+ *
+ * @author 博士安全
+ */
+public interface ManagerHomeService  {
+
+
+    /**
+     * 管理员首页-作业管理
+     * @return
+     */
+    WorkCountVO getManagerWorkCount();
+
+    /**
+     * 全系统作业完成趋势
+     * @return
+     */
+    List<WorkCompletedVO> getManagerDayWorkCount();
+
+}

+ 75 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/home/ManagerHomeServiceImpl.java

@@ -0,0 +1,75 @@
+package cn.iocoder.yudao.module.iscs.service.home;
+
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.iocoder.yudao.module.iscs.controller.admin.home.vo.manager.WorkCompletedVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.home.vo.manager.WorkCountVO;
+import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.WorkflowWorkNodeDO;
+import cn.iocoder.yudao.module.iscs.service.workdesign.WorkflowWorkNodeService;
+import cn.iocoder.yudao.module.iscs.utils.DateUtils;
+import cn.iocoder.yudao.module.iscs.utils.RecentDateUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 管理员首页
+ *
+ * @author 博士安全
+ */
+@Service
+@Validated
+public class ManagerHomeServiceImpl implements ManagerHomeService {
+
+    @Autowired
+    private WorkflowWorkNodeService workflowWorkNodeService;
+
+
+    @Override
+    public WorkCountVO getManagerWorkCount() {
+        // 进行中
+        int inProgressCount = (int)workflowWorkNodeService.count(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                .eq(WorkflowWorkNodeDO::getApprovalStatus, "running"));
+        // 完成计数
+        int completedCount = (int)workflowWorkNodeService.count(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                .eq(WorkflowWorkNodeDO::getApprovalStatus, "approved"));
+        // 逾期计数(超过24小时未审核完成)
+        int overdueCount = (int)workflowWorkNodeService.count(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                .lt(WorkflowWorkNodeDO::getStartTime, LocalDateTime.now().minusHours(48)));
+        // 组装数据
+        WorkCountVO workCountVO = new WorkCountVO();
+        workCountVO.setInProgressCount(inProgressCount);
+        workCountVO.setCompletedCount(completedCount);
+        workCountVO.setOverdueCount(overdueCount);
+        return workCountVO;
+    }
+
+    @Override
+    public List<WorkCompletedVO> getManagerDayWorkCount() {
+        // 获取最近30天
+        List<LocalDate> last30Days = RecentDateUtils.getLast30Days();
+        // 开始时间
+        String startTime = last30Days.get(0) + " 00:00:00";
+        String endTime = last30Days.get(29) + " 23:59:59";
+        // 查询时间内完成的作业
+        List<WorkflowWorkNodeDO> list = workflowWorkNodeService.list(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
+                .ge(WorkflowWorkNodeDO::getEndTime, startTime)
+                .le(WorkflowWorkNodeDO::getCreateTime, endTime));
+        List<WorkCompletedVO> workCompletedVOS = new ArrayList<>();
+        for (LocalDate last30Day : last30Days) {
+            int count = (int)list.stream().filter(o -> LocalDateTimeUtil.format(o.getEndTime(), DateUtils.YYYY_MM_DD).equals(last30Day.toString())).count();
+            WorkCompletedVO workCompletedVO = new WorkCompletedVO();
+            workCompletedVO.setDay(last30Day.toString());
+            workCompletedVO.setCompletedCount(count);
+            workCompletedVOS.add(workCompletedVO);
+        }
+        return workCompletedVOS;
+    }
+
+}

+ 90 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/utils/RecentDateUtils.java

@@ -0,0 +1,90 @@
+package cn.iocoder.yudao.module.iscs.utils;
+
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * 日期工具类 - 提供最近 N 天日期计算功能
+ */
+public class RecentDateUtils {
+
+    // 私有构造方法防止实例化
+    private RecentDateUtils() {
+        throw new UnsupportedOperationException("Utility class cannot be instantiated");
+    }
+
+    /**
+     * 获取最近30天的日期列表(包含当天)
+     * @return 日期列表(从29天前到当天,升序排列)
+     */
+    public static List<LocalDate> getLast30Days() {
+        return getLastNDays(30);
+    }
+
+    /**
+     * 获取最近N天的日期列表(包含当天)
+     * @param days 天数(必须大于0)
+     * @return 日期列表(从days-1天前到当天,升序排列)
+     * @throws IllegalArgumentException 如果days <= 0
+     */
+    public static List<LocalDate> getLastNDays(int days) {
+        if (days <= 0) {
+            throw new IllegalArgumentException("天数必须大于0");
+        }
+
+        LocalDate endDate = LocalDate.now();
+        LocalDate startDate = endDate.minus(days - 1, ChronoUnit.DAYS);
+
+        // 生成日期序列(使用Java 8 Stream API)
+        return Stream.iterate(startDate, date -> date.plusDays(1))
+                .limit(days)
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 获取最近30天的日期列表(降序排列:当天 → 29天前)
+     * @return 日期列表(从当天到29天前,降序排列)
+     */
+    public static List<LocalDate> getLast30DaysDescending() {
+        return getLastNDaysDescending(30);
+    }
+
+    /**
+     * 获取最近N天的日期列表(降序排列:当天 → days-1天前)
+     * @param days 天数(必须大于0)
+     * @return 日期列表(从当天到days-1天前,降序排列)
+     */
+    public static List<LocalDate> getLastNDaysDescending(int days) {
+        List<LocalDate> ascendingList = getLastNDays(days);
+        Collections.reverse(ascendingList);
+        return ascendingList;
+    }
+
+    /**
+     * 检查给定日期是否在最近30天内(包含边界)
+     * @param targetDate 目标日期
+     * @return true如果在最近30天内(包含当天)
+     */
+    public static boolean isWithinLast30Days(LocalDate targetDate) {
+        return isWithinLastNDays(targetDate, 30);
+    }
+
+    /**
+     * 检查给定日期是否在最近N天内(包含边界)
+     * @param targetDate 目标日期
+     * @param days 天数(必须大于0)
+     * @return true如果在最近N天内(包含当天)
+     */
+    public static boolean isWithinLastNDays(LocalDate targetDate, int days) {
+        if (days <= 0) {
+            throw new IllegalArgumentException("天数必须大于0");
+        }
+        LocalDate cutoffDate = LocalDate.now().minus(days - 1, ChronoUnit.DAYS);
+        return !targetDate.isBefore(cutoffDate) && !targetDate.isAfter(LocalDate.now());
+    }
+
+}