diff --git a/src/main/java/com/weaver/seconddev/portal/controller/ManagerPortalController.java b/src/main/java/com/weaver/seconddev/portal/controller/ManagerPortalController.java new file mode 100644 index 0000000..9f25cac --- /dev/null +++ b/src/main/java/com/weaver/seconddev/portal/controller/ManagerPortalController.java @@ -0,0 +1,44 @@ +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.service.ManagerPortalService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2025/07/09 + * @version: 1.0 + */ +@Slf4j +@RestController +@RequestMapping("/api/secondev/portal/manager") +@WeaPermission(publicPermission = true) +public class ManagerPortalController { + + @Autowired + ManagerPortalService managerPortalService; + + @PostMapping("/getMangerInfo") + private WeaResult> getMangerInfo(@RequestBody Map params) { + return managerPortalService.getMangerInfo(params); + } + + @PostMapping("/getTodayOverview") + private WeaResult> getTodayOverview(@RequestBody Map params) { + return managerPortalService.getTodayOverview(params); + } + + @PostMapping("/getBasicPersonnel") + private WeaResult> getBasicPersonnel(@RequestBody Map params) { + return managerPortalService.getBasicPersonnel(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 new file mode 100644 index 0000000..cc7c299 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/portal/entity/param/BasicPersonnelParam.java @@ -0,0 +1,19 @@ +package com.weaver.seconddev.portal.entity.param; + +import lombok.Data; + +import java.util.Set; + +/** + * @author:dxfeng + * @createTime: 2025/07/08 + * @version: 1.0 + */ +@Data +public class BasicPersonnelParam { + private Set departmentIdList; + private String searchType; + private String startDate; + private String endDate; + private String tenantKey; +} diff --git a/src/main/java/com/weaver/seconddev/portal/mapper/ManagerPortalMapper.java b/src/main/java/com/weaver/seconddev/portal/mapper/ManagerPortalMapper.java new file mode 100644 index 0000000..ac4587b --- /dev/null +++ b/src/main/java/com/weaver/seconddev/portal/mapper/ManagerPortalMapper.java @@ -0,0 +1,56 @@ +package com.weaver.seconddev.portal.mapper; + +import com.weaver.seconddev.portal.entity.param.BasicPersonnelParam; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author:dxfeng + * @createTime: 2025/07/08 + * @version: 1.0 + */ +@Mapper +public interface ManagerPortalMapper { + /** + * 在职人数 + * + * @param param + * @return + */ + int getOnJobNum(BasicPersonnelParam param); + + /** + * 离职人数 + * + * @param param + * @return + */ + int getResignNumber(BasicPersonnelParam param); + + /** + * 离职流程中人数 + * + * @param param + * @return + */ + int getResigningNumber(BasicPersonnelParam param); + + /** + * 入职流程中人数 + * + * @param param + * @return + */ + int getEntryingNumber(BasicPersonnelParam param); + + /** + * 获取所负责的顶级部门 + * + * @param tenantKey + * @param emdId + * @return + */ + List getManageDeptIds(@Param("tenantKey") String tenantKey, @Param("empId") Long emdId); +} diff --git a/src/main/java/com/weaver/seconddev/portal/service/ManagerPortalService.java b/src/main/java/com/weaver/seconddev/portal/service/ManagerPortalService.java new file mode 100644 index 0000000..1269d05 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/portal/service/ManagerPortalService.java @@ -0,0 +1,41 @@ +package com.weaver.seconddev.portal.service; + +import com.weaver.common.base.entity.result.WeaResult; + +import java.util.Map; + +/** + * 经理门户 + * + * @author:dxfeng + * @createTime: 2025/07/08 + * @version: 1.0 + */ +public interface ManagerPortalService { + + /** + * 经理信息 + * + * @param params + * @return + */ + WeaResult> getMangerInfo(Map params); + + /** + * 今日概况 + * + * @param params + * @return + */ + WeaResult> getTodayOverview(Map params); + + /** + * 基础人事 + * + * @param params + * @return + */ + WeaResult> getBasicPersonnel(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 new file mode 100644 index 0000000..2616a3e --- /dev/null +++ b/src/main/java/com/weaver/seconddev/portal/service/impl/ManagerPortalServiceImpl.java @@ -0,0 +1,133 @@ +package com.weaver.seconddev.portal.service.impl; + +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.mapper.ManagerPortalMapper; +import com.weaver.seconddev.portal.service.ManagerPortalService; +import com.weaver.seconddev.portal.util.DateUtil; +import com.weaver.teams.security.context.UserContext; +import com.weaver.teams.security.user.User; +import com.weaver.workflow.common.cfg.org.service.DepartMentService; +import com.weaver.workflow.common.entity.org.WeaDepartMent; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 经理门户 + * + * @author:dxfeng + * @createTime: 2025/07/08 + * @version: 1.0 + */ +@Slf4j +@Service +public class ManagerPortalServiceImpl implements ManagerPortalService { + + @Autowired + ManagerPortalMapper managerPortalMapper; + @Autowired + DepartMentService departMentService; + @Autowired + HrmCommonDepartmentDao hrmCommonDepartmentDao; + @Autowired + HrmComInfoCacheHandler hrmComInfoCacheHandler; + + @Override + public WeaResult> getMangerInfo(Map params) { + User currentUser = UserContext.getCurrentUser(); + Set allDepartmentIds = getAllDepartmentIdList(currentUser); + List departmentList = hrmComInfoCacheHandler.getCacheList(HrmDepartmentComInfo.class, allDepartmentIds); + // 获取顶级部门 + List topDepartmentList = departmentList.stream() + .filter(dept -> !allDepartmentIds.contains(dept.getParent())) + .collect(Collectors.toList()); + + List departmentNames = topDepartmentList.stream().map(HrmDepartmentComInfo::getName).collect(Collectors.toList()); + + Map returnMap = new HashMap<>(); + returnMap.put("deptNames", StringUtils.join(departmentNames, "、")); + returnMap.put("userName", currentUser.getUsername()); + return WeaResult.success(returnMap); + } + + @Override + public WeaResult> getTodayOverview(Map params) { + + return null; + } + + @Override + public WeaResult> getBasicPersonnel(Map params) { + 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); + BasicPersonnelParam basicPersonnelParam = new BasicPersonnelParam(); + basicPersonnelParam.setTenantKey(currentUser.getTenantKey()); + // 设置部门范围ID集合 + basicPersonnelParam.setDepartmentIdList(allDepartmentIdList); + + if ("year".equals(searchType)) { + // 开始时间年度第一天 + basicPersonnelParam.setStartDate(searchDate + "-01-01"); + // 结束时间年度最后一天 + basicPersonnelParam.setEndDate(StringUtils.isBlank(searchDate) ? DateUtil.getCurrentDateStr() : searchDate + "-12-31"); + + } else if ("month".equals(searchType)) { + // 开始时间月度第一天 + basicPersonnelParam.setStartDate(searchDate + "-01"); + // 结束时间月度最后一天 + basicPersonnelParam.setEndDate(StringUtils.isBlank(searchDate) ? DateUtil.getCurrentDateStr() : DateUtil.getLastDayOfPreviousMonthStr(searchDate + "-01")); + } + + int onJobNum = managerPortalMapper.getOnJobNum(basicPersonnelParam); + int resignNumber = managerPortalMapper.getResignNumber(basicPersonnelParam); + int resigningNumber = managerPortalMapper.getResigningNumber(basicPersonnelParam); + int entryingNumber = managerPortalMapper.getEntryingNumber(basicPersonnelParam); + + // 在职人数 + returnMap.put("onJobNumber", onJobNum); + // 年度离职人数 + returnMap.put("resignNumber", resignNumber); + // 半年度入职人数 + returnMap.put("entryNumber", 7); + // 离职流程中人数 + returnMap.put("resigningNumber", resigningNumber); + // 入职流程中人数 + returnMap.put("entryingNumber", entryingNumber); + returnMap.put("basicPersonnelParam", basicPersonnelParam); + + return WeaResult.success(returnMap); + } + + + /** + * 获取用户当前所负责的所有的部门以及下级部门 + * + * @return + */ + private Set getAllDepartmentIdList(User currentUser) { + // 查询所负责的部门 + List manageDeptIds = managerPortalMapper.getManageDeptIds(currentUser.getTenantKey(), currentUser.getEmployeeId()); + // 查询所有的部门、子部门信息 + Set allDepartmentList = new HashSet<>(); + for (Long manageDeptId : manageDeptIds) { + WeaDepartMent departMentById = departMentService.getDepartMentById(manageDeptId); + List beLongDeps = departMentService.getBeLongDeps(manageDeptId); + allDepartmentList.add(departMentById); + allDepartmentList.addAll(beLongDeps); + } + return allDepartmentList.stream().map(WeaDepartMent::getDepartMentId).collect(Collectors.toSet()); + } +} diff --git a/src/main/resources/mapper/ManagerPortalMapper.xml b/src/main/resources/mapper/ManagerPortalMapper.xml new file mode 100644 index 0000000..6bfd36c --- /dev/null +++ b/src/main/resources/mapper/ManagerPortalMapper.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + +