111
k94314517
2024-02-05 15e588eb6a7549ecd2aaffb45e67f11e68354eb6
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -101,6 +101,8 @@
    @Autowired
    private SolutionsMapper solutionsMapper;
    @Autowired
    private NoticesMapper noticesMapper;
    /**
     * 平台退回投保
     * @param param
@@ -126,7 +128,7 @@
        ApplyChange update = new ApplyChange();
        update.setEditDate(new Date());
        update.setEditor(user.getId());
        update.setStatus(Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS_NO.getKey());
        update.setStatus(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey());
        update.setCheckDate(update.getEditDate());
        update.setCheckInfo(param.getCheckInfo());
        update.setCheckUserId(user.getId());
@@ -169,6 +171,7 @@
        update.setStatus(Constants.ApplyChangeStatus.APPROVE.getKey());
        update.setCheckDate(update.getEditDate());
        update.setCheckInfo(param.getCheckInfo());
        update.setApplyId(model.getApplyId());
        update.setCheckUserId(user.getId());
        update.setId(model.getId());
        update.setValidCode(param.getValidCode());
@@ -192,6 +195,9 @@
            dealDetailsDUdata(update);
        }
//        if(1==1){
//            throw new BusinessException(ResponseStatus.DATA_EMPTY);
//        }
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_PLATFORM_APPROVE;
        String info = "";
@@ -342,6 +348,17 @@
            MemberInsurance memberInsurance = new MemberInsurance(applyDetail,update.getId());
            memberInsuranceJoinMapper.insert(memberInsurance);
            Member member = memberMapper.selectById(detail.getMemberId());
            if(Objects.isNull(member)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到员工数据");
            }
            member.setApplyId(update.getApplyId());
            member.setDuId(detail.getDuId());
            member.setWorktypeId(detail.getWorktypeId());
            member.setStartTime(detail.getStartTime());
            member.setEndTime(detail.getEndTime());
            memberMapper.updateById(member);
        }
    }
    /**
@@ -359,7 +376,6 @@
                        .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                        .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyChange::getApplyId)
                        .leftJoin(Solutions.class, Solutions::getId, InsuranceApply::getSolutionId)
                        .leftJoin(Solutions.class, Solutions::getId, ApplyChange::getSolutionsId)
                        .leftJoin(Worktype.class, Worktype::getId, ApplyChagneDetail::getWorktypeId)
                        .leftJoin(DispatchUnit.class, DispatchUnit::getId, ApplyChagneDetail::getDuId)
                        .eq(ApplyChagneDetail::getApplyChangeId, update.getId())
@@ -378,20 +394,17 @@
        //加保业务 使用的加保金额
        ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO_add = new ApplyChangeCyclePriceDTO();
        applyChangeCyclePriceDTO_add.setApplyId(update.getApplyId());
        applyChangeCyclePriceDTO_add.setValidTime(DateUtil.getMontageDate(update.getStartTime(), 1));
        applyChangeCyclePriceDTO_add.setValidTime(DateUtil.getMontageDate(update.getApplyStartTime(), 1));
        //加保 添加的金额
        CountCyclePriceVO countCyclePriceVO_add = this.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO_add);
        //减保业务 使用的减保金额
        ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO_reduce = new ApplyChangeCyclePriceDTO();
        applyChangeCyclePriceDTO_reduce.setApplyId(update.getApplyId());
        applyChangeCyclePriceDTO_reduce.setValidTime(DateUtil.getMontageDate(update.getStartTime(), 3));
        //减保 需要减少的金额
        CountCyclePriceVO countCyclePriceVO_reduce = this.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO_reduce);
        for (ApplyChagneDetail detail : detailList) {
            Member member = memberMapper.selectById(detail.getMemberId());
            if(Objects.isNull(member)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到员工数据");
            }
            if (Constants.equalsInteger(detail.getType(), Constants.ZERO)) {
                //加保
                ApplyDetail add = new ApplyDetail();
@@ -407,26 +420,24 @@
                add.setDuId(detail.getDuId());
                add.setStartTime(update.getApplyStartTime());
                add.setEndTime(detail.getEndTime());
                add.setFee(new BigDecimal(0));
//                add.setFee(Constants.countDetailFee(detail.getSolutionTimeUnit(),detail.getSolutionPrice(), add.getStartTime(),add.getEndTime()));
                if (DateUtil.daysBetweenDates(add.getStartTime(), new Date()) >= 0) {
                    add.setStartTime(DateUtil.getMontageDate(update.getApplyStartTime(), 1));
                    add.setEndTime(DateUtil.getMontageDate(detail.getEndTime(), 2));
                add.setStartTime(DateUtil.getMontageDate(update.getApplyStartTime(), 1));
                add.setEndTime(DateUtil.getMontageDate(detail.getEndTime(), 2));
                add.setFee(countCyclePriceVO_add.getCyclePrice());
                    add.setFee(countCyclePriceVO_add.getCyclePrice());
                    if (DateUtil.daysBetweenDates(DateUtil.getMontageDate(add.getStartTime(), 2), new Date()) >= 0) {
                        Integer days = DateUtil.daysBetweenDates(new Date(), DateUtil.getMontageDate(add.getStartTime(), 2)) + 1;
                        //如果已产生费用,计算已产生费用
                        add.setCurrentFee(this.getApplyPrice(update.getApplyId(), days));
                    }
//                addList.add(add);
                    applyDetailJoinMapper.insert(add);
                    totalFee.add(add.getFee());
                    currentFee.add(add.getCurrentFee());
                if (DateUtil.daysBetweenDates(DateUtil.getMontageDate(detail.getStartTime(), 2), new Date()) >= 0) {
                    Integer days = DateUtil.daysBetweenDates(DateUtil.getMontageDate(new Date(), 2), detail.getStartTime()) + 1;
                    //如果已产生费用,计算已产生费用
                    add.setCurrentFee(this.getApplyPrice(update.getApplyId(), days));
                }else{
                    add.setCurrentFee(BigDecimal.ZERO);
                }
                applyDetailJoinMapper.insert(add);
                totalFee = totalFee.add(add.getFee());
                currentFee = currentFee.add(add.getCurrentFee());
                    MemberInsurance memberInsurance = new MemberInsurance(detail, update, update.getEditor(), add.getId());
                    memberInsuranceList.add(memberInsurance);
                } else {
                MemberInsurance memberInsurance = new MemberInsurance(detail, update, update.getEditor(), add.getId());
                memberInsuranceList.add(memberInsurance);
            } else {
                    //减保操作
                    //查询员工是在主单下 是否存在生效中的数据
                    ApplyDetail oldModel = applyDetailJoinMapper.selectOne(new QueryWrapper<ApplyDetail>().lambda()
@@ -437,32 +448,31 @@
                    if (oldModel == null || oldModel.getStartTime() == null || oldModel.getStartTime().getTime() > update.getApplyStartTime().getTime()) {
                        throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,用户【" + detail.getMemberName() + "】原保单信息有误,当前申请不支持减保处理!");
                    }
                    //退保需要退回的费用
                    //减保业务 使用的减保金额
                    ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO_reduce = new ApplyChangeCyclePriceDTO();
                    applyChangeCyclePriceDTO_reduce.setApplyId(update.getApplyId());
                    applyChangeCyclePriceDTO_reduce.setValidTime(DateUtil.getMontageDate(update.getApplyStartTime(), 2));
                    //减保 需要减少的金额 即 退保需要退回的费用
                    CountCyclePriceVO countCyclePriceVO_reduce = this.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO_reduce);
                    BigDecimal updateFee = countCyclePriceVO_reduce.getCyclePrice().multiply(new BigDecimal(-1));
                    BigDecimal updateCurrentFee = oldModel.getFee().subtract(updateFee);
//                BigDecimal updateCurrentFee = new BigDecimal(0);
//                if(DateUtil.daysBetweenDates(update.getApplyStartTime(),new Date() )>0){
//                    //如果生效时间 是今天之前,退回已产生费用,计算已产生费用(总费用-已产生费用)
//                    updateCurrentFee = updateFee.subtract(oldModel.getCurrentFee());
//                }
//                    BigDecimal updateFee = (Constants.countDetailFee(detail.getSolutionTimeUnit(), detail.getSolutionPrice(), oldModel.getStartTime(), update.getApplyStartTime()));
//                    BigDecimal updateCurrentFee = new BigDecimal(0);
                    if (DateUtil.daysBetweenDates(update.getApplyStartTime(), new Date()) > 0) {
                        //如果生效时间 是今天之前,退回已产生费用,计算已产生费用(总费用-已产生费用)
                        updateCurrentFee = updateFee.subtract(Constants.formatBigdecimal(oldModel.getCurrentFee()));
                    //当审批时间 大于 申请的时间时 计算实际减少金额 因为已扣金额会大于 应扣金额
                    BigDecimal updateCurrentFee = BigDecimal.ZERO;
                    if (DateUtil.daysBetweenDates(DateUtil.getMontageDate(new Date(), 2),update.getApplyStartTime()) > 0) {
                        applyChangeCyclePriceDTO_reduce.setValidTime(DateUtil.getMontageDate(new Date(), 2));
                        //获取 大于审批日期导致 多减的金额
                        CountCyclePriceVO timeoutCountCyclePriceVOReduce = this.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO_reduce);
                        updateCurrentFee = timeoutCountCyclePriceVOReduce.getCyclePrice().subtract(countCyclePriceVO_reduce.getCyclePrice());
                    }
                    applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda()
                            .setSql(" fee = ifnull(fee,0)+" + updateFee)
                            .setSql(" current_fee = " + updateCurrentFee)
                            .set(ApplyDetail::getEndTime, update.getApplyStartTime())
                            .set(ApplyDetail::getEndTime, DateUtil.getMontageDate(update.getApplyStartTime(), 3))
                            .set(ApplyDetail::getEditor, update.getEditor())
                            .set(ApplyDetail::getEditDate, update.getEditDate())
                            .eq(ApplyDetail::getId, oldModel.getApplyId())
                            .eq(ApplyDetail::getId, oldModel.getId())
                    );
                    totalFee.add(updateFee);
                    currentFee.add(updateCurrentFee);
                    totalFee = totalFee.add(updateFee);
                    currentFee = currentFee.add(updateCurrentFee);
                    //修改 员工投保明细记录 历史数据
                    memberInsuranceJoinMapper.update(null, new UpdateWrapper<MemberInsurance>().lambda()
@@ -470,26 +480,28 @@
                            .set(MemberInsurance::getEndTime, update.getApplyStartTime())
                            .eq(MemberInsurance::getRelationId, oldModel.getId())
                    );
                }
            }
            member.setApplyId(update.getApplyId());
            member.setDuId(detail.getDuId());
            member.setWorktypeId(detail.getWorktypeId());
            member.setStartTime(detail.getStartTime());
            member.setEndTime(detail.getEndTime());
            memberMapper.updateById(member);
            if (memberInsuranceList != null && memberInsuranceList.size() > 0) {
//            applyDetailJoinMapper.insertBatchSomeColumn(addList);
                memberInsuranceJoinMapper.insertBatchSomeColumn(memberInsuranceList);
            }
            if (totalFee.compareTo(new BigDecimal(0)) != 0) {
                //如果保单金额发生编码,更新总保单金额
                insuranceApplyMapper.update(null, new UpdateWrapper<InsuranceApply>().lambda()
                        .setSql(" fee = ifnull(fee,0)+" + totalFee)
                        .setSql(" current_fee = ifnull(current_fee,0)+" + currentFee)
                        .set(InsuranceApply::getEditor, update.getEditor())
                        .set(InsuranceApply::getEditDate, update.getEditDate())
                        .eq(InsuranceApply::getId, update.getApplyId())
                );
            }
        }
        if (totalFee.compareTo(new BigDecimal(0)) != 0) {
            //如果保单金额发生编码,更新总保单金额
            insuranceApplyMapper.update(null, new UpdateWrapper<InsuranceApply>().lambda()
                    .setSql(" fee = ifnull(fee,0)+" + totalFee)
                    .setSql(" current_fee = ifnull(current_fee,0)+" + currentFee)
                    .set(InsuranceApply::getEditor, update.getEditor())
                    .set(InsuranceApply::getEditDate, update.getEditDate())
                    .eq(InsuranceApply::getId, update.getApplyId())
            );
        }
    }
@@ -510,10 +522,23 @@
            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId());
        if(Objects.isNull(insuranceApply)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(insuranceApply.getIsdeleted().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"数据已删除,无法进行该操作");
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Constants.ApplyLogType applyLogType = null;
        String info = "";
        ApplyChange update = new ApplyChange();
        Constants.NoticeType noticeType = Constants.NoticeType.FOUR;
        if(param.getDealBackApply() ==1){
            //如果是驳回,只能可驳回已签章状态下的退回申请状态进行操作
            if(!Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())){
@@ -522,12 +547,8 @@
            applyLogType = Constants.ApplyLogType.CA_PALTFORM_REFUSE_APPLY;
            info = applyLogType.getInfo();
            info = info.replace("${param}", param.getCheckInfo());
//
            if( Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())){
                update.setStatus(Constants.ApplyChangeStatus.SIGNATURE.getKey());
            }else if( Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey())){
                update.setStatus(Constants.ApplyChangeStatus.UPLOAD.getKey());
            }
            update.setStatus(Constants.ApplyChangeStatus.SIGNATURE.getKey());
            noticeType = Constants.NoticeType.FIVE;
        }else{
            //如果是同意,两种申请退回状态都可操作
            if(!(Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())
@@ -537,6 +558,7 @@
            update.setStatus(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey());
            applyLogType = Constants.ApplyLogType.CA_PLATFORM_AGREE_BACK_APPLY;
        }
        update.setEditDate(new Date());
        update.setEditor(user.getId());
        //同意退回,直接回到最初状态,如果驳回退回申请,则保单状态回到待上传保险单
@@ -545,6 +567,18 @@
        update.setCheckUserId(user.getId());
        update.setId(model.getId());
        applyChangeMapper.updateById(update);
        //存储待办信息
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.APPLY_CHANGE;
        if(model.getType().equals(Constants.ONE)){
            noticeObjectType = Constants.NoticeObjectType.CHANGE_FACTORY;
        }
        //删除其他待办
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,model.getId()));
        Notices notices = new Notices(noticeObjectType,Constants.ZERO,model.getId(),solutions.getName(),
                model.getCompanyId(), noticeType);
        noticesMapper.insert(notices);
        ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
        applyLogMapper.insert(log);
@@ -568,7 +602,6 @@
        if (!loginUserInfo.getType().equals(Constants.ONE)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "用户类型错误:非企业用户无法进行该操作");
        }
        BigDecimal fee = BigDecimal.ZERO;
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(applyChange.getApplyId());
        if (Objects.isNull(insuranceApply)) {
@@ -601,19 +634,33 @@
        }
        applyChange.setCreateDate(new Date());
        applyChange.setCreator(loginUserInfo.getId());
        applyChange.setEditor(loginUserInfo.getId());
        applyChange.setEditDate(new Date());
        applyChange.setIsdeleted(Constants.ZERO);
        applyChange.setApplyStartTime(applyChange.getValidTime());
        applyChange.setStatus(Constants.ZERO);
        applyChangeMapper.insert(applyChange);
        this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,fee);
        BigDecimal fee  = this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,BigDecimal.ZERO);
        ApplyChange applyChangeFee = new ApplyChange();
        applyChangeFee.setId(applyChange.getId());
        applyChangeFee.setFee(fee);
        applyChangeMapper.updateById(applyChangeFee);
        this.saveApplyLog(applyChange,Constants.ApplyChangeLogStatus.UPLOAD,null);
//        if(1==1){
//            throw new BusinessException(ResponseStatus.DATA_EMPTY);
//        }
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_COMPANY_COMMIT;
        String info =applyLogType.getInfo();
        info = info.replace("${param}", "");
        ApplyLog log = new ApplyLog(applyChange,applyLogType.getName(),info,applyChange.getId(),applyLogType.getKey(), null, null);
        applyLogMapper.insert(log);
        return applyChange.getId();
    }
@@ -640,7 +687,9 @@
        if(Objects.isNull(dbApplyChange)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!dbApplyChange.getStatus().equals(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey())){
        if(! (dbApplyChange.getStatus().equals(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey())
        || dbApplyChange.getStatus().equals(Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS_NO.getKey()) )
        ){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "业务保申请单状态错误");
        }
@@ -676,20 +725,28 @@
        applyChange.setEditDate(new Date());
        applyChange.setEditor(loginUserInfo.getId());
        applyChange.setApplyStartTime(applyChange.getValidTime());
        applyChange.setStatus(Constants.ZERO);
        BigDecimal fee = BigDecimal.ZERO;
        //删除历史数据
        applyChagneDetailJoinMapper.delete(new QueryWrapper<ApplyChagneDetail>().lambda().eq(ApplyChagneDetail::getApplyChangeId,applyChange.getId()));
        this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,fee);
        BigDecimal fee = this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,BigDecimal.ZERO);
        applyChange.setFee(fee);
        applyChangeMapper.updateById(applyChange);
        this.saveApplyLog(applyChange,Constants.ApplyChangeLogStatus.UPLOAD,null);
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_UPLOAD_AGAIN;
        String info =applyLogType.getInfo();
        info = info.replace("${param}", "");
        ApplyLog log = new ApplyLog(applyChange,applyLogType.getName(),info,applyChange.getId(),applyLogType.getKey(), null, null);
        applyLogMapper.insert(log);
        return applyChange.getId();
    }
    public void dealApplyChangeData(ApplyChange applyChange,InsuranceApply insuranceApply,CompanySolution companySolution,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal fee){
    public BigDecimal dealApplyChangeData(ApplyChange applyChange,InsuranceApply insuranceApply,CompanySolution companySolution,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal fee){
        //查询保险方案下的所有派遣单位
@@ -725,7 +782,7 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行加保");
            }
            //加保明细数据 计算金额  根据批单时间 计算
            applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(insuranceApply.getStartTime(),1));
            applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(applyChange.getValidTime(),1));
            CountCyclePriceVO countCyclePriceVO =  this.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO);
            BigDecimal detailFee = countCyclePriceVO.getCyclePrice();
@@ -741,7 +798,7 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "该企业分配保险方案无法进行减保");
            }
            //减保明细数据 计算金额  根据批单时间 前一天 计算
            applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(insuranceApply.getStartTime(),3));
            applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(applyChange.getValidTime(),2));
            CountCyclePriceVO countCyclePriceVO =  this.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO);
            BigDecimal detailFee = countCyclePriceVO.getCyclePrice();
            this.delChangeDetail(applyChange,delDetailList,insuranceApply,solutions,loginUserInfo,detailFee);
@@ -753,26 +810,22 @@
        if (CollectionUtils.isNotEmpty(changeDetailList)) {
            this.changeDetail(applyChange,changeDetailList,duWorktypeList,duSolutionList,loginUserInfo);
        }
        return fee;
    }
    public void saveApplyLog(ApplyChange applyChange,Constants.ApplyChangeLogStatus applyChangeLogStatus,String content){
    public void saveApplyLog(ApplyChange applyChange,Constants.ApplyLogType applyLogType,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(applyChange.getApplyId());
        applyLog.setTitle(applyChangeLogStatus.getName());
        applyLog.setTitle(applyLogType.getName());
        if(StringUtils.isNotBlank(content)){
            applyLog.setContent(applyChangeLogStatus.getInfo().replace("${param}",content));
        }else{
            applyLog.setContent(applyChangeLogStatus.getInfo());
            applyLog.setContent(applyLogType.getInfo().replace("${param}",content));
        }
        applyLog.setObjType(applyChangeLogStatus.getKey());
        applyLog.setObjType(applyLogType.getKey());
        applyLog.setObjId( applyChange.getId());
        applyLog.setStatus(applyChange.getStatus());
        applyLogMapper.insert(applyLog);
@@ -785,7 +838,8 @@
     * @param delDetailList
     * @param loginUserInfo
     */
    public void delChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> delDetailList,InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee){
    public void delChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> delDetailList,InsuranceApply insuranceApply,Solutions solutions,
                                LoginUserInfo loginUserInfo,BigDecimal detailFee){
        for (ApplyChagneDetail applyChagneDetail : delDetailList) {
            if (Objects.isNull(applyChagneDetail.getMemberId())) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】必填项缺失");
@@ -798,6 +852,7 @@
            if (applyChagneDetailJoinMapper.selectJoinCount(
                    new MPJLambdaWrapper<ApplyChagneDetail>()
                            .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                            .eq(ApplyChange::getApplyId,applyChange.getApplyId())
                            .eq(ApplyChagneDetail::getMemberId, applyChagneDetail.getMemberId())
                            .in(ApplyChange::getStatus, Constants.ZERO, Constants.ONE)
            ) > Constants.ZERO) {
@@ -821,8 +876,15 @@
            applyChagneDetail.setApplyChangeId(applyChange.getId());
            applyChagneDetail.setType(Constants.ONE);
            applyChagneDetail.setStartTime(DateUtil.getMontageDate(applyDetail.getStartTime(),1));
            applyChagneDetail.setEndTime(DateUtil.getMontageDate(applyChange.getStartTime(),3));
            applyChagneDetail.setStartTime(applyDetail.getStartTime());
            applyChagneDetail.setEndTime(DateUtil.getMontageDate(applyChange.getApplyStartTime(),3));
            member.setApplyId(insuranceApply.getId());
            member.setDuId(applyChagneDetail.getDuId());
            member.setWorktypeId(applyChagneDetail.getWorktypeId());
            member.setStartTime(applyChagneDetail.getStartTime());
            member.setEndTime(applyChagneDetail.getEndTime());
            memberMapper.updateById(member);
            applyChagneDetail.setFee( detailFee.multiply(new BigDecimal(-1)));
            applyChagneDetailJoinMapper.insert(applyChagneDetail);
@@ -848,6 +910,13 @@
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】必填项缺失");
            }
            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);
            Member member = new Member();
            if(Objects.isNull(applyChagneDetail.getMemberId())){
                //查询是否存在该用户
@@ -869,11 +938,15 @@
                    member.setApplyId(insuranceApply.getId());
                    member.setDuId(applyChagneDetail.getDuId());
                    member.setWorktypeId(applyChagneDetail.getWorktypeId());
                    member.setStartTime(applyChagneDetail.getStartTime());
                    member.setEndTime(applyChagneDetail.getEndTime());
                    memberMapper.insert(member);
                }else{
                    member.setApplyId(insuranceApply.getId());
                    member.setDuId(applyChagneDetail.getDuId());
                    member.setWorktypeId(applyChagneDetail.getWorktypeId());
                    member.setStartTime(applyChagneDetail.getStartTime());
                    member.setEndTime(applyChagneDetail.getEndTime());
                    memberMapper.updateById(member);
                }
            }else{
@@ -884,17 +957,31 @@
                member.setApplyId(insuranceApply.getId());
                member.setDuId(applyChagneDetail.getDuId());
                member.setWorktypeId(applyChagneDetail.getWorktypeId());
                member.setStartTime(applyChagneDetail.getStartTime());
                member.setEndTime(applyChagneDetail.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(),"【"+applyChagneDetail.getMemberName()+"】员工年龄超出方案配置 方案配置【"+solutions.getMinAge()+" - "+solutions.getMaxAge()+"】存在异常数据!");
            }
            //查询员工是否存在  0待签署 1已签章 的此类业务保数据 同一主单下
            if (applyChagneDetailJoinMapper.selectJoinCount(
                    new MPJLambdaWrapper<ApplyChagneDetail>()
                            .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                            .eq(ApplyChagneDetail::getMemberId, applyChagneDetail.getMemberId())
                            .eq(ApplyChange::getApplyId,applyChange.getApplyId())
                            .in(ApplyChange::getStatus, Constants.ZERO, Constants.ONE)
            ) > Constants.ZERO) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】存在申请中的加减保/换厂单据");
            }
            //查询员工是在主单下 是否存在生效中的数据
            if(!Objects.isNull(applyChagneDetail.getMemberId())){
                if (applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>().lambda()
@@ -915,13 +1002,6 @@
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "【" + applyChagneDetail.getMemberName() + "】员工工种信息未查询到!");
            }
            applyChagneDetail.setMemberId(member.getId());
            applyChagneDetail.setCreateDate(new Date());
            applyChagneDetail.setCreator(loginUserInfo.getId());
            applyChagneDetail.setIsdeleted(Constants.ZERO);
            applyChagneDetail.setApplyChangeId(applyChange.getId());
            applyChagneDetail.setStartTime(DateUtil.getMontageDate(applyChange.getStartTime(),1));
            applyChagneDetail.setEndTime(DateUtil.getMontageDate(insuranceApply.getEndTime(),2));
            applyChagneDetail.setType(Constants.ZERO);
            applyChagneDetail.setFee(detailFee);
            applyChagneDetailJoinMapper.insert(applyChagneDetail);
        }
