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/impl/EmpBaseInfoServiceImpl.java |   87 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+), 1 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 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