| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 加保数据处理 |
| | | * @param applyChange 加减保保单数据 |
| | |
| | | * @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){ |
| | |
| | | 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(), "保单中未存在明细记录"); |
| | | } |
| | |
| | | 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) { |