111
k94314517
2024-02-05 15e588eb6a7549ecd2aaffb45e67f11e68354eb6
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -369,7 +369,7 @@
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Constants.ApplyLogType applyLogType = null;
        String info = "";
            //如果是驳回,只能可驳回已签章状态下的退回申请状态进行操作
        //如果是驳回,只能可驳回已签章状态下的退回申请状态进行操作
        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WAIT_SIGNATURE.getKey())){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该申请状态已流转,当前不支持该操作~");
        }
@@ -485,8 +485,9 @@
        }
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ONE,model.getId(),model.getSolutionsName(),
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,model.getId(),model.getSolutionsName(),
                model.getCompanyId(), Constants.NoticeType.TWO);
        notices.setParam1(model.getApplyId().toString());
        noticesMapper.insert(notices);
        Multifile f = new Multifile();
@@ -566,6 +567,7 @@
                .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
                .selectAs(Solutions::getEmail,InsuranceApply::getSolutionEmail)
                .selectAs(Company::getName,InsuranceApply::getCompanyName)
                .selectAs(InsuranceApply::getCompanyId,ApplyChange::getCompanyId)
                .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
@@ -624,6 +626,7 @@
                            .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
                            .selectAs(Solutions::getEmail,InsuranceApply::getSolutionEmail)
                            .selectAs(Company::getName,InsuranceApply::getCompanyName)
                            .selectAs(InsuranceApply::getCompanyId,ApplyChange::getCompanyId)
                            .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                            .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                            .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
@@ -782,6 +785,9 @@
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
        if(!(solutions.getIsdeleted().equals(Constants.ZERO)||solutions.getStatus().equals(Constants.ZERO))){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"方案信息已被禁用");
        }
        List<ApplyDetail> applyDetailList = insuranceApply.getApplyDetailList();
        //判断是否存在重复信息
        List<String> idCardList = applyDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList());
@@ -817,7 +823,14 @@
        updBean.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
        insuranceApplyMapper.updateById(updBean);
        //存储日志数据
        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.UPLOAD;
        String info =applyLogType.getInfo();
//        info = info.replace("${param}", update.getCheckInfo());
        ApplyLog log = new ApplyLog(insuranceApply,applyLogType.getName(),info,insuranceApply.getId(),applyLogType.getKey(),null, null);
        applyLogMapper.insert(log);
        //发送待办业务
        //存储待办信息
@@ -896,7 +909,12 @@
        insuranceApply.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
        insuranceApplyMapper.updateById(insuranceApply);
        //存储日志数据
        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.UPLOAD_AGAIN;
        String info =applyLogType.getInfo();
//        info = info.replace("${param}", update.getCheckInfo());
        ApplyLog log = new ApplyLog(insuranceApply,applyLogType.getName(),info,insuranceApply.getId(),applyLogType.getKey(),null, null);
        applyLogMapper.insert(log);
        //存储待办信息
@@ -972,6 +990,8 @@
                        member.setSex(Constants.getSexByIdCard(applyDetail.getIdcardNo()));
                        member.setIdcardNo(applyDetail.getIdcardNo());
                        member.setApplyId(insuranceApply.getId());
                        member.setStartTime(applyDetail.getStartTime());
                        member.setEndTime(applyDetail.getEndTime());
                        member.setDuId(applyDetail.getDuId());
                        member.setWorktypeId(applyDetail.getWorktypeId());
                        memberMapper.insert(member);
@@ -979,6 +999,8 @@
                        member.setApplyId(insuranceApply.getId());
                        member.setDuId(applyDetail.getDuId());
                        member.setWorktypeId(applyDetail.getWorktypeId());
                        member.setStartTime(applyDetail.getStartTime());
                        member.setEndTime(applyDetail.getEndTime());
                        memberMapper.updateById(member);
                    }
                }else{
@@ -989,7 +1011,17 @@
                    member.setApplyId(insuranceApply.getId());
                    member.setDuId(applyDetail.getDuId());
                    member.setWorktypeId(applyDetail.getWorktypeId());
                    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());
@@ -1007,43 +1039,6 @@
            applyDetailJoinMapper.insertBatchSomeColumn(applyDetailList);
        }
    }
    public void saveApplyLog(InsuranceApply insuranceApply,Constants.InsuranceApplyStatus insuranceApplyStatus,String content){
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        ApplyLog applyLog = new ApplyLog();
        applyLog.setCreateDate(new Date());
        applyLog.setCreator(loginUserInfo.getId());
        applyLog.setIsdeleted(Constants.ZERO);
        applyLog.setApplyId(insuranceApply.getId());
        applyLog.setTitle(insuranceApplyStatus.getName());
        applyLog.setContent(content);
        applyLog.setObjType(insuranceApplyStatus.getKey());
        applyLog.setObjId( insuranceApply.getId());
        applyLog.setStatus(insuranceApply.getStatus());
        applyLogMapper.insert(applyLog);
    }
