k94314517
2025-06-10 ca1e1982c1b6cf275b45ceb6d952465f84ed3830
git ch
已修改2个文件
241 ■■■■■ 文件已修改
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -1416,8 +1416,6 @@
        }
    }
    /**
     * 加保数据处理
     * @param applyChange 加减保保单数据
@@ -1426,6 +1424,202 @@
     * @param loginUserInfo 操作人
     */
    public void addChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList,
                                List<DuSolution> duSolutionList,
                                InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee,Integer delSize,
                                List<Integer> worktypeIdList){
        if(applyChange.getApplyStartTime().getTime()>insuranceApply.getEndTime().getTime()){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保生效期不能大于保单结束日期");
        }
        //查询本次加保所有人员信息
        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                .eq(Member::getIsdeleted,Constants.ZERO)
                .in(Member::getIdcardNo,addDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList()))
        );
        //查询本次加保所有人员的历史保单记录
        List<ApplyDetail> applyDetailAllList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class,
                new MPJLambdaWrapper<ApplyDetail>()
                        .selectAll(ApplyDetail.class)
                        .selectAs(InsuranceApply::getCode,ApplyDetail::getApplyCode)
                        .selectAs(InsuranceApply::getStatus,ApplyDetail::getApplyStatus)
                        .selectAs(Company::getName,ApplyDetail::getCompanyName)
                        .selectAs(Solutions::getBaseId,ApplyDetail::getSolutionBaseId)
                        .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
                        .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                        .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                        .in(ApplyDetail::getMemberId,memberList.stream().map(i->i.getId()).collect(Collectors.toList()))
                        .eq(ApplyDetail::getIsdeleted,Constants.ZERO));
        List<ApplyChagneDetail> applyChangeDetailAllList = applyChagneDetailJoinMapper.selectJoinList(ApplyChagneDetail.class,
                new MPJLambdaWrapper<ApplyChagneDetail>()
                        .selectAll(ApplyChagneDetail.class)
                        .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                        .leftJoin(Member.class,Member::getId,ApplyChagneDetail::getMemberId)
                        .eq(ApplyChange::getApplyId,applyChange.getApplyId())
                        .in(Member::getIdcardNo,memberList.stream().map(i->i.getId()).collect(Collectors.toList()))
                        .in(ApplyChange::getStatus, Constants.ZERO, Constants.ONE));
        for (int i = 0; i < addDetailList.size(); i++) {
            ApplyChagneDetail applyChagneDetail = addDetailList.get(i);
            if (
                    Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO) && Objects.isNull(applyChagneDetail.getDuId())
                            || Objects.isNull(applyChagneDetail.getWorktypeId())
                            || StringUtils.isBlank(applyChagneDetail.getIdcardNo())
            ) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】必填项缺失");
            }
            //根据员工身份证进行判断年龄
            long age = Constants.getAgeByIdCard(applyChagneDetail.getIdcardNo());
            if(Objects.isNull(age)
                    || age > solutions.getMaxAge()
                    || age < solutions.getMinAge()){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+applyChagneDetail.getMemberName()+"】员工年龄超出方案配置 方案配置【"+solutions.getMinAge()+" - "+solutions.getMaxAge()+"】存在异常数据!");
            }
            //查询当前处理的人员信息
            List<Member> optMembers = memberList.stream().filter(j->j.getIdcardNo().equals(applyChagneDetail.getIdcardNo())).collect(Collectors.toList());
            Member member = new Member();
            if(CollectionUtils.isEmpty(optMembers)){
                member = new Member();
                member.setCreateDate(new Date());
                member.setCreator(loginUserInfo.getId());
                member.setIsdeleted(Constants.ZERO);
                member.setName(applyChagneDetail.getMemberName());
                member.setCompanyId(insuranceApply.getCompanyId());
                member.setSex(Constants.getSexByIdCard(applyChagneDetail.getIdcardNo()));
                if(!IdcardUtil.isValidCard(applyChagneDetail.getIdcardNo())){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"加保员工信息身份证信息错误["+member.getName()+"]");
                }
                member.setIdcardNo(applyChagneDetail.getIdcardNo());
                member.setApplyId(insuranceApply.getId());
                member.setDuId(applyChagneDetail.getDuId());
                member.setWorktypeId(applyChagneDetail.getWorktypeId());
                memberMapper.insert(member);
                applyChagneDetail.setMemberId(member.getId());
            }else{
                member = optMembers.get(Constants.ZERO);
                member.setApplyId(insuranceApply.getId());
                member.setDuId(applyChagneDetail.getDuId());
                member.setWorktypeId(applyChagneDetail.getWorktypeId());
                member.setStartTime(applyChagneDetail.getStartTime());
                member.setEndTime(applyChagneDetail.getEndTime());
                memberMapper.updateById(member);
                applyChagneDetail.setMemberId(member.getId());
                if(applyChangeDetailAllList.stream().filter(
                        j->Constants.equalsInteger(j.getMemberId(),applyChagneDetail.getMemberId())
                ).collect(Collectors.toList()).size()>Constants.ZERO){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在申请中的加减保/换厂单据");
                }
            }
            List<ApplyDetail> memberApplyDetailList = new ArrayList<>();
            if(CollectionUtils.isNotEmpty(applyDetailAllList)){
                memberApplyDetailList = applyDetailAllList.stream().filter(j->j.getIdcardNo().equals(applyChagneDetail.getIdcardNo())).collect(Collectors.toList());
            }
            if(CollectionUtils.isEmpty(memberApplyDetailList)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "保单中未存在明细记录");
            }
            if(memberApplyDetailList.stream().filter(j->j.getIdcardNo().equals(applyChagneDetail.getIdcardNo())&&Constants.equalsInteger(j.getApplyId(),applyChange.getApplyId())
                    && j.getStartTime().getTime() <= DateUtil.getMontageDate(applyChange.getApplyStartTime(),1).getTime()
                    && j.getEndTime().getTime() >= DateUtil.getMontageDate(insuranceApply.getEndTime(),2).getTime()
            ).collect(Collectors.toList()).size()>Constants.ZERO){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,加保人员【" + applyChagneDetail.getMemberName() + "】存在日期冲突的数据");
            };
            if(memberApplyDetailList.stream().filter(j->j.getIdcardNo().equals(applyChagneDetail.getIdcardNo())
                    &&Constants.equalsInteger(j.getApplyId(),applyChange.getApplyId())
                    && j.getStartTime().getTime() <= System.currentTimeMillis()
                    && j.getEndTime().getTime() >= System.currentTimeMillis()
            ).collect(Collectors.toList()).size()>Constants.ZERO){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在保障中的保单信息,无法进行加保");
            };
            List<ApplyDetail> optApplyDetailList = applyDetailAllList.stream()
                    .filter(j->Constants.equalsInteger(j.getApplyId(),applyChange.getApplyId())
            ).collect(Collectors.toList());
            if(CollectionUtils.isEmpty(optApplyDetailList)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "保单中未存在明细记录");
            }
            ApplyDetail applyDetail = optApplyDetailList.get(Constants.ZERO);
            applyChagneDetail.setPrice(applyDetail.getPrice());
            applyChagneDetail.setCreateDate(new Date());
            applyChagneDetail.setCreator(loginUserInfo.getId());
            applyChagneDetail.setIsdeleted(Constants.ZERO);
            applyChagneDetail.setApplyChangeId(applyChange.getId());
            applyChagneDetail.setStartTime(DateUtil.getMontageDate(applyChange.getApplyStartTime(),1));
            applyChagneDetail.setEndTime(DateUtil.getMontageDate(insuranceApply.getEndTime(),2));
            applyChagneDetail.setType(Constants.ZERO);
            List<ApplyDetail> checkStaticMemberSolutionList = memberApplyDetailList.stream()
                            .filter(j->Constants.equalsInteger(j.getSolutionBaseId(),solutions.getBaseId())
                            && !( j.getApplyStatus() == Constants.InsuranceApplyStatus.CLOSE.getKey() || j.getApplyStatus() == Constants.InsuranceApplyStatus.WTB_CLOSED.getKey() )
                            && (
                                ( applyChange.getApplyStartTime().getTime()<= j.getStartTime().getTime() && j.getStartTime().getTime() <  insuranceApply.getEndTime().getTime() )
                                    ||
                                ( applyChange.getApplyStartTime().getTime()< j.getEndTime().getTime() && j.getEndTime().getTime() <  insuranceApply.getEndTime().getTime() )
                                    ||
                                ( applyChange.getApplyStartTime().getTime()> j.getStartTime().getTime() &&   insuranceApply.getEndTime().getTime() < j.getEndTime().getTime() )
                                            )
                            ).collect(Collectors.toList());
            if(checkStaticMemberSolutionList.size() >Constants.ZERO){
                String companyName = checkStaticMemberSolutionList.get(Constants.ZERO).getCompanyName();
                String idCode = checkStaticMemberSolutionList.get(Constants.ZERO).getIdcardNo();
                if(StringUtils.isNotBlank(companyName)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该员工【"+applyChagneDetail.getMemberName()+" "+idCode+"】已在【"+companyName+"】存在保险,请联系客服确认");
                }else{
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该员工【"+applyChagneDetail.getMemberName()+" "+idCode+"】在该保险方案下已存在投保记录,无法进行该操作");
                }
            };
            //查询员工是在主单下 是否存在生效中的数据
            if(!Objects.isNull(applyChagneDetail.getMemberId())){
                if (applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>().lambda()
                        .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                        .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
                        .le(ApplyDetail::getStartTime, "now()")
                        .ge(ApplyDetail::getEndTime, "now()")
                ) > Constants.ZERO) {
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在保障中的保单信息,无法进行加保");
                }
            }
            //验证派遣单位信息 与工种信息 是否存在
            if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
                if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {
                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "【" + applyChagneDetail.getMemberName() + "】员工派遣单位未查询到!");
                }
            }
            if (worktypeIdList.stream().filter(d ->  Constants.equalsInteger(d,applyChagneDetail.getWorktypeId()))
                    .collect(Collectors.toList()).size() <= Constants.ZERO) {
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "【" + applyChagneDetail.getMemberName() + "】员工工种信息未查询到!");
            }
            applyChagneDetail.setMemberId(member.getId());
            //如果是减保业务为仅替换 且 方案的扣费周期和总周期相等 则处理减保费用
            if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)
                    && Constants.equalsInteger(solutions.getTimeUnit(),solutions.getInsureCycleUnit()) && delSize> i){
                applyChagneDetail.setFee(BigDecimal.ZERO);
            }else{
                applyChagneDetail.setFee(detailFee);
            }
            applyChagneDetailJoinMapper.insert(applyChagneDetail);
        }
    }
    /**
     * 加保数据处理
     * @param applyChange 加减保保单数据
     * @param addDetailList  加保人员
     * @param duSolutionList  派遣单位方案数据
     * @param loginUserInfo 操作人
     */
    public void addChangeDetailOld(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList,
                                List<DuSolution> duSolutionList,
                                InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee,Integer delSize,
                                List<Integer> worktypeIdList){
@@ -1456,6 +1650,7 @@
            ApplyDetail applyDetail = applyDetailJoinMapper.selectOne(new QueryWrapper<ApplyDetail>()
                            .lambda()
                            .eq(ApplyDetail::getApplyId,applyChange.getApplyId()).last("limit 1"));
            if(Objects.isNull(applyDetail)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "保单中未存在明细记录");
            }
