diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java index c4c12cb8..d8986d0d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java @@ -1,14 +1,15 @@ package org.dromara.bigscreen.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import jakarta.annotation.Resource; import org.dromara.bigscreen.domain.dto.WeatherQueryReq; import org.dromara.bigscreen.domain.vo.*; +import org.dromara.bigscreen.mapper.ProjectBigScreenMapper; import org.dromara.bigscreen.service.EnterpriseBigScreenService; import org.dromara.common.core.domain.R; +import org.dromara.common.core.utils.DateUtils; +import org.dromara.common.utils.BigDecimalUtil; import org.dromara.manager.weathermanager.vo.WeatherVo; -import org.dromara.project.domain.BusAttendance; import org.dromara.project.domain.BusProject; import org.dromara.project.domain.BusUserProjectRelevancy; import org.dromara.project.service.IBusAttendanceService; @@ -23,8 +24,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.time.temporal.ChronoUnit; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; /** * 企业级大屏 @@ -49,6 +49,9 @@ public class EnterpriseBigScreenController { @Resource private IBusProjectService projectService; + @Resource + private ProjectBigScreenMapper projectBigScreenMapper; + /** * 获取关键指标 @@ -137,7 +140,8 @@ public class EnterpriseBigScreenController { peopleCountVo.setSubcontractorsCount(list.stream().filter(item -> "3".equals(item.getUserType())) .map(BusUserProjectRelevancy::getUserId) .distinct().count()); - + Integer projectUserCount = projectBigScreenMapper.getUserCount(); + peopleCountVo.setConstructionPersonnelCount(Long.valueOf(projectUserCount)); return R.ok(peopleCountVo); } @@ -149,6 +153,15 @@ public class EnterpriseBigScreenController { @GetMapping("/allAttendanceCount") public R getAllAttendanceCount() { TodayAttendanceCountVo todayAttendanceCountVo = new TodayAttendanceCountVo(); + List projectList = projectService.listByIds(List.of(1897160897167638529L, 1897161054676336641L)); + Integer countUser = 0; + Integer countAttendance = 0; + for (BusProject project : projectList) { + Long projectId = project.getGoId(); + countUser = countUser + projectBigScreenMapper.getProjectUserCount(projectId); + countAttendance = countAttendance + projectBigScreenMapper.getAttendanceCount(projectId, DateUtils.getDate()); + } +/* List list = attendanceService.list(Wrappers.lambdaQuery() .eq(BusAttendance::getClockDate, LocalDate.now()) .in(BusAttendance::getClockStatus, Arrays.asList("1", "2", "3")) @@ -160,11 +173,12 @@ public class EnterpriseBigScreenController { // 查询总人数 List relevancyList = userProjectRelevancyService.list(); long totalUserCount = relevancyList.stream().map(BusUserProjectRelevancy::getUserId).distinct().count(); +*/ // 计算考勤率(保留一位小数) - if (totalUserCount > 0) { - BigDecimal rate = new BigDecimal(attendanceCount * 100) - .divide(new BigDecimal(totalUserCount), 1, RoundingMode.HALF_UP); + if (countUser > 0) { + BigDecimal rate = new BigDecimal(countAttendance * 100) + .divide(new BigDecimal(countUser), 1, RoundingMode.HALF_UP); todayAttendanceCountVo.setAttendanceRate(rate.doubleValue()); } else { todayAttendanceCountVo.setAttendanceRate(0.0); @@ -179,7 +193,19 @@ public class EnterpriseBigScreenController { @GetMapping("/projectAttendanceCount") public R> getProjectAttendanceCount() { - ArrayList projectAttendanceCountVos = new ArrayList<>(); + List projectList = projectService.listByIds(List.of(1897160897167638529L, 1897161054676336641L)); + return R.ok(projectList.stream().map(busProject -> { + ProjectAttendanceCountVo vo = new ProjectAttendanceCountVo(); + vo.setProjectId(busProject.getId()); + vo.setProjectName(busProject.getProjectName()); + Long projectId = busProject.getGoId(); + Integer projectUserCount = projectBigScreenMapper.getProjectUserCount(projectId); + Integer attendanceCount = projectBigScreenMapper.getAttendanceCount(projectId, DateUtils.getDate()); + vo.setAttendanceCount(Long.valueOf(attendanceCount)); + vo.setAttendanceRate(BigDecimalUtil.toPercentage(BigDecimal.valueOf(attendanceCount), BigDecimal.valueOf(projectUserCount)).doubleValue()); + return vo; + }).toList()); + /*ArrayList projectAttendanceCountVos = new ArrayList<>(); List list = attendanceService.list(Wrappers.lambdaQuery() .eq(BusAttendance::getClockDate, LocalDate.now()) @@ -221,7 +247,7 @@ public class EnterpriseBigScreenController { projectAttendanceCountVos.add(projectAttendanceCountVo); } - return R.ok(projectAttendanceCountVos); + return R.ok(projectAttendanceCountVos);*/ } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/mapper/ProjectBigScreenMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/mapper/ProjectBigScreenMapper.java index a80ef0db..d7b5563b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/mapper/ProjectBigScreenMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/mapper/ProjectBigScreenMapper.java @@ -26,6 +26,9 @@ public interface ProjectBigScreenMapper { @Select("select count(*) from bus_construction_user where project_id = #{projectId} && deleted_at is NULL") Integer getProjectUserCount(@Param("projectId") Long projectId); + @Select("select count(*) from bus_construction_user where project_id in (60,59) && deleted_at is NULL") + Integer getUserCount(); + @Select("select count(*) from bus_attendance where project_id = #{projectId} && printing_date = #{printingDate} && commuter = '1'") Integer getAttendanceCount(@Param("projectId") Long projectId, @Param("printingDate") String printingDate);