//    public BigDecimal countDetailFee(Solutions solutions ,Date startDate,Date endDate){
//        //查询保险实际周期
//        Integer cycle = DateUtil.calculateBetween(endDate,startDate,solutions.getDataType());
//        if(cycle==-1){
//            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"日期信息错误!");
//        }
//        return solutions.getPrice().multiply(new BigDecimal(cycle));
//    }
//    public static void main(String[] args) {
//        Date date1 = DateUtil.StringToDate("2023-03-01 00:00:00");
//        Date date2 = DateUtil.StringToDate("2023-04-01 00:00:00");
//        System.out.println(DateUtil.calculateBetween(date1,date2,0));
//        System.out.println(DateUtil.calculateBetween(date1,date2,1));
//        System.out.println(DateUtil.calculateBetween(date1,date2,2));
//        System.out.println(DateUtil.calculateBetween(date1,date2,3));
//
//    }
    @Override
@@ -1099,7 +1094,6 @@
  
    @Override
    public PageData<InsuranceApply> findPage(PageWrap<InsuranceApplyQueryDTO> pageWrap) {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        IPage<InsuranceApply> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<InsuranceApply> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
@@ -1107,10 +1101,10 @@
        queryWrapper.selectAll(InsuranceApply.class);
        queryWrapper.selectAs(Company::getName,InsuranceApply::getCompanyName);
        queryWrapper.selectAs(Solutions::getName,InsuranceApply::getSolutionsName);
        queryWrapper.select(" DATEDIFF( t.END_TIME ,now()  ) AS loseEfficacyDays ");
        queryWrapper.select(" DATEDIFF( t.END_TIME ,now()  ) AS loseEfficacyDays  ");
        queryWrapper.select(" ( select count(1) from apply_detail ad  where ad.apply_id = t.id ) as insureNum");
        if(!Objects.isNull(pageWrap.getModel())&&!Objects.isNull(pageWrap.getModel().getType())){
            queryWrapper.select(" ( select sum(td.fee) from taxes ts inner join tax_detial td on td.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id ) as taxesMoney");
            queryWrapper.select(" ifnull(( select sum(td.fee) from taxes ts inner join tax_detial td on td.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id ),0) as taxesMoney");
            queryWrapper.select(" ( select td.CREATE_DATE from taxes ts inner join tax_detial td on td.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id order by td.CREATE_DATE desc limit 1 ) as taxesLast ");
        }
        queryWrapper.leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId);
@@ -1122,6 +1116,8 @@
            queryWrapper.eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey());
            queryWrapper.lt(InsuranceApply::getEndTime, Utils.Date.getStart(new Date()));
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        //企业人员查看本企业数据
        if(loginUserInfo.getType().equals(Constants.ONE)){
            queryWrapper.eq(InsuranceApply::getCompanyId, loginUserInfo.getCompanyId());
@@ -1131,6 +1127,7 @@
            }else{
                queryWrapper.eq(InsuranceApply::getCompanyId, -1);
            }
            queryWrapper.eq(pageWrap.getModel().getCompanyId()!=null,InsuranceApply::getCompanyId, pageWrap.getModel().getCompanyId());
        }
        if (pageWrap.getModel().getSolutionId() != null) {
            queryWrapper.eq(InsuranceApply::getSolutionId, pageWrap.getModel().getSolutionId());
@@ -1285,13 +1282,9 @@
        if(insuranceApply.getStartTime().compareTo(new Date())<0  && insuranceApply.getEndTime().compareTo(new Date()) > 0 ){
            insuranceApply.setLoseEfficacyDays(DateUtil.daysBetweenDates(insuranceApply.getEndTime(),new Date()));
        }
        initApplyStatus(insuranceApply);
        //查询附件数据
        initImgData(insuranceApply);
        //查询操作记录
        List<ApplyLog> applyLogList = applyLogJoinMapper.selectJoinList(ApplyLog.class,
                new MPJLambdaWrapper<ApplyLog>()
@@ -1300,6 +1293,7 @@
                        .selectAs(Company::getName,ApplyLog::getCompanyName)
                        .leftJoin(SystemUser.class,SystemUser::getId,ApplyLog::getCreator)
                        .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                        .in(ApplyLog::getObjType,Constants.ApplyLogType.getTypeList(Constants.ZERO))
                        .eq(ApplyLog::getApplyId,insuranceApply.getId())
                        .orderByAsc(ApplyLog::getCreateDate)
        );
@@ -1313,12 +1307,14 @@
        if(insuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
            //如果当前时间大于结束日期 则使用结束日期对比开始日期
            if(DateUtil.compareDate(new Date(),insuranceApply.getEndTime())>=Constants.ZERO){
                insuranceApply.setServiceDays(DateUtil.daysBetweenDates(insuranceApply.getEndTime(),insuranceApply.getStartTime()));
                insuranceApply.setServiceDays(
                        DateUtil.daysBetweenDates(insuranceApply.getEndTime(),insuranceApply.getStartTime())+1
                );
            }else if(DateUtil.compareDate(insuranceApply.getStartTime(),new Date())>=Constants.ZERO){
                //未开始
                insuranceApply.setServiceDays(Constants.ZERO);
            }else{
                insuranceApply.setServiceDays(DateUtil.daysBetweenDates(new Date(),insuranceApply.getStartTime()));
                insuranceApply.setServiceDays(DateUtil.daysBetweenDates(new Date(),insuranceApply.getStartTime())+1);
            }
        }
    }
