From d7b6f020d3b6cce69f19f5198da95513c5d57b32 Mon Sep 17 00:00:00 2001
From: luoyb <412940104@qq.com>
Date: 星期二, 23 九月 2025 21:53:14 +0800
Subject: [PATCH] 1.系统管理中系统参数增加了将配置项写入缓存的功能 2.系统管理启动时将配置项写入缓存 3.员工基本信息增加了年假字段 4.员工基本信息服务增加了计算年假的功能

---
 febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java |  107 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 98 insertions(+), 9 deletions(-)

diff --git a/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java b/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java
index 21a2520..d37361d 100644
--- a/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java
+++ b/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java
@@ -28,6 +28,7 @@
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -214,15 +215,15 @@
     }
 
     /**
-     *
      * 增加员工后同步增加入职记录
-     *
+     * <p>
      * date 2021-07-30 09:12
-     * @author: luoyibo
+     *
      * @param empBaseInfo 员工信息
-     * @param operatorId 操作员Id
-     * @param empId 员工Id
+     * @param operatorId  操作员Id
+     * @param empId       员工Id
      * @return void
+     * @author: luoyibo
      */
     private void addEmpDimissLog(EmpBaseInfo empBaseInfo, String operatorId, Long empId) {
         EmpDimissionLog dimissionLog = new EmpDimissionLog();
@@ -231,6 +232,7 @@
         dimissionLog.setEntryDate(empBaseInfo.getEntryDate());
         dimissionLog.setDimissionType("20");
         dimissionLog.setRemark(empBaseInfo.getRemark());
+        dimissionLog.setDeptName(empBaseInfo.getAllDeptName());
         dimissionLog.setCreator(operatorId);
         dimissionLog.setModifier(operatorId);
 
@@ -355,6 +357,10 @@
         String operatorId = Optional.of(FebsUtil.getUserId()).orElse("1");
         String[] str = ids.split(",");
         List<String> list = new ArrayList<>(Arrays.asList(str));
+//        for (int i = 0, j = str.length; i < j; i++) {
+//            EmpBaseInfo emp = this.getById(str[i]);
+//            addEmpDimissLog(emp, operatorId, Long.valueOf(str[i]));
+//        }
         return empBaseInfoMapper.momentToNormal(list, operatorId) > 0;
     }
 
@@ -380,6 +386,7 @@
     public boolean closeEmpArchives(EmpDimissionLog empDimissionLog) {
         String operatorId = Optional.of(FebsUtil.getUserId()).orElse("1");
         String[] str = empDimissionLog.getEmpIds().split(",");
+        String[] empDeptNames = empDimissionLog.getDeptNames().split(",");
         List<String> list = new ArrayList<>(Arrays.asList(str));
         String[] strDate = empDimissionLog.getEntryDates().split(",");
 
@@ -396,6 +403,7 @@
             dimissionLog.setReporter(empDimissionLog.getReporter());
             dimissionLog.setCreator(operatorId);
             dimissionLog.setModifier(operatorId);
+            dimissionLog.setDeptName(empDeptNames[i]);
             dimissionLogService.save(dimissionLog);
         }
 
@@ -654,13 +662,13 @@
                 empBaseInfo.setArchivesStatus(dicItem.getDicItemCode());
             }
             empBaseInfo.setEmpStatus("0");
-            this.save(empBaseInfo);
+            boolean saveResult = this.save(empBaseInfo);
             //新入职员工需要增加一条入职记录
-            this.addEmpDimissLog(empBaseInfo,"2",empBaseInfo.getEmpId());
+            this.addEmpDimissLog(empBaseInfo, "2", empBaseInfo.getEmpId());
         }
     }
 
