From 35cfaa7259f3d494e7bd03aec5c7e035049ee19b Mon Sep 17 00:00:00 2001
From: yubo <autumnal_wind@yeah.net>
Date: 星期三, 24 九月 2025 19:34:09 +0800
Subject: [PATCH] feat: 新增社保档位提醒功能

---
 febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/IEmpBaseInfoService.java         |   14 +++-
 febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpBaseInfoController.java    |   22 +++++++
 febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/impl/EmpBaseInfoServiceImpl.java |   87 ++++++++++++++++++++++++++++
 3 files changed, 116 insertions(+), 7 deletions(-)

diff --git a/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpBaseInfoController.java b/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpBaseInfoController.java
index eb19d36..f9bb82a 100644
--- a/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpBaseInfoController.java
+++ b/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/controller/EmpBaseInfoController.java
@@ -22,7 +22,6 @@
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -292,4 +291,25 @@
             throw new FebsException(message);
         }
     }
+
+    @ApiOperation(value = "社保提醒人员基本信息翻页列表")
+    @GetMapping("insurance/alert")
+    @PreAuthorize("hasAuthority('empBaseinfo:list')")
+    public FebsResponse insuranceAlertEmpBaseInfoList(QueryRequest request, EmpBaseInfo empBaseinfo) {
+        Map<String, Object> dataTable = FebsUtil.getDataTable(this.empBaseInfoService.findInsuranceEmpBaseInfos(request, empBaseinfo));
+        return new FebsResponse().data(dataTable);
+    }
+    @ApiOperation(value = "导出员工")
+    @RequestMapping(value = "export/insurance",method= RequestMethod.POST)
+    @ControllerEndpoint(operation = "导出社保提醒数据", exceptionMessage = "导出Excel失败")
+    public void exportInsuranceWithField(QueryRequest request, HttpServletResponse response, String exportField,EmpBaseInfo empBaseinfo) throws IOException {
+        request.setPageSize(25535);
+        request.setPageNum(1);
+        List<EmpBaseInfo> exportList = this.empBaseInfoService.findInsuranceEmpBaseInfos(request, empBaseinfo).getRecords();
+        List<Map<String, Object>> allList = PoiExportExcel.getDataList(exportField, exportList, null);
+        String fileName = "社保四险员工列表";
+        Date currentDate = new Date();
+        String dateStr = DateUtil.formatDate(currentDate);
+        boolean result = PoiExportExcel.exportCommonExcel(response, fileName + dateStr, fileName, allList);
+    }
 }
diff --git a/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/IEmpBaseInfoService.java b/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/IEmpBaseInfoService.java
index 6397fcc..a3bfce3 100644
--- a/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/IEmpBaseInfoService.java
+++ b/febs-server/febs-server-hr/src/main/java/cc/mrbird/febs/server/hr/service/IEmpBaseInfoService.java
@@ -1,18 +1,14 @@
 package cc.mrbird.febs.server.hr.service;
 
+import cc.mrbird.febs.common.core.entity.QueryRequest;
 import cc.mrbird.febs.common.core.entity.system.DicItem;
 import cc.mrbird.febs.common.core.exception.FebsException;
 import cc.mrbird.febs.server.hr.entity.*;
-
-import cc.mrbird.febs.common.core.entity.QueryRequest;
-import cc.mrbird.febs.server.hr.entity.EmpDimissionLog;
-import cc.mrbird.febs.server.hr.entity.EmpJobChange;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import javax.servlet.http.HttpServletResponse;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
@@ -245,4 +241,12 @@
      */
     void updateEmpBaseKeyInfo();
 
+    /**
+     * 查询社保档位提醒员工  查询(分页)
+     *
+     * @param request     QueryRequest
+     * @param empBaseInfo empBaseinfo
+     * @return IPage<EmpBaseinfo>
+     */
+    IPage<EmpBaseInfo> findInsuranceEmpBaseInfos(QueryRequest request, EmpBaseInfo empBaseInfo);
 }
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 d37361d..d1a12eb 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
@@ -1494,8 +1494,27 @@
         });
     }
 