@@ -963,10 +1043,11 @@
            List<ApplyDetail>  applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda()
                    .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                    .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
                    .le(ApplyDetail::getStartTime, DateUtil.getDate(new Date(),"yyyy-MM-dd HH:mm:ss"))
                    .ge(ApplyDetail::getEndTime, DateUtil.getDate(new Date(),"yyyy-MM-dd HH:mm:ss")));
                    .ge(ApplyDetail::getEndTime, new Date()));
            if(applyDetailList.size()>Constants.ONE){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】保单信息异常,存在多条数据");
            }else if(applyDetailList.size()==Constants.ZERO){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】未查询到投保记录");
            }
            ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
            if(applyChange.getValidTime().compareTo( applyDetail.getEndTime())>0){
@@ -985,7 +1066,18 @@
            applyChagneDetail.setIsdeleted(Constants.ZERO);
            applyChagneDetail.setApplyChangeId(applyChange.getId());
            applyChagneDetail.setType(Constants.TWO);
            applyChagneDetail.setStartTime(applyDetail.getStartTime());
            applyChagneDetail.setEndTime(applyDetail.getEndTime());
            applyChagneDetailJoinMapper.insert(applyChagneDetail);
            member.setApplyId(applyChange.getApplyId());
            member.setDuId(applyChagneDetail.getDuId());
            member.setWorktypeId(applyChagneDetail.getWorktypeId());
            member.setStartTime(applyChagneDetail.getStartTime());
            member.setEndTime(applyChagneDetail.getEndTime());
            memberMapper.updateById(member);
        }
    }
