diff --git a/src/main/java/com/weaver/seconddev/portal/controller/ManagerPortalController.java b/src/main/java/com/weaver/seconddev/portal/controller/ManagerPortalController.java index 9f25cac..113a9e1 100644 --- a/src/main/java/com/weaver/seconddev/portal/controller/ManagerPortalController.java +++ b/src/main/java/com/weaver/seconddev/portal/controller/ManagerPortalController.java @@ -2,6 +2,7 @@ package com.weaver.seconddev.portal.controller; import com.weaver.common.authority.annotation.WeaPermission; import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.portal.entity.po.PortalPO; import com.weaver.seconddev.portal.service.ManagerPortalService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Map; /** @@ -41,4 +43,14 @@ public class ManagerPortalController { return managerPortalService.getBasicPersonnel(params); } + @PostMapping("/getTeamMemorialDay") + private WeaResult> getTeamMemorialDay(@RequestBody Map params) { + return managerPortalService.getTeamMemorialDay(params); + } + + @PostMapping("/getEducationInfo") + private WeaResult> getEducationInfo(@RequestBody Map params) { + return managerPortalService.getEducationInfo(params); + } + } diff --git a/src/main/java/com/weaver/seconddev/portal/entity/param/BasicPersonnelParam.java b/src/main/java/com/weaver/seconddev/portal/entity/param/BasicPersonnelParam.java index cc7c299..8ebc9c2 100644 --- a/src/main/java/com/weaver/seconddev/portal/entity/param/BasicPersonnelParam.java +++ b/src/main/java/com/weaver/seconddev/portal/entity/param/BasicPersonnelParam.java @@ -16,4 +16,7 @@ public class BasicPersonnelParam { private String startDate; private String endDate; private String tenantKey; + private String pieType; + private Integer startIndex; + private Integer endIndex; } diff --git a/src/main/java/com/weaver/seconddev/portal/entity/po/PieChartConfig.java b/src/main/java/com/weaver/seconddev/portal/entity/po/PieChartConfig.java new file mode 100644 index 0000000..115a0a8 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/portal/entity/po/PieChartConfig.java @@ -0,0 +1,19 @@ +package com.weaver.seconddev.portal.entity.po; + +import lombok.Data; + +/** + * @author:dxfeng + * @createTime: 2025/07/10 + * @version: 1.0 + */ +@Data +public class PieChartConfig { + private String type; + private String name; + private String educationIds; + private Integer startIndex; + private Integer endIndex; + private String gradeIds; + private Integer orderNum; +} diff --git a/src/main/java/com/weaver/seconddev/portal/entity/po/PortalPO.java b/src/main/java/com/weaver/seconddev/portal/entity/po/PortalPO.java index c9b50c2..c1d76e1 100644 --- a/src/main/java/com/weaver/seconddev/portal/entity/po/PortalPO.java +++ b/src/main/java/com/weaver/seconddev/portal/entity/po/PortalPO.java @@ -11,4 +11,5 @@ import lombok.Data; public class PortalPO { private String value; private String name; + private String id; } diff --git a/src/main/java/com/weaver/seconddev/portal/mapper/ManagerPortalMapper.java b/src/main/java/com/weaver/seconddev/portal/mapper/ManagerPortalMapper.java index ac4587b..b50250f 100644 --- a/src/main/java/com/weaver/seconddev/portal/mapper/ManagerPortalMapper.java +++ b/src/main/java/com/weaver/seconddev/portal/mapper/ManagerPortalMapper.java @@ -1,9 +1,12 @@ package com.weaver.seconddev.portal.mapper; import com.weaver.seconddev.portal.entity.param.BasicPersonnelParam; +import com.weaver.seconddev.portal.entity.po.PieChartConfig; +import com.weaver.seconddev.portal.entity.po.PortalPO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Collection; import java.util.List; /** @@ -45,6 +48,14 @@ public interface ManagerPortalMapper { */ int getEntryingNumber(BasicPersonnelParam param); + /** + * 入职人数 + * + * @param param + * @return + */ + int getEntryNumber(BasicPersonnelParam param); + /** * 获取所负责的顶级部门 * @@ -53,4 +64,68 @@ public interface ManagerPortalMapper { * @return */ List getManageDeptIds(@Param("tenantKey") String tenantKey, @Param("empId") Long emdId); + + /** + * 获取生日人数 + * + * @param param + * @return + */ + int getBirthdayNum(BasicPersonnelParam param); + + + /** + * 获取预计转正员工人数 + * + * @param param + * @return + */ + int getRegularEmployeeNum(BasicPersonnelParam param); + + /** + * 获取入职周年人数 + * + * @param param + * @return + */ + int getEmploymentAnniversary(BasicPersonnelParam param); + + /** + * 获取学历信息 + * + * @param param + * @return + */ + List getEducationInfo(BasicPersonnelParam param); + + /** + * 获取年龄统计数据 + * + * @param tenantKey + * @param departmentIdList + * @param startIndex + * @param endIndex + * @return + */ + Integer getAgeCount(@Param("tenantKey") String tenantKey, @Param("departmentIdList") Collection departmentIdList, @Param("startIndex") Integer startIndex, @Param("endIndex") Integer endIndex); + + /** + * 获取司龄统计数据 + * + * @param tenantKey + * @param departmentIdList + * @param startIndex + * @param endIndex + * @return + */ + Integer getComapnyCount(@Param("tenantKey") String tenantKey, @Param("departmentIdList") Collection departmentIdList, @Param("startIndex") Integer startIndex, @Param("endIndex") Integer endIndex); + + /** + * 饼状图配置信息 + * + * @param param + * @return + */ + List getPieTypeConfig(BasicPersonnelParam param); + } diff --git a/src/main/java/com/weaver/seconddev/portal/service/ManagerPortalService.java b/src/main/java/com/weaver/seconddev/portal/service/ManagerPortalService.java index 1269d05..45a3ebc 100644 --- a/src/main/java/com/weaver/seconddev/portal/service/ManagerPortalService.java +++ b/src/main/java/com/weaver/seconddev/portal/service/ManagerPortalService.java @@ -1,7 +1,9 @@ package com.weaver.seconddev.portal.service; import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.portal.entity.po.PortalPO; +import java.util.List; import java.util.Map; /** @@ -38,4 +40,22 @@ public interface ManagerPortalService { WeaResult> getBasicPersonnel(Map params); + /** + * 团队纪念日 + * + * @param params + * @return + */ + WeaResult> getTeamMemorialDay(Map params); + + + /** + * 数据看板 + * + * @param params + * @return + */ + WeaResult> getEducationInfo(Map params); + + } diff --git a/src/main/java/com/weaver/seconddev/portal/service/impl/ManagerPortalServiceImpl.java b/src/main/java/com/weaver/seconddev/portal/service/impl/ManagerPortalServiceImpl.java index 2616a3e..598cf19 100644 --- a/src/main/java/com/weaver/seconddev/portal/service/impl/ManagerPortalServiceImpl.java +++ b/src/main/java/com/weaver/seconddev/portal/service/impl/ManagerPortalServiceImpl.java @@ -1,10 +1,13 @@ package com.weaver.seconddev.portal.service.impl; +import cn.hutool.core.convert.Convert; import com.weaver.common.base.entity.result.WeaResult; import com.weaver.common.hrm.cache.HrmDepartmentComInfo; import com.weaver.common.hrm.dao.HrmCommonDepartmentDao; import com.weaver.common.hrm.manage.HrmComInfoCacheHandler; import com.weaver.seconddev.portal.entity.param.BasicPersonnelParam; +import com.weaver.seconddev.portal.entity.po.PieChartConfig; +import com.weaver.seconddev.portal.entity.po.PortalPO; import com.weaver.seconddev.portal.mapper.ManagerPortalMapper; import com.weaver.seconddev.portal.service.ManagerPortalService; import com.weaver.seconddev.portal.util.DateUtil; @@ -69,7 +72,6 @@ public class ManagerPortalServiceImpl implements ManagerPortalService { Map returnMap = new HashMap<>(); String searchType = params.get("searchType"); String searchDate = params.get("searchDate"); - String departmentIds = params.get("departmentIds"); User currentUser = UserContext.getCurrentUser(); Set allDepartmentIdList = getAllDepartmentIdList(currentUser); @@ -80,37 +82,182 @@ public class ManagerPortalServiceImpl implements ManagerPortalService { if ("year".equals(searchType)) { // 开始时间年度第一天 - basicPersonnelParam.setStartDate(searchDate + "-01-01"); + basicPersonnelParam.setStartDate(StringUtils.isBlank(searchDate) ? DateUtil.getFirstDayOfYearStr() : searchDate + "-01-01"); // 结束时间年度最后一天 basicPersonnelParam.setEndDate(StringUtils.isBlank(searchDate) ? DateUtil.getCurrentDateStr() : searchDate + "-12-31"); } else if ("month".equals(searchType)) { // 开始时间月度第一天 - basicPersonnelParam.setStartDate(searchDate + "-01"); + basicPersonnelParam.setStartDate(StringUtils.isBlank(searchDate) ? DateUtil.getFirstDayOfMonth() : searchDate + "-01"); // 结束时间月度最后一天 - basicPersonnelParam.setEndDate(StringUtils.isBlank(searchDate) ? DateUtil.getCurrentDateStr() : DateUtil.getLastDayOfPreviousMonthStr(searchDate + "-01")); + basicPersonnelParam.setEndDate(StringUtils.isBlank(searchDate) ? DateUtil.getCurrentDateStr() : DateUtil.getLastDayOfPreviousMonthStr(searchDate + "-01", 0)); } int onJobNum = managerPortalMapper.getOnJobNum(basicPersonnelParam); int resignNumber = managerPortalMapper.getResignNumber(basicPersonnelParam); int resigningNumber = managerPortalMapper.getResigningNumber(basicPersonnelParam); + int entryNumber = managerPortalMapper.getEntryNumber(basicPersonnelParam); int entryingNumber = managerPortalMapper.getEntryingNumber(basicPersonnelParam); // 在职人数 returnMap.put("onJobNumber", onJobNum); // 年度离职人数 returnMap.put("resignNumber", resignNumber); - // 半年度入职人数 - returnMap.put("entryNumber", 7); + // 年度入职人数 + returnMap.put("entryNumber", entryNumber); // 离职流程中人数 returnMap.put("resigningNumber", resigningNumber); // 入职流程中人数 returnMap.put("entryingNumber", entryingNumber); + // TODO 测试用 returnMap.put("basicPersonnelParam", basicPersonnelParam); return WeaResult.success(returnMap); } + /** + * 生日提醒:提前一周 + * 转正提醒:提前30天 + * 入职周年:提前一周 + * + * @param params + * @return + */ + @Override + public WeaResult> getTeamMemorialDay(Map params) { + User currentUser = UserContext.getCurrentUser(); + Set allDepartmentIdList = getAllDepartmentIdList(currentUser); + BasicPersonnelParam basicPersonnelParam = new BasicPersonnelParam(); + basicPersonnelParam.setTenantKey(currentUser.getTenantKey()); + // 设置部门范围ID集合 + basicPersonnelParam.setDepartmentIdList(allDepartmentIdList); + int birthdayNum = managerPortalMapper.getBirthdayNum(basicPersonnelParam); + + int regularEmployeeNum = managerPortalMapper.getRegularEmployeeNum(basicPersonnelParam); + + int employmentAnniversary = managerPortalMapper.getEmploymentAnniversary(basicPersonnelParam); + + Map returnMap = new HashMap<>(); + // 生日提醒 + returnMap.put("birthdayNum", birthdayNum); + // 转正日期 + returnMap.put("regularEmployeeNum", regularEmployeeNum); + // 入职周年提醒 + returnMap.put("employmentAnniversary", employmentAnniversary); + + // TODO 测试用 + returnMap.put("basicPersonnelParam", basicPersonnelParam); + return WeaResult.success(returnMap); + } + + @Override + public WeaResult> getEducationInfo(Map params) { + + String type = params.get("type"); + if (StringUtils.isBlank(type)) { + // 默认学历信息 + type = "education"; + } + User currentUser = UserContext.getCurrentUser(); + Set allDepartmentIdList = getAllDepartmentIdList(currentUser); + BasicPersonnelParam basicPersonnelParam = new BasicPersonnelParam(); + basicPersonnelParam.setTenantKey(currentUser.getTenantKey()); + // 设置部门范围ID集合 + basicPersonnelParam.setDepartmentIdList(allDepartmentIdList); + basicPersonnelParam.setPieType(type); + List returnList = new ArrayList<>(); + switch (type) { + case "education": + // 学历 + dealEducationInfo(basicPersonnelParam, returnList); + break; + case "age": + // 年龄 + dealAgeInfo(basicPersonnelParam, returnList); + break; + case "grade": + // 职级 + break; + case "company": + // 司龄 + dealCompanyInfo(basicPersonnelParam, returnList); + break; + case "performance": + // 绩效 + break; + default: + break; + } + + return WeaResult.success(returnList); + } + + /** + * 学历分布数据 + * + * @param basicPersonnelParam + * @param returnList + */ + private void dealEducationInfo(BasicPersonnelParam basicPersonnelParam, List returnList) { + // 学历分布 + List educationInfo = managerPortalMapper.getEducationInfo(basicPersonnelParam); + Map educationMap = educationInfo.stream().collect(Collectors.toMap(PortalPO::getId, PortalPO::getValue)); + + managerPortalMapper.getPieTypeConfig(basicPersonnelParam).forEach(pieChartConfig -> { + String name = pieChartConfig.getName(); + String educationIds = pieChartConfig.getEducationIds(); + String[] split = educationIds.split(","); + int count = 0; + for (String s : split) { + String s1 = educationMap.get(s); + count += Convert.toInt(s1, 0); + } + PortalPO portalPO = new PortalPO(); + portalPO.setValue(String.valueOf(count)); + portalPO.setName(name); + returnList.add(portalPO); + }); + } + + + /** + * 学历分布数据 + * + * @param basicPersonnelParam + * @param returnList + */ + private void dealAgeInfo(BasicPersonnelParam basicPersonnelParam, List returnList) { + List pieTypeConfig = managerPortalMapper.getPieTypeConfig(basicPersonnelParam); + for (PieChartConfig pieChartConfig : pieTypeConfig) { + + PortalPO portalPO = new PortalPO(); + portalPO.setName(pieChartConfig.getName()); + // 查询时间段内的数据 + Integer ageCount = managerPortalMapper.getAgeCount(basicPersonnelParam.getTenantKey(), basicPersonnelParam.getDepartmentIdList(), pieChartConfig.getStartIndex(), pieChartConfig.getEndIndex()); + portalPO.setValue(String.valueOf(ageCount)); + returnList.add(portalPO); + } + } + + /** + * 司龄分布数据 + * + * @param basicPersonnelParam + * @param returnList + */ + private void dealCompanyInfo(BasicPersonnelParam basicPersonnelParam, List returnList) { + List pieTypeConfig = managerPortalMapper.getPieTypeConfig(basicPersonnelParam); + for (PieChartConfig pieChartConfig : pieTypeConfig) { + + PortalPO portalPO = new PortalPO(); + portalPO.setName(pieChartConfig.getName()); + // 查询时间段内的数据 + Integer ageCount = managerPortalMapper.getComapnyCount(basicPersonnelParam.getTenantKey(), basicPersonnelParam.getDepartmentIdList(), pieChartConfig.getStartIndex(), pieChartConfig.getEndIndex()); + portalPO.setValue(String.valueOf(ageCount)); + returnList.add(portalPO); + } + } + /** * 获取用户当前所负责的所有的部门以及下级部门 diff --git a/src/main/java/com/weaver/seconddev/portal/util/DateUtil.java b/src/main/java/com/weaver/seconddev/portal/util/DateUtil.java index b99b512..836d6eb 100644 --- a/src/main/java/com/weaver/seconddev/portal/util/DateUtil.java +++ b/src/main/java/com/weaver/seconddev/portal/util/DateUtil.java @@ -114,6 +114,13 @@ public class DateUtil { return date.withDayOfMonth(1); } + /** + * 获取当前年度第一天的字符串 + */ + public static String getFirstDayOfMonth() { + return LocalDate.now().withDayOfMonth(1).format(DEFAULT_DATE_FORMATTER); + } + /** * 获取指定日期字符串所在月份的第一天(字符串形式) * @param dateStr 输入日期字符串 (yyyy-MM-dd) diff --git a/src/main/resources/mapper/ManagerPortalMapper.xml b/src/main/resources/mapper/ManagerPortalMapper.xml index 6bfd36c..d948f44 100644 --- a/src/main/resources/mapper/ManagerPortalMapper.xml +++ b/src/main/resources/mapper/ManagerPortalMapper.xml @@ -24,6 +24,7 @@ + + + + + + + + + + + + + + + + +