@@ -1548,6 +1743,7 @@
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在保障中的保单信息,无法进行加保");
                }
            }
            //验证派遣单位信息 与工种信息 是否存在
            if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
                if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -2591,6 +2591,47 @@
        };
    }
    public static void checkStaticMemberSolutionNew(Integer solutionId,Integer memberId,String memberIdCard,String memberName,Date startTime,
                                                 Date endTime,ApplyDetailJoinMapper applyDetailJoinMapper){
        List<ApplyDetail> applyDetailList = new ArrayList<ApplyDetail>();
        try {
            applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class,
                    new MPJLambdaWrapper<ApplyDetail>()
                            .selectAll(ApplyDetail.class)
                            .selectAs(InsuranceApply::getCode,ApplyDetail::getApplyCode)
                            .selectAs(Company::getName,ApplyDetail::getCompanyName)
                            .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
                            .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                            .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                            .eq(ApplyDetail::getIdcardNo,memberIdCard)
                            .eq(Solutions::getBaseId,solutionId)
                            .eq(ApplyDetail::getIsdeleted,Constants.ZERO)
                            .notIn(InsuranceApply::getStatus
                                    ,Constants.InsuranceApplyStatus.CLOSE.getKey()
                                    ,Constants.InsuranceApplyStatus.WTB_CLOSED.getKey() )
                            .apply(" ( " +
                                    " '"+DateUtil.getPlusTime(startTime)+"'  <= t.start_time AND t.start_time < '"+DateUtil.getPlusTime(endTime)+"' " +
                                    " or " +
                                    "  ( '"+DateUtil.getPlusTime(startTime)+"' < t.end_time AND t.end_time < '"+DateUtil.getPlusTime(endTime)+"' )  " +
                                    " or " +
                                    " ( '"+DateUtil.getPlusTime(startTime)+"' > t.start_time AND '"+DateUtil.getPlusTime(endTime)+"' < t.end_time )" +
                                    " ) " ));
        }catch (Exception e){
        }
        if(applyDetailList.size() >Constants.ZERO){
            String companyName = applyDetailList.get(Constants.ZERO).getCompanyName();
            String idCode = applyDetailList.get(Constants.ZERO).getIdcardNo();
            if(StringUtils.isNotBlank(companyName)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该员工【"+memberName+" "+idCode+"】已在【"+companyName+"】存在保险,请联系客服确认");
            }else{
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该员工【"+memberName+" "+idCode+"】在该保险方案下已存在投保记录,无法进行该操作");
            }
        };
    }
    public static void checkStaticMemberSolution(Integer solutionId,Integer memberId,String memberIdCard,String memberName,Date startTime,
                                                 Date endTime,ApplyDetailJoinMapper applyDetailJoinMapper){
        List<ApplyDetail> applyDetailList = new ArrayList<ApplyDetail>();