From 2bd3cfd8d9fbdb8b173c98ca9c44743009bae282 Mon Sep 17 00:00:00 2001 From: fl <3098731433@qq.com> Date: Fri, 7 Mar 2025 13:32:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=84=E7=BB=87=E5=8F=98=E6=9B=B4=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/controller/SysOrgController.java | 26 ++++++- .../com/bonus/system/basic/dao/SysOrgDao.java | 7 ++ .../basic/domain/SysOrgHistoryBean.java | 77 +++++++++++++++++++ .../system/basic/service/SysOrgService.java | 12 +++ .../basic/service/impl/SysOrgServiceImpl.java | 55 ++++++++++++- .../system/download/ExportFileController.java | 61 +++++++-------- .../main/resources/mapper/basic/SysOrgDao.xml | 35 +++++++++ 7 files changed, 234 insertions(+), 39 deletions(-) create mode 100644 bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/domain/SysOrgHistoryBean.java diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/controller/SysOrgController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/controller/SysOrgController.java index 1822ac9..c4cbd88 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/controller/SysOrgController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/controller/SysOrgController.java @@ -3,13 +3,18 @@ package com.bonus.system.basic.controller; import com.bonus.common.core.domain.R; import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.core.web.page.TableDataInfo; import com.bonus.common.log.annotation.Log; import com.bonus.common.log.enums.BusinessType; import com.bonus.common.security.annotation.RequiresPermissions; import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.system.api.domain.MapVo; +import com.bonus.system.api.domain.SysUser; import com.bonus.system.basic.domain.SysOrg; +import com.bonus.system.basic.domain.SysOrgHistoryBean; import com.bonus.system.basic.domain.SysTree; import com.bonus.system.basic.service.SysOrgService; +import com.bonus.system.dept.dao.ProDeptRoleDao; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.Param; import org.springframework.validation.annotation.Validated; @@ -17,7 +22,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 组织信息 @@ -33,6 +39,9 @@ public class SysOrgController extends BaseController @Resource(name = "sysOrgService") private SysOrgService sysOrgService; + @Resource(name = "ProDeptRoleDao") + private ProDeptRoleDao proDeptRoleDao; + /** * 获取组织列表 */ @@ -194,4 +203,19 @@ public class SysOrgController extends BaseController return error("系统异常"); } + @RequiresPermissions("system:orgHis:list") + @GetMapping("/getOrgHistoryList") + @Log(title = "系统管理->组织变动记录->查询列表", businessType = BusinessType.QUERY) + public TableDataInfo getOrgHistoryList(SysOrgHistoryBean bean) { + try{ + List list = sysOrgService.getOrgHistoryList(bean); + return endPage(list); + }catch (Exception e){ + logger.error(e.toString(),e); + } + return getDataTableError(new ArrayList<>()); + } + + + } \ No newline at end of file diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysOrgDao.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysOrgDao.java index 5099ba7..1950226 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysOrgDao.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/dao/SysOrgDao.java @@ -2,6 +2,7 @@ package com.bonus.system.basic.dao; import com.bonus.system.api.domain.MapVo; import com.bonus.system.basic.domain.SysOrg; +import com.bonus.system.basic.domain.SysOrgHistoryBean; import com.bonus.system.basic.domain.SysOrgImport; import com.bonus.system.basic.domain.SysTree; import com.bonus.system.holiday.entity.HolidayKeyBean; @@ -140,4 +141,10 @@ public interface SysOrgDao { * @return */ List selectOrgListPerson(@Param("bean")SysOrg sysOrg); + /** + * 查询组织变动记录 + * @param bean + * @return + */ + List getOrgHistoryList(SysOrgHistoryBean bean); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/domain/SysOrgHistoryBean.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/domain/SysOrgHistoryBean.java new file mode 100644 index 0000000..6cdf9a3 --- /dev/null +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/domain/SysOrgHistoryBean.java @@ -0,0 +1,77 @@ +package com.bonus.system.basic.domain; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 组织管理 + * @author zys + */ +@Data +public class SysOrgHistoryBean { + + /** + * 编号 + */ + @Excel(name = "序号", width = 10.0,height = 20.0, orderNum = "0") + private Long id; + + private Long userId; + + @Excel(name = "姓名", width = 10.0,height = 20.0, orderNum = "1") + private String userName; + + /** + * 手机号 + */ + @Excel(name = "手机号", width = 20.0,height = 20.0, orderNum = "2") + private String phoneNumber; + /** + * 岗位 + */ + @Excel(name = "岗位", width = 20.0,height = 20.0, orderNum = "3") + private String postName; + + /** + * 角色 + */ + @Excel(name = "角色", width = 20.0,height = 20.0, orderNum = "4") + private String roleName; + + /** + * 变动前部门名称 + */ + @Excel(name = "变动前部门", width = 20.0,height = 20.0, orderNum = "5") + private String oldOrgName; + + /** + * 变动后部门名称 + */ + @Excel(name = "变动后部门", width = 20.0,height = 20.0, orderNum = "6") + private String afterOrgName; + /** + * 变动时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date changeTime; + + /** + * 导出变动时间 + */ + @Excel(name = "变动时间", width = 20.0,height = 20.0, orderNum = "7") + private String updateTime; + + private String month; + + /** + * 自己项目部所在分公司下的所有项目部id + */ + private List orgList; + +} diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/SysOrgService.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/SysOrgService.java index 00cdb69..169d082 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/SysOrgService.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/SysOrgService.java @@ -1,7 +1,10 @@ package com.bonus.system.basic.service; import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.system.api.domain.MapVo; +import com.bonus.system.api.domain.SysUser; import com.bonus.system.basic.domain.SysOrg; +import com.bonus.system.basic.domain.SysOrgHistoryBean; import com.bonus.system.basic.domain.SysTree; import com.bonus.system.basic.domain.vo.TreeSelect; import org.springframework.web.multipart.MultipartFile; @@ -104,4 +107,13 @@ public interface SysOrgService { * @return */ AjaxResult orgUpload(MultipartFile file, HttpServletRequest request, HttpServletResponse response); + + /** + * 查询组织变动记录 + * @param bean + * @return + */ + List getOrgHistoryList(SysOrgHistoryBean bean); + + List getOrgIdList(Long userId); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysOrgServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysOrgServiceImpl.java index 3f029eb..20912d2 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysOrgServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/basic/service/impl/SysOrgServiceImpl.java @@ -15,10 +15,7 @@ import com.bonus.system.api.domain.SysUser; import com.bonus.system.att.utils.AddressCoordinateFormatUtil; import com.bonus.system.att.utils.TreeUtils; import com.bonus.system.basic.dao.SysOrgDao; -import com.bonus.system.basic.domain.SysNotice; -import com.bonus.system.basic.domain.SysOrg; -import com.bonus.system.basic.domain.SysOrgImport; -import com.bonus.system.basic.domain.SysTree; +import com.bonus.system.basic.domain.*; import com.bonus.system.basic.domain.vo.TreeSelect; import com.bonus.system.basic.service.SysNoticeService; import com.bonus.system.basic.service.SysOrgService; @@ -318,6 +315,47 @@ public class SysOrgServiceImpl implements SysOrgService { } } + @Override + public List getOrgHistoryList(SysOrgHistoryBean bean) { + List list =orgDao.getOrgHistoryList(bean); + List process = process(list); + //后端生成的字段,无法在sql中查询 + if(bean.getOldOrgName() != null){ + process = process.stream().filter(s -> s.getOldOrgName().contains(bean.getOldOrgName())).collect(Collectors.toList()); + } + if(bean.getAfterOrgName() != null){ + process = process.stream().filter(s -> s.getAfterOrgName().contains(bean.getAfterOrgName())).collect(Collectors.toList()); + } + return process; + } + + public static List process(List list) { + // 按 userId 分组 + Map> groupedByUserId = list.stream() + .collect(Collectors.groupingBy(SysOrgHistoryBean::getUserId)); + List result = new ArrayList<>(); + for (List userList : groupedByUserId.values()) { + // 按 changeTime 正序排序 + userList.sort(Comparator.comparing(SysOrgHistoryBean::getChangeTime)); + // 舍弃少于2条数据的 userList + if (userList.size() < 2) { + continue; + } + // 内推 afterOrgName 到 oldOrgName + for (int i = 0; i < userList.size() - 1; i++) { + SysOrgHistoryBean current = userList.get(i); + SysOrgHistoryBean next = userList.get(i + 1); + next.setOldOrgName(current.getAfterOrgName()); + } + // 删除第一条数据 + userList.remove(0); + // 将处理后的 userList 添加到结果中 + result.addAll(userList); + } + return result; + } + + /** * 判断导入部门、请假类型 是否存在 * @@ -470,4 +508,13 @@ public class SysOrgServiceImpl implements SysOrgService { return !getChildList(list, t).isEmpty(); } + /** + * 根据用户编号查询组织编号 + * @param userId + */ + @Override + public List getOrgIdList(Long userId){ + return orgDao.getOrgIdList(userId); + } + } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/download/ExportFileController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/download/ExportFileController.java index fd971e2..fb67c50 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/download/ExportFileController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/download/ExportFileController.java @@ -24,6 +24,7 @@ import com.bonus.system.att.service.OrgChangeService; import com.bonus.system.basic.dao.SysOrgDao; import com.bonus.system.basic.domain.SysOrg; import com.bonus.system.basic.domain.SysOrgExport; +import com.bonus.system.basic.domain.SysOrgHistoryBean; import com.bonus.system.basic.service.SysOrgService; import com.bonus.system.dept.dao.ProDeptRoleDao; import com.bonus.system.dept.entity.EightMembersVacancyVo; @@ -510,6 +511,32 @@ public class ExportFileController { } } + /** + * 组织变更记录导出 + * + * @param response + * @param bean + * @return void + * @author:fly + * @date:2025-03-07-10:30 + */ + @RequiresPermissions("org:orgHis:export") + @GetMapping("/exportOrgHis") + public void exportOrgHis(HttpServletResponse response, SysOrgHistoryBean bean) { + try { + List orgHistoryList = sysOrgService.getOrgHistoryList(bean); + for (int i = 0; i < orgHistoryList.size(); i++) { + // 创建一个 SimpleDateFormat 对象,用于格式化日期 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 将 Date 转换为 String + String dateString = formatter.format(orgHistoryList.get(i).getChangeTime()); + orgHistoryList.get(i).setUpdateTime(dateString); + } + extracted(orgHistoryList, SysOrgHistoryBean.class, "组织变更记录", "组织变更记录", "组织变更记录导出", response); + } catch (Exception e) { + log.error(e.toString(), e); + } + } /** * 日报表导出 @@ -798,40 +825,6 @@ public class ExportFileController { } } - private List getMonthFirstAndLast(String monthString) { - List months = new ArrayList<>(); - // 定义日期格式 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); - YearMonth yearMonth; - // 使用预定义的 ISO_LOCAL_DATE 格式 (yyyy-MM-dd) - DateTimeFormatter isoFormatter = DateTimeFormatter.ISO_LOCAL_DATE; - - try { - // 判空及默认为当月 - if (monthString == null || monthString.trim().isEmpty()) { - // 如果字符串为空或仅包含空白字符,取当前月份 - yearMonth = YearMonth.from(LocalDate.now()); - } else { - // 尝试将字符串解析为 YearMonth 对象 - yearMonth = YearMonth.parse(monthString, formatter); - } - // 获取该月的第一天 - LocalDate firstDayOfMonth = yearMonth.atDay(1); - // 获取该月的最后一天 - LocalDate lastDayOfMonth = yearMonth.atEndOfMonth(); - months.add(firstDayOfMonth.format(isoFormatter)); - months.add(lastDayOfMonth.format(isoFormatter)); - } catch (DateTimeParseException e) { - // 如果解析失败,打印错误信息并使用当前月份 - YearMonth currentYearMonth = YearMonth.from(LocalDate.now()); - LocalDate firstDayOfCurrentMonth = currentYearMonth.atDay(1); - LocalDate lastDayOfCurrentMonth = currentYearMonth.atEndOfMonth(); - months.add(firstDayOfCurrentMonth.format(isoFormatter)); - months.add(lastDayOfCurrentMonth.format(isoFormatter)); - } - return months; - } - /** * 导出excel文件 diff --git a/bonus-modules/bonus-system/src/main/resources/mapper/basic/SysOrgDao.xml b/bonus-modules/bonus-system/src/main/resources/mapper/basic/SysOrgDao.xml index 37b7cfd..f63304f 100644 --- a/bonus-modules/bonus-system/src/main/resources/mapper/basic/SysOrgDao.xml +++ b/bonus-modules/bonus-system/src/main/resources/mapper/basic/SysOrgDao.xml @@ -171,6 +171,41 @@ + + insert into sys_organization(org_name,