|  |  |  | 
|---|
|  |  |  | if(model.getApplyEndTime()== null || model.getStartTime().getTime()>model.getApplyEndTime().getTime() ){ | 
|---|
|  |  |  | throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该申请生效周期时间不符合要求,请确认后修改重试~"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Solutions solutions = solutionsMapper.selectById(model.getSolutionId()); | 
|---|
|  |  |  | if(Objects.isNull(solutions)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //计算实际截止时间 | 
|---|
|  |  |  | Date actEndTime = new Date(model.getApplyEndTime().getTime() + (insuranceApply.getStartTime().getTime() - model.getApplyStartTime().getTime())); | 
|---|
|  |  |  | LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|---|
|  |  |  | 
|---|
|  |  |  | for (ApplyDetail applyDetail:applyDetailList) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //查询人员信息是否存在相同的方案下是否存在 冲突数据 | 
|---|
|  |  |  | this.checkMemberSolution(applyDetail.getSolutionId(),applyDetail.getIdcardNo(),applyDetail.getMemberName(),update.getStartTime(),update.getEndTime()); | 
|---|
|  |  |  | this.checkMemberSolution(solutions.getBaseId(),applyDetail.getIdcardNo(),applyDetail.getMemberName(),update.getStartTime() | 
|---|
|  |  |  | ,update.getEndTime(),insuranceApply.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | MemberInsurance memberInsurance = new MemberInsurance(applyDetail,user.getId()); | 
|---|
|  |  |  | memberInsurance.setRelationType(Constants.ZERO); | 
|---|
|  |  |  | 
|---|
|  |  |  | insuranceApply.setEndTime(countCyclePriceVO.getEndDate()); | 
|---|
|  |  |  | insuranceApply.setFinalEndTime(countCyclePriceVO.getEndDate()); | 
|---|
|  |  |  | insuranceApplyMapper.insert(insuranceApply); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //处理下级数据 | 
|---|
|  |  |  | this.dealApplyDetailData(insuranceApply,solutions,applyDetailList,loginUserInfo,countCyclePriceVO,true); | 
|---|
|  |  |  | InsuranceApply updBean = new InsuranceApply(); | 
|---|
|  |  |  | updBean.setId(insuranceApply.getId()); | 
|---|
|  |  |  | updBean.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add)); | 
|---|
|  |  |  | insuranceApplyMapper.updateById(updBean); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        if(1==1){ | 
|---|
|  |  |  | //            throw new BusinessException(ResponseStatus.NOT_ALLOWED); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //存储日志数据 | 
|---|
|  |  |  | Constants.ApplyLogType applyLogType = Constants.ApplyLogType.UPLOAD; | 
|---|
|  |  |  | String info =applyLogType.getInfo(); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | member.setIdcardNo(applyDetail.getIdcardNo()); | 
|---|
|  |  |  | member.setApplyId(insuranceApply.getId()); | 
|---|
|  |  |  | member.setStartTime(applyDetail.getStartTime()); | 
|---|
|  |  |  | member.setEndTime(applyDetail.getEndTime()); | 
|---|
|  |  |  | //                    member.setStartTime(applyDetail.getStartTime()); | 
|---|
|  |  |  | //                    member.setEndTime(applyDetail.getEndTime()); | 
|---|
|  |  |  | member.setDuId(applyDetail.getDuId()); | 
|---|
|  |  |  | member.setWorktypeId(applyDetail.getWorktypeId()); | 
|---|
|  |  |  | addMemberList.add(member); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询人员信息是否存在相同的方案下是否存在 冲突数据 | 
|---|
|  |  |  | this.checkMemberSolution(solutions.getId(),member.getIdcardNo(),member.getName(),insuranceApply.getStartTime(),insuranceApply.getEndTime()); | 
|---|
|  |  |  | this.checkMemberSolution(solutions.getBaseId(),member.getIdcardNo(),member.getName(),insuranceApply.getStartTime(),insuranceApply.getEndTime(),insuranceApply.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(CollectionUtils.isNotEmpty(addMemberList)){ | 
|---|
|  |  |  | memberJoinMapper.insertBatchSomeColumn(addMemberList); | 
|---|
|  |  |  | 
|---|
|  |  |  | applyDetail.setEndTime(insuranceApply.getApplyEndTime()); | 
|---|
|  |  |  | applyDetail.setSortnum(i); | 
|---|
|  |  |  | applyDetail.setApplyId(insuranceApply.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //根据员工身份证进行判断年龄 | 
|---|
|  |  |  | long age = Constants.getAgeByIdCard(applyDetail.getIdcardNo()); | 
|---|
|  |  |  | if(Objects.isNull(age) | 
|---|
|  |  |  | || age > solutions.getMaxAge() | 
|---|
|  |  |  | || age < solutions.getMinAge()){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+applyDetail.getMemberName()+"】员工年龄超出方案配置,方案配置【"+solutions.getMinAge()+" - "+solutions.getMaxAge()+"】!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Member member = null; | 
|---|
|  |  |  | if(Objects.isNull(applyDetail.getMemberId())){ | 
|---|
|  |  |  | if(CollectionUtils.isNotEmpty(memberList)){ | 
|---|
|  |  |  | 
|---|
|  |  |  | member.setApplyId(insuranceApply.getId()); | 
|---|
|  |  |  | member.setDuId(applyDetail.getDuId()); | 
|---|
|  |  |  | member.setWorktypeId(applyDetail.getWorktypeId()); | 
|---|
|  |  |  | member.setStartTime(applyDetail.getStartTime()); | 
|---|
|  |  |  | member.setEndTime(applyDetail.getEndTime()); | 
|---|
|  |  |  | //                        member.setStartTime(applyDetail.getStartTime()); | 
|---|
|  |  |  | //                        member.setEndTime(applyDetail.getEndTime()); | 
|---|
|  |  |  | memberMapper.updateById(member); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | 
|---|
|  |  |  | member.setApplyId(insuranceApply.getId()); | 
|---|
|  |  |  | member.setDuId(applyDetail.getDuId()); | 
|---|
|  |  |  | member.setWorktypeId(applyDetail.getWorktypeId()); | 
|---|
|  |  |  | member.setStartTime(applyDetail.getStartTime()); | 
|---|
|  |  |  | member.setEndTime(applyDetail.getEndTime()); | 
|---|
|  |  |  | //                    member.setStartTime(applyDetail.getStartTime()); | 
|---|
|  |  |  | //                    member.setEndTime(applyDetail.getEndTime()); | 
|---|
|  |  |  | memberMapper.updateById(member); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //根据员工身份证进行判断年龄 | 
|---|
|  |  |  | long age = Constants.getAgeByIdCard(member.getIdcardNo()); | 
|---|
|  |  |  | if(Objects.isNull(age) | 
|---|
|  |  |  | || age > solutions.getMaxAge() | 
|---|
|  |  |  | || age < solutions.getMinAge()){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+applyDetail.getMemberName()+"】员工年龄超出方案配置,方案配置【"+solutions.getMinAge()+" - "+solutions.getMaxAge()+"】!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | applyDetail.setMemberId(member.getId()); | 
|---|
|  |  |  | applyDetail.setIdcardNo(member.getIdcardNo()); | 
|---|
|  |  |  | applyDetail.setSex(member.getSex()); | 
|---|
|  |  |  | 
|---|
|  |  |  | * @param endTime | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void checkMemberSolution(Integer solutionId,String idCode,String memberName,Date startTime,Date endTime){ | 
|---|
|  |  |  | public void checkMemberSolution(Integer solutionId,String idCode,String memberName,Date startTime,Date endTime,Integer applyId){ | 
|---|
|  |  |  | List<ApplyDetail> applyDetailList = new ArrayList<ApplyDetail>(); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class, | 
|---|
|  |  |  | applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class, | 
|---|
|  |  |  | new MPJLambdaWrapper<ApplyDetail>() | 
|---|
|  |  |  | .selectAll(ApplyDetail.class) | 
|---|
|  |  |  | .selectAs(InsuranceApply::getCode,ApplyDetail::getApplyCode) | 
|---|
|  |  |  | .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId) | 
|---|
|  |  |  | .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId) | 
|---|
|  |  |  | .eq(ApplyDetail::getIdcardNo,idCode) | 
|---|
|  |  |  | .eq(InsuranceApply::getSolutionId,solutionId) | 
|---|
|  |  |  | .notIn(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.PLATFORM_RETURN | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.FAIL_RETURN | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.CLOSE | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.WTB_RETURN | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.WTB_CLOSED ) | 
|---|
|  |  |  | .eq(ApplyDetail::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .eq(Solutions::getBaseId,solutionId) | 
|---|
|  |  |  | .ne(Objects.nonNull(applyId),InsuranceApply::getId,applyId) | 
|---|
|  |  |  | .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 " + | 
|---|
|  |  |  | 
|---|
|  |  |  | " or " + | 
|---|
|  |  |  | " ( '"+DateUtil.getPlusTime(startTime)+"' > t.start_time AND '"+DateUtil.getPlusTime(endTime)+"' < t.end_time )" + | 
|---|
|  |  |  | " ) " )); | 
|---|
|  |  |  | if(applyDetailList.size() >Constants.ZERO){ | 
|---|
|  |  |  | ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO); | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该用户【"+memberName+" "+idCode+"】在保单【"+applyDetail.getApplyCode()+"】下已存在与本次提报冲突的日期"); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(applyDetailList.size() >Constants.ZERO){ | 
|---|
|  |  |  | ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO); | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该员工【"+memberName+" "+idCode+"】在该保险方案下已存在投保记录,无法进行该操作"); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void checkStaticMemberSolution(Integer solutionId,String idCode,String memberName,Date startTime,Date endTime,ApplyDetailJoinMapper applyDetailJoinMapper){ | 
|---|
|  |  |  | public static void checkStaticMemberSolution(Integer solutionId,String idCode,String memberName,Date startTime, | 
|---|
|  |  |  | Date endTime,ApplyDetailJoinMapper applyDetailJoinMapper){ | 
|---|
|  |  |  | List<ApplyDetail> applyDetailList = new ArrayList<ApplyDetail>(); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class, | 
|---|
|  |  |  | applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class, | 
|---|
|  |  |  | new MPJLambdaWrapper<ApplyDetail>() | 
|---|
|  |  |  | .selectAll(ApplyDetail.class) | 
|---|
|  |  |  | .selectAs(InsuranceApply::getCode,ApplyDetail::getApplyCode) | 
|---|
|  |  |  | .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId) | 
|---|
|  |  |  | .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId) | 
|---|
|  |  |  | .eq(ApplyDetail::getIdcardNo,idCode) | 
|---|
|  |  |  | .eq(InsuranceApply::getSolutionId,solutionId) | 
|---|
|  |  |  | .notIn(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.PLATFORM_RETURN | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.FAIL_RETURN | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.CLOSE | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.WTB_RETURN | 
|---|
|  |  |  | ,Constants.InsuranceApplyStatus.WTB_CLOSED ) | 
|---|
|  |  |  | .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 " + | 
|---|
|  |  |  | 
|---|
|  |  |  | " or " + | 
|---|
|  |  |  | " ( '"+DateUtil.getPlusTime(startTime)+"' > t.start_time AND '"+DateUtil.getPlusTime(endTime)+"' < t.end_time )" + | 
|---|
|  |  |  | " ) " )); | 
|---|
|  |  |  | if(applyDetailList.size() >Constants.ZERO){ | 
|---|
|  |  |  | ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO); | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该用户【"+memberName+" "+idCode+"】在保单【"+applyDetail.getApplyCode()+"】下已存在与本次提报冲突的日期"); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(applyDetailList.size() >Constants.ZERO){ | 
|---|
|  |  |  | ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO); | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该员工【"+memberName+" "+idCode+"】在该保险方案下已存在投保记录,无法进行该操作"); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | 
|---|
|  |  |  | .selectAs(Solutions::getName,InsuranceApply::getSolutionsName) | 
|---|
|  |  |  | .selectAs(Solutions::getType,InsuranceApply::getSolutionType) | 
|---|
|  |  |  | .selectAs(Company::getName,InsuranceApply::getCompanyName) | 
|---|
|  |  |  | .select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now() ) as guaranteeNum") | 
|---|
|  |  |  | .select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad  where ad.apply_id = t.id ) as insureNum") | 
|---|
|  |  |  | .select(" ifnull(( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now() ),0) as guaranteeNum") | 
|---|
|  |  |  | .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId) | 
|---|
|  |  |  | .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId) | 
|---|
|  |  |  | .eq(InsuranceApply::getId,model.getId()) | 
|---|
|  |  |  | 
|---|
|  |  |  | //查询明细 | 
|---|
|  |  |  | List<ApplyDetail> detailList =applyDetailJoinMapper.selectJoinList(ApplyDetail.class,wrapper1); | 
|---|
|  |  |  | if(detailList!=null){ | 
|---|
|  |  |  | insuranceApply.setInsureNum(detailList.size()); | 
|---|
|  |  |  | //            insuranceApply.setInsureNum(detailList.size()); | 
|---|
|  |  |  | insuranceApply.setApplyDetailList(detailList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | insuranceApply.setRemark(model.getRemark()); | 
|---|
|  |  |  | 
|---|
|  |  |  | BigDecimal sumAmount = BigDecimal.ZERO; | 
|---|
|  |  |  | List<ApplyDetail> applyDetailList = applyDetailMapper | 
|---|
|  |  |  | .selectList(new QueryWrapper<ApplyDetail>().lambda() | 
|---|
|  |  |  | .eq(ApplyDetail::getChangeStatus,Constants.ZERO) | 
|---|
|  |  |  | .ne(ApplyDetail::getChangeStatus,Constants.TWO) | 
|---|
|  |  |  | .eq(ApplyDetail::getApplyId,insuranceApply.getId())); | 
|---|
|  |  |  | if(CollectionUtils.isNotEmpty(applyDetailList)){ | 
|---|
|  |  |  | for (ApplyDetail applyDetail: applyDetailList) { | 
|---|
|  |  |  | 
|---|
|  |  |  | applyDetail.setCurrentFee(applyDetail.getFee()); | 
|---|
|  |  |  | applyDetailMapper.updateById(applyDetail); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | sumAmount = sumAmount.add(applyDetail.getCurrentFee()); | 
|---|
|  |  |  | if(Constants.equalsInteger(applyDetail.getChangeStatus(),Constants.ZERO) || applyDetail.getEndTime().getTime()>System.currentTimeMillis()){ | 
|---|
|  |  |  | sumAmount = sumAmount.add(applyDetail.getCurrentFee()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | insuranceApply.setCurrentFee(sumAmount); | 
|---|
|  |  |  | insuranceApplyMapper.updateById(insuranceApply); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        if(1==1){ | 
|---|
|  |  |  | //            throw new BusinessException(ResponseStatus.NOT_ALLOWED); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|