yubo
2025-09-24 35cfaa7259f3d494e7bd03aec5c7e035049ee19b
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;
    }
}