经理门户 接口开发

This commit is contained in:
dxfeng 2025-07-10 13:36:32 +08:00
parent 1189ff6513
commit 67dfa72bf0
9 changed files with 425 additions and 6 deletions

View File

@ -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<Map<String, Object>> getTeamMemorialDay(@RequestBody Map<String, String> params) {
return managerPortalService.getTeamMemorialDay(params);
}
@PostMapping("/getEducationInfo")
private WeaResult<List<PortalPO>> getEducationInfo(@RequestBody Map<String, String> params) {
return managerPortalService.getEducationInfo(params);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -11,4 +11,5 @@ import lombok.Data;
public class PortalPO {
private String value;
private String name;
private String id;
}

View File

@ -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<Long> 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<PortalPO> getEducationInfo(BasicPersonnelParam param);
/**
* 获取年龄统计数据
*
* @param tenantKey
* @param departmentIdList
* @param startIndex
* @param endIndex
* @return
*/
Integer getAgeCount(@Param("tenantKey") String tenantKey, @Param("departmentIdList") Collection<Long> 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<Long> departmentIdList, @Param("startIndex") Integer startIndex, @Param("endIndex") Integer endIndex);
/**
* 饼状图配置信息
*
* @param param
* @return
*/
List<PieChartConfig> getPieTypeConfig(BasicPersonnelParam param);
}

View File

@ -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<Map<String, Object>> getBasicPersonnel(Map<String, String> params);
/**
* 团队纪念日
*
* @param params
* @return
*/
WeaResult<Map<String, Object>> getTeamMemorialDay(Map<String, String> params);
/**
* 数据看板
*
* @param params
* @return
*/
WeaResult<List<PortalPO>> getEducationInfo(Map<String, String> params);
}

View File

