|  |  | 
 |  |  |         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); | 
 |  |  | //        } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  |