@@ -1094,23 +1186,36 @@
                .selectAll(ApplyChange.class)
                .selectAs(InsuranceApply::getCode,ApplyChange::getApplyCode)
                .selectAs(Solutions::getName,ApplyChange::getSolutionsName)
                .selectAs(Company::getName,ApplyChange::getCompanyName)
                .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 0  )",ApplyChange::getAddNum)
                .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 1  )",ApplyChange::getDelNum)
                .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 2  )",ApplyChange::getChangeNum)
                .select("( select ifnull(sum(ad.FEE),0) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID  )",ApplyChange::getChangeMoney)
                .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                .eq(!Objects.isNull(model.getType()),ApplyChange::getType,model.getType())
                .eq(!Objects.isNull(model.getStatus())&&!model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()),ApplyChange::getStatus,model.getStatus())
                .in(!Objects.isNull(model.getStatus())&&model.getStatus().equals(Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()),ApplyChange::getStatus,
                        Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey(),
                        Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())
                .eq(!Objects.isNull(model.getCompanyId()),InsuranceApply::getCompanyId,model.getCompanyId())
//                .eq(!Objects.isNull(model.getCompanyId()),InsuranceApply::getCompanyId,model.getCompanyId())
//                .eq(!Objects.isNull(model.getSolutionsId()),ApplyChange::getSolutionsId,model.getSolutionsId())
                .eq(!Objects.isNull(model.getBaseSolutionsId()),Solutions::getBaseId,model.getBaseSolutionsId())
                .ge(StringUtils.isNotBlank(model.getCreateDateS()),ApplyChange::getCreateDate, model.getCreateDateS()+" 00:00:00" )
                .le(StringUtils.isNotBlank(model.getCreateDateE()),ApplyChange::getCreateDate, model.getCreateDateE()+" 23:59:59" );
        LoginUserInfo loginUserInfo =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        //企业人员查看本企业数据
        if(loginUserInfo.getType().equals(Constants.ONE)){
            queryWrapper.eq(InsuranceApply::getCompanyId, loginUserInfo.getCompanyId());
        }else{
            if(loginUserInfo.getCompanyIdList()!=null && loginUserInfo.getCompanyIdList().size()>0){
                queryWrapper.in(InsuranceApply::getCompanyId, loginUserInfo.getCompanyIdList());
            }else{
                queryWrapper.eq(InsuranceApply::getCompanyId, -1);
            }
            queryWrapper.eq(pageWrap.getModel().getCompanyId()!=null,InsuranceApply::getCompanyId, pageWrap.getModel().getCompanyId());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
@@ -1128,7 +1233,7 @@
    public void changeOpt(ApplyChangeOptDTO applyChangeOptDTO){
        if(Objects.isNull(applyChangeOptDTO)
                ||Objects.isNull(applyChangeOptDTO.getApplyId())
                ||StringUtils.isBlank(applyChangeOptDTO.getOptIllustration())){
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
@@ -1144,11 +1249,20 @@
        if(applyChange.getIsdeleted().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"数据已删除,无法进行该操作");
        }
        Constants.ApplyChangeLogStatus applyChangeLogStatus = Constants.ApplyChangeLogStatus.RETURN_APPLY;
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息");
        }
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_PLATFORM_CHECK_PASS_NO;
        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.APPLY_CHANGE;
        if(applyChange.getType().equals(Constants.ONE)){
            noticeObjectType = Constants.NoticeObjectType.CHANGE_FACTORY;
        }
        if(applyChangeOptDTO.getOptType().equals(3)){
            //发起退回申请
            if(loginUserInfo.getType().equals(Constants.ONE)){
            if(!loginUserInfo.getType().equals(Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非企业端用户无法进行该操作");
            }
            if(!(applyChange.getStatus().equals(Constants.ApplyChangeStatus.UPLOAD.getKey())
@@ -1162,8 +1276,16 @@
                applyChange.setStatus(Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey());
            }
            //存储待办信息
            //删除其他待办
            noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,applyChange.getId()));
            Notices notices = new Notices(noticeObjectType,Constants.ZERO,applyChange.getId(),solutions.getName(),
                    applyChange.getCompanyId(), Constants.NoticeType.THREE);
            noticesMapper.insert(notices);
        }else if(applyChangeOptDTO.getOptType().equals(4)){
            applyChangeLogStatus = Constants.ApplyChangeLogStatus.PLATFORM_AGREE;
            applyLogType = Constants.ApplyLogType.CA_PLATFORM_AGREE_BACK_APPLY;
            //平台同意退回
            if(loginUserInfo.getType().equals(Constants.ZERO)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非平台端用户无法进行该操作");
@@ -1174,7 +1296,7 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"数据状态错误无法进行该操作!");
            }
        }else if(applyChangeOptDTO.getOptType().equals(5)){
            applyChangeLogStatus = Constants.ApplyChangeLogStatus.PLATFORM_UN_AGREE;
            applyLogType = Constants.ApplyLogType.CA_PALTFORM_REFUSE_APPLY;
            //平台驳回退回
            if(loginUserInfo.getType().equals(Constants.ZERO)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非平台端用户无法进行该操作");
@@ -1191,14 +1313,19 @@
            }
        }else if(applyChangeOptDTO.getOptType().equals(6)){
            //企业关闭
            applyChangeLogStatus = Constants.ApplyChangeLogStatus.CLOSE;
            if(loginUserInfo.getType().equals(Constants.ONE)){
            applyLogType = Constants.ApplyLogType.CA_COMPANY_CLOSE;
            if(!loginUserInfo.getType().equals(Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非企业端用户无法进行该操作");
            }
            if(!applyChange.getStatus().equals(Constants.ApplyChangeStatus.PLATFORM_AGREE.getKey())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"数据状态错误无法进行该操作!");
            }
            applyChange.setStatus(Constants.ApplyChangeStatus.CLOSE.getKey());
            //存储待办信息
            //删除其他待办
            noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,applyChange.getId()));
        }else{
            throw new BusinessException(ResponseStatus.BAD_REQUEST  );
        }