@ -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<String, Object> returnMap = new HashMap<>();
String searchType = params.get("searchType");
String searchDate = params.get("searchDate");
String departmentIds = params.get("departmentIds");
User currentUser = UserContext.getCurrentUser();
Set<Long> 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<Map<String, Object>> getTeamMemorialDay(Map<String, String> params) {
User currentUser = UserContext.getCurrentUser();
Set<Long> 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<String, Object> 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<List<PortalPO>> getEducationInfo(Map<String, String> params) {
String type = params.get("type");
if (StringUtils.isBlank(type)) {
// 默认学历信息
type = "education";
}
User currentUser = UserContext.getCurrentUser();
Set<Long> allDepartmentIdList = getAllDepartmentIdList(currentUser);
BasicPersonnelParam basicPersonnelParam = new BasicPersonnelParam();
basicPersonnelParam.setTenantKey(currentUser.getTenantKey());
// 设置部门范围ID集合
basicPersonnelParam.setDepartmentIdList(allDepartmentIdList);
basicPersonnelParam.setPieType(type);
List<PortalPO> 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<PortalPO> returnList) {
// 学历分布
List<PortalPO> educationInfo = managerPortalMapper.getEducationInfo(basicPersonnelParam);
Map<String, String> 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<PortalPO> returnList) {
List<PieChartConfig> 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<PortalPO> returnList) {
List<PieChartConfig> 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);
}
}
/**
* 获取用户当前所负责的所有的部门以及下级部门

View File

@ -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)

View File

@ -24,6 +24,7 @@
<select id="getResignNumber" resultType="java.lang.Integer">
select count(id) as value from e10_common.uf_jcl_lzxxjl t
where t.delete_type = 0 and t.tenant_key = #{tenantKey}
and t.lzzt = 1
<if test="departmentIdList != null and departmentIdList.size() > 0">
AND t.lzqbm IN
<foreach collection="departmentIdList" item="departmentId" open="(" close=")" separator=",">
@ -54,6 +55,21 @@
and t.sqsj &gt;= #{startDate}
and t.sqsj &lt;= #{endDate}
</select>
<select id="getEntryNumber" resultType="java.lang.Integer">
select count(id) as value from e10_common.uf_jcl_rzgl t
where t.delete_type = 0 and t.tenant_key = #{tenantKey}
<if test="departmentIdList != null and departmentIdList.size() > 0">
AND t.department IN
<foreach collection="departmentIdList" item="departmentId" open="(" close=")" separator=",">
#{departmentId}
</foreach>
</if>
and t.hiredate &gt;= #{startDate}
and t.hiredate &lt;= #{endDate}
</select>
<select id="getManageDeptIds" resultType="java.lang.Long">
select t.id
from eteams.department t
@ -67,4 +83,123 @@
and t2.bmfzr = #{empId}
</select>
<select id="getBirthdayNum" resultType="java.lang.Integer">
SELECT COUNT(t.id) AS value
FROM e10_common.uf_jcl_employee_information t
WHERE t.delete_type = 0
AND t.tenant_key = #{tenantKey}
<if test="departmentIdList != null and departmentIdList.size() > 0">
AND t.department IN
<foreach collection="departmentIdList" item="departmentId" open="(" close=")" separator=",">
#{departmentId}
</foreach>
</if>
AND (
(
DATE_FORMAT(birthday, '%m-%d') BETWEEN
DATE_FORMAT(CURDATE(), '%m-%d') AND DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d')
)
OR (
DATE_FORMAT(CURDATE(), '%m-%d') &gt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d')
AND (
DATE_FORMAT(birthday, '%m-%d') &gt;= DATE_FORMAT(CURDATE(), '%m-%d')
OR DATE_FORMAT(birthday, '%m-%d') &lt;= DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d')
)
)
)
</select>
<select id="getRegularEmployeeNum" resultType="java.lang.Integer">
SELECT COUNT(t.id) AS value
FROM e10_common.uf_jcl_employee_information t
WHERE t.delete_type = 0
AND t.tenant_key = #{tenantKey}
<if test="departmentIdList != null and departmentIdList.size() > 0">
AND t.department IN
<foreach collection="departmentIdList" item="departmentId" open="(" close=")" separator=",">
#{departmentId}
</foreach>
</if>
and yjsyjsrq IS NOT NULL
AND (
STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(yjsyjsrq, '%m-%d')), '%Y-%m-%d') BETWEEN
CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 60 DAY)
OR STR_TO_DATE(CONCAT(YEAR(CURDATE()) + 1, '-', DATE_FORMAT(yjsyjsrq, '%m-%d')), '%Y-%m-%d') BETWEEN
CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 60 DAY)
)
</select>
<select id="getEmploymentAnniversary" resultType="java.lang.Integer">
SELECT COUNT(t.id) AS value
FROM e10_common.uf_jcl_employee_information t
WHERE t.delete_type = 0
AND t.tenant_key = #{tenantKey}
<if test="departmentIdList != null and departmentIdList.size() > 0">
AND t.department IN
<foreach collection="departmentIdList" item="departmentId" open="(" close=")" separator=",">
#{departmentId}
</foreach>
</if>
AND (
(
DATE_FORMAT(hiredate, '%m-%d') BETWEEN
DATE_FORMAT(CURDATE(), '%m-%d') AND DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d')
)
OR (
DATE_FORMAT(CURDATE(), '%m-%d') &gt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d')
AND (
DATE_FORMAT(hiredate, '%m-%d') &gt;= DATE_FORMAT(CURDATE(), '%m-%d')
OR DATE_FORMAT(hiredate, '%m-%d') &lt;= DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d')
)
)
)
</select>
<select id="getEducationInfo" resultType="com.weaver.seconddev.portal.entity.po.PortalPO">
select count(t.id) as value , t.education as id
from e10_common.uf_jcl_employee_information t
where t.delete_type = 0 and t.tenant_key = #{tenantKey}
<if test="departmentIdList != null and departmentIdList.size() > 0">
AND t.department IN
<foreach collection="departmentIdList" item="departmentId" open="(" close=")" separator=",">
#{departmentId}
</foreach>
</if>
group by t.education
</select>
<select id="getPieTypeConfig" resultType="com.weaver.seconddev.portal.entity.po.PieChartConfig">
select t.lx as type,t.flmc as name,t.xlfl as educationIds,
t.qsw as startIndex,t.jzw as endIndex,t.zj as gradeIds,t.zssx as orderNum
from e10_common.uf_xlfb t
where t.delete_type = 0 and t.tenant_key = #{tenantKey}
and t.lx = #{pieType} order by t.zssx
</select>
<select id="getAgeCount" resultType="java.lang.Integer">
select count(t.id) as value from e10_common.uf_jcl_employee_information t
where t.delete_type = 0 and t.tenant_key = #{tenantKey}
<if test="departmentIdList != null and departmentIdList.size() > 0">
AND t.department IN
<foreach collection="departmentIdList" item="departmentId" open="(" close=")" separator=",">
#{departmentId}
</foreach>
</if>
and t.age &gt; #{startIndex}
and t.age &lt;= #{endIndex}
</select>
<select id="getComapnyCount" resultType="java.lang.Integer">
select count(t.id) as value from e10_common.uf_jcl_employee_information t
where t.delete_type = 0 and t.tenant_key = #{tenantKey}
<if test="departmentIdList != null and departmentIdList.size() > 0">
AND t.department IN
<foreach collection="departmentIdList" item="departmentId" open="(" close=")" separator=",">
#{departmentId}
</foreach>
</if>
and t.sl &gt; #{startIndex}
and t.sl &lt;= #{endIndex}
</select>
</mapper>