+    @Override
+    public IPage<EmpBaseInfo> findInsuranceEmpBaseInfos(QueryRequest request, EmpBaseInfo empBaseInfo) {
+        Page<EmpBaseInfo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        SortUtil.handlePageSort(request, page, "entryDate", FebsConstant.ORDER_ASC, true);
+        IPage<EmpBaseInfo> iPage = empBaseInfoMapper.selectPageVo(page, createInsuranceAlertQueryWrapper(empBaseInfo));
+        List<EmpBaseInfo> list = iPage.getRecords();
+        List<DicItem> dicItems = CastUtil.castList(redisService.get("dicItems"), DicItem.class);
+        list.forEach(item -> {
+            item.setInsuranceTypeName(dicItems.stream()
+                    .filter(k -> DicCode.INSURANCETYPE.equals(k.getDicCode()) && k.getDicItemCode().equals(item.getInsuranceType()))
+                    .findFirst()
+                    .map(DicItem::getDicItemName)
+                    .orElse("未知"));
+        });
+        iPage.setRecords(list);
+        return iPage;
+    }
+
     /**
      * 根据设置的参数计算员工的年假
+     *
      * @param date 入职日期
      * @return 年假天数
      */
@@ -1517,7 +1536,73 @@
         }
         return holiday;
     }
-    private int  calculateAge(Date date){
+
+    private int calculateAge(Date date) {
         return DateUtil.ageOfNow(date);
     }
+
+    private QueryWrapper<EmpBaseInfo> createInsuranceAlertQueryWrapper(EmpBaseInfo empBaseInfo) {
+        QueryWrapper<EmpBaseInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("a.DelFlag", 0);
+        //人员的状态,0-在职 1-离职 2-退休
+        queryWrapper.eq("a.empStatus", "0");
+        if (StringUtils.isNotBlank(empBaseInfo.getSex())) {
+            queryWrapper.in("a.sex", empBaseInfo.getSex());
+        }
+           //男,1 女,2 (非深户)四险二档,6(非深户)四险一档,7
+        int four_one_woman = Integer.parseInt(redisService.get("four_one_woman").toString());
+        int four_one_man = Integer.parseInt(redisService.get("four_one_man").toString());
+        int four_two_woman = Integer.parseInt(redisService.get("four_two_woman").toString());
+        int four_two_man = Integer.parseInt(redisService.get("four_two_man").toString());
+
+        if (StringUtils.isBlank(empBaseInfo.getInsuranceType())) {
+            queryWrapper.and(wrapper -> wrapper
+                    .nested(inner -> inner
+                            .eq("a.insuranceType", "6") // insuranceType = '6'
+                            .and(nestedInner -> nestedInner
+                                    .nested(ageSexWrapper -> ageSexWrapper
+                                            .gt("a.age", four_two_man) // age > 55
+                                            .eq("a.sex", "1") // sex = '1'
+                                    ).or().nested(ageSexWrapper -> ageSexWrapper
+                                            .gt("a.age", four_two_woman) // age > 46
+                                            .eq("a.sex", "2") // sex = '2'
+                                    )
+                            )
+                    ).or().nested(inner -> inner
+                            .eq("a.insuranceType", "7") // insuranceType = '7'
+                            .and(nestedInner -> nestedInner
+                                    .nested(ageSexWrapper -> ageSexWrapper
+                                            .gt("a.age", four_one_man) // age > 45
+                                            .eq("a.sex", "1") // sex = '1'
+                                    ).or().nested(ageSexWrapper -> ageSexWrapper
+                                            .gt("a.age", four_one_woman) // age > 39
+                                            .eq("a.sex", "2") // sex = '2'
+                                    )
+                            )
+                    )
+            );
+        } else {
+            queryWrapper.eq("a.insuranceType", empBaseInfo.getInsuranceType());
+            if (empBaseInfo.getInsuranceType().equals("7")) {
+                queryWrapper.and(wrapper -> wrapper.nested(inner -> inner
+                        .gt("a.age", four_one_man) // age > 45
+                        .eq("a.sex", "1") // sex='1'
+                ).or().nested(inner -> inner
+                        .gt("a.age", four_one_woman) // age > 39
+                        .eq("a.sex", "2") // sex='2'
+                ));
+            } else if (empBaseInfo.getInsuranceType().equals("6")) {
+                queryWrapper.and(wrapper -> wrapper.nested(inner -> inner
+                        .gt("a.age", four_two_man) // age > 55
+                        .eq("a.sex", "1") // sex='1'
+                ).or().nested(inner -> inner
+                        .gt("a.age", four_two_woman) // age > 46
+                        .eq("a.sex", "2") // sex='2'
+                ));
+            }
+
+        }
+        //queryWrapper.in("c.dept_Id", remoteDeptService.userRightDepts().split(StringConstant.COMMA));
+        return queryWrapper;
+    }
 }

--
Gitblit v1.8.0