@@ -1206,8 +1333,10 @@
        applyChange.setEditDate(new Date());
        applyChangeMapper.updateById(applyChange);
        //存储日志数据
        this.saveApplyLog(applyChange,applyChangeLogStatus,applyChangeOptDTO.getOptIllustration());
        String info = applyLogType.getInfo();
        info = info.replace("${param}", applyChangeOptDTO.getOptIllustration());
        ApplyLog log = new ApplyLog(applyChange,applyLogType.getName(),info,applyChange.getId(),applyLogType.getKey(), null, null);
        applyLogMapper.insert(log);
    }
@@ -1238,6 +1367,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.ONE))
                        .eq(ApplyLog::getObjId,applyChange.getId())
                        .orderByAsc(ApplyLog::getCreateDate)
        );
@@ -1326,6 +1456,14 @@
        if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,企业尚未具备在线签章条件,请联系平台管理员确认~");
        }
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId());
        if(Objects.isNull(insuranceApply)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询保单信息");
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息");
        }
        String fileUrl = null;
        if(Constants.equalsObject(model.getType(), Constants.ONE)){
              fileUrl = ExcelExporter.build(ApplyChange.class).exportChangeUnitExcelToPdf(model,"换厂申请表");
@@ -1349,6 +1487,8 @@
        update.setSignApplyNo(applyNo);
        applyChangeMapper.updateById(update);
        return  link;
    }