-    @Override
+    //    @Override
     public void getImage(String empId, HttpServletResponse response) throws Exception {
         EmpBaseInfo empBaseInfo = this.getById(empId);
         if (StrUtil.isBlank(empBaseInfo.getImagePath())) {
@@ -1189,7 +1197,7 @@
                 public void accept(QueryWrapper<EmpBaseInfo> wrapper) {
                     for (int i = 0; i < certificates.length; i++) {
                         String ageBtn = "|" + certificates[i] + "|";
-                        wrapper.gt("LOCATE('"+ageBtn+"',CONCAT('|',replace( certificateList, ',', '|,|'),'|'))",0);
+                        wrapper.gt("LOCATE('" + ageBtn + "',CONCAT('|',replace( certificateList, ',', '|,|'),'|'))", 0);
                     }
                 }
             };
@@ -1431,4 +1439,85 @@
     public boolean updateDeptName() {
         return empBaseInfoMapper.updateDeptName() > 0;
     }
+
+    @Override
+    public boolean updateEmpAge(String userId) {
+        List<EmpBaseInfo> empBaseInfoList = new ArrayList<>();
+        if (StringUtils.isNotBlank(userId)) {
+            EmpBaseInfo empBaseInfo = this.getById(userId);
+            empBaseInfoList.add(empBaseInfo);
+        } else {
+            empBaseInfoList = this.list();
+        }
+        if (!empBaseInfoList.isEmpty()) {
+            empBaseInfoList.parallelStream().forEach(p -> {
+                p.setAge(DateUtil.ageOfNow(p.getBirthdate()));
+                this.saveOrUpdate(p);
+            });
+        }
+        return false;
+    }
+
+    @Override
+    public void updateAnnualLeave(String userId) {
+        EmpBaseInfo empBaseInfo = this.getById(userId);
+        int holiday = calculateHoliday(empBaseInfo.getEntryDate());
+        empBaseInfo.setAnnualLeave(holiday);
+        baseMapper.update(null, new LambdaUpdateWrapper<EmpBaseInfo>()
+                .set(EmpBaseInfo::getAnnualLeave, holiday)
+                .eq(EmpBaseInfo::getEmpId, empBaseInfo.getEmpId()));
+    }
+
+    @Override
+    public void updateAnnualLeave() {
+        List<EmpBaseInfo> list = this.list();
+        list.parallelStream().forEach(p -> {
+            int holiday = calculateHoliday(p.getEntryDate());
+            p.setAnnualLeave(holiday);
+            baseMapper.update(null, new LambdaUpdateWrapper<EmpBaseInfo>()
+                    .set(EmpBaseInfo::getAnnualLeave, holiday)
+                    .eq(EmpBaseInfo::getEmpId, p.getEmpId()));
+        });
+    }
+
+    @Override
+    public void updateEmpBaseKeyInfo() {
+        List<EmpBaseInfo> list = this.list();
+        list.parallelStream().forEach(p -> {
+            int holiday = calculateHoliday(p.getEntryDate());
+            int age = calculateAge(p.getBirthdate());
+
+            baseMapper.update(null, new LambdaUpdateWrapper<EmpBaseInfo>()
+                    .set(EmpBaseInfo::getAnnualLeave, holiday)
+                    .set(EmpBaseInfo::getAge, age)
+                    .eq(EmpBaseInfo::getEmpId, p.getEmpId()));
+        });
+    }
+
+    /**
+     * 根据设置的参数计算员工的年假
+     * @param date 入职日期
+     * @return 年假天数
+     */
+    private int calculateHoliday(Date date) {
+        int holiday = 0;
+        int joinYear = DateUtil.ageOfNow(date);
+        String configValue = redisService.get("annual_leave").toString();
+        String[] values = StrUtil.split(configValue, "|");
+        String[] condition = StrUtil.split(values[0], ",");
+        String[] days = StrUtil.split(values[1], ",");
+        if (condition.length == 2) {
+            int one = Integer.parseInt(condition[0]);
+            int two = Integer.parseInt(condition[1]);
+            if (joinYear >= one && joinYear < two) {
+                holiday = Integer.parseInt(days[0]);
+            } else if (joinYear >= two) {
+                holiday = Integer.parseInt(days[1]);
+            }
+        }
+        return holiday;
+    }
+    private int  calculateAge(Date date){
+        return DateUtil.ageOfNow(date);
+    }
 }

--
Gitblit v1.8.0