@@ -1349,17 +1345,17 @@
                    model.setBaoxiandanFile(f);
                }
                if(model.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
                    //如果当前时间大于结束日期 则使用结束日期对比开始日期
                    if(DateUtil.compareDate(new Date(),model.getEndTime())>=Constants.ZERO){
                        model.setServiceDays(DateUtil.daysBetweenDates(model.getEndTime(),model.getStartTime()));
                    }else if(DateUtil.compareDate(model.getStartTime(),new Date())>=Constants.ZERO){
                        //未开始
                        model.setServiceDays(Constants.ZERO);
                    }else{
                        model.setServiceDays(DateUtil.daysBetweenDates(new Date(),model.getStartTime()));
                    }
                }
//                if(model.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
//                    //如果当前时间大于结束日期 则使用结束日期对比开始日期
//                    if(DateUtil.compareDate(new Date(),model.getEndTime())>=Constants.ZERO){
//                        model.setServiceDays(DateUtil.daysBetweenDates(model.getEndTime(),model.getStartTime()));
//                    }else if(DateUtil.compareDate(model.getStartTime(),new Date())>=Constants.ZERO){
//                        //未开始
//                        model.setServiceDays(Constants.ZERO);
//                    }else{
//                        model.setServiceDays(DateUtil.daysBetweenDates(new Date(),model.getStartTime()));
//                    }
//                }
            }
        }
    }
@@ -1470,7 +1466,6 @@
        info = info.replace("${param}", insuranceApplyOptDTO.getOptIllustration());
        ApplyLog log = new ApplyLog(insuranceApply,applyLogType.getName(),info,insuranceApply.getId(),applyLogType.getKey(),JSONObject.toJSONString(insuranceApply), JSONObject.toJSONString(insuranceApply));
        applyLogMapper.insert(log);
//        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
    }
@@ -1499,16 +1494,13 @@
                if(CollectionUtils.isNotEmpty(applyDetailList)){
                    for (ApplyDetail applyDetail: applyDetailList) {
                        //2024-1-30 10:04:24 修改 根据实际天数进行计算 当前费用  总金额/总天数*实际天数
                        Integer maxDays = DateUtil.calculateBetween(applyDetail.getStartTime(),applyDetail.getEndTime(),0) + 1 ;
                        Integer maxDays = DateUtil.calculateBetween(applyDetail.getStartTime(),applyDetail.getEndTime(),0);
                        BigDecimal fee = applyDetail.getFee();
                        if(applyDetail.getStartTime().compareTo(new Date()) <= 0 && applyDetail.getEndTime().compareTo(new Date()) >= 0 ){
                            Integer days =  DateUtil.calculateBetween(applyDetail.getStartTime(),new Date(),0) + 1 ;
                            Integer days =  DateUtil.calculateBetween(applyDetail.getStartTime(),new Date(),0);
                            applyDetail.setCurrentFee(fee.divide(BigDecimal.valueOf(maxDays),2, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(days)));
                            applyDetailMapper.updateById(applyDetail);
                        }
//                        DateUtil.daysBetweenDates(applyDetail.getEndTime(),applyDetail.getStartTime());
//                        applyDetail.setCurrentFee(Constants.countDetailFee(solutions,new Date(),applyDetail.getStartTime()));
//                        applyDetailMapper.updateById(applyDetail);
                        sumAmount = sumAmount.add(applyDetail.getCurrentFee());
                    }
                }