MrShi
2024-02-22 e622bd5e3b2638b9ab9a712ed1160a66018d6fd7
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -82,6 +82,9 @@
    private MemberInsuranceJoinMapper memberInsuranceJoinMapper;
    @Autowired
    private ApplyChangeDetailJoinMapper applyChangeDetailJoinMapper;
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
@@ -164,6 +167,11 @@
            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该申请状态已流转,当前不支持该操作~");
        }
        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId());
        if(Objects.isNull(insuranceApply)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到保单信息");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        ApplyChange update = new ApplyChange();
        update.setEditDate(new Date());
@@ -175,8 +183,8 @@
        update.setCheckUserId(user.getId());
        update.setId(model.getId());
        update.setValidCode(param.getValidCode());
        update.setApplyStartTime(model.getApplyStartTime());
        applyChangeMapper.updateById(update);
        update.setApplyStartTime(param.getApplyStartTime());
        update.setCode(model.getCode());
        param.getPidanFile().setIsdeleted(Constants.ZERO);
        param.getPidanFile().setCreator(user.getId());
@@ -187,6 +195,8 @@
        multifileMapper.insert(param.getPidanFile());
        update.setApplyId(model.getApplyId());
        if(Constants.equalsInteger(model.getType(),Constants.ZERO)){
            //如果是加减保申请 处理加减保明细数据
            dealDetailsValidTime(update);
@@ -194,6 +204,8 @@
            //如果是换厂申请 处理明细数据
            dealDetailsDUdata(update);
        }
        applyChangeMapper.updateById(update);
//        if(1==1){
//            throw new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -278,76 +290,123 @@
                        .selectAll(ApplyChagneDetail.class)
                        .selectAs(Solutions::getTimeUnit,ApplyChagneDetail::getSolutionTimeUnit)
                        .selectAs(Solutions::getPrice,ApplyChagneDetail::getSolutionPrice)
                        .selectAs(Solutions::getName,ApplyChagneDetail::getSolutionsName)
                        .selectAs(Worktype::getName,ApplyChagneDetail::getWorkTypeName)
                        .selectAs(DispatchUnit::getName,ApplyChagneDetail::getDuName)
                  .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)
                        .selectAs(Member::getIdcardNo,ApplyChagneDetail::getIdcardNo)
                        .selectAs(Member::getName, ApplyChagneDetail::getMemberName)
                        .selectAs(InsuranceApply::getCode,ApplyChagneDetail::getApplyCode)
                        .leftJoin(Member.class, Member::getId, ApplyChagneDetail::getMemberId)
                        .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                      .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyChange::getApplyId)
                      .leftJoin(Solutions.class, Solutions::getId, InsuranceApply::getSolutionId)
                    .leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getWorktypeId)
                    .leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getDuId)
                  .eq(ApplyChagneDetail::getApplyChangeId,update.getId())
                  .eq(ApplyChagneDetail::getIsdeleted,Constants.ZERO) );
        if(detailList ==null || detailList.size()==0){
            return;
        }
        //实际批单生效日期
        Date applyStartTime = DateUtil.getMontageDate(update.getApplyStartTime(),1);
        for(ApplyChagneDetail detail : detailList){
            //查询减保人员是否存在 冲突的 保单明细数据
            if(applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>()
                    .lambda()
                    .eq(ApplyDetail::getApplyId,update.getApplyId())
                    .eq(ApplyDetail::getIdcardNo,detail.getIdcardNo())
                    .le(ApplyDetail::getStartTime,applyStartTime)
                    .ge(ApplyDetail::getEndTime,applyStartTime)
            )<=Constants.ZERO){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,换厂人员【" + detail.getMemberName() + "】未查询到符合批单日期的数据");
            }
            //查询员工是在主单下 是否存在生效中的数据
            ApplyDetail oldModel = applyDetailJoinMapper.selectOne(new QueryWrapper<ApplyDetail>().lambda()
                    .eq(ApplyDetail::getApplyId, update.getApplyId())
                    .eq(ApplyDetail::getMemberId, detail.getMemberId())
                    .le(ApplyDetail::getStartTime,applyStartTime)
                    .ge(ApplyDetail::getEndTime,applyStartTime)
                    .orderByDesc(ApplyDetail::getCreateDate)
                    .last("limit 1"));
            if(oldModel == null  ){
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,用户【"+detail.getMemberName()+"】原保单信息有误,当前申请不支持减保处理!");
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,用户【"+detail.getMemberName()+"】原保单信息有误,批单日期未在保单日期内!");
            }
            Date endDate = oldModel.getEndTime();
            //当前日期大于批单日期 需要回滚数据实际数据
            Boolean flag = DateUtil.getMontageDate(new Date(),2).compareTo(DateUtil.getMontageDate(update.getStartTime(),2))>0;
            //换厂后历史记录的费用 fee
            Integer days = DateUtil.daysBetweenDates(DateUtil.getMontageDate(update.getStartTime(),2),DateUtil.getMontageDate(oldModel.getStartTime(),1)) + 1;
            BigDecimal oldFee = this.getApplyPrice(update.getApplyId(),days);
            BigDecimal fee = oldModel.getFee();
            BigDecimal oldCurrentFee = oldModel.getCurrentFee();
            applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda()
                    .set(ApplyDetail::getEditor,update.getEditor())
                    .set(ApplyDetail::getEditDate,update.getEditDate())
                    .set(ApplyDetail::getEndTime,DateUtil.getMontageDate(update.getStartTime(),2))
                    .set(ApplyDetail::getFee,oldFee)
                    .set(flag,ApplyDetail::getCurrentFee,oldFee)
                    .eq(ApplyDetail::getId,oldModel.getApplyId())
            );
            //修改 员工投保明细记录 历史数据
            memberInsuranceJoinMapper.update(null,new UpdateWrapper<MemberInsurance>().lambda()
                    .set(MemberInsurance::getEndTime,update.getApplyStartTime())
                            .set(MemberInsurance::getFee,oldFee)
                    .eq(MemberInsurance::getRelationId,oldModel.getId())
            );
            //如果实际批单日期 和 原记录日期相等 则直接修改记录派遣单位与工种信息
            if(applyStartTime.compareTo(oldModel.getStartTime())!=Constants.ZERO){
                //当前日期大于批单日期 需要回滚数据实际数据
                Boolean flag = DateUtil.getMontageDate(new Date(),2).compareTo(DateUtil.getMontageDate(update.getApplyStartTime(),2))>0;
                //换厂后历史记录的费用 fee
                Integer days = DateUtil.daysBetweenDates(DateUtil.getMontageDate(update.getApplyStartTime(),3),DateUtil.getMontageDate(oldModel.getStartTime(),1))+1;
                BigDecimal oldFee = this.getApplyPrice(update.getApplyId(),days);
                BigDecimal fee = oldModel.getFee();
                BigDecimal oldCurrentFee = oldModel.getCurrentFee();
            ApplyDetail applyDetail = new ApplyDetail();
            applyDetail.setApplyId(oldModel.getApplyId());
            applyDetail.setCreateDate(new Date());
            applyDetail.setCreator(update.getEditor());
            applyDetail.setMemberId(oldModel.getMemberId());
            applyDetail.setStartTime(DateUtil.getMontageDate(update.getApplyStartTime(),1));
            applyDetail.setEndTime(endDate);
            applyDetail.setDuId(detail.getDuId());
            applyDetail.setWorktypeId(detail.getWorktypeId());
            applyDetail.setIdcardNo(oldModel.getIdcardNo());
            applyDetail.setFee(fee.subtract(oldFee));
            if(flag){
                applyDetail.setCurrentFee(oldCurrentFee.multiply(oldFee));
                applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda()
                        .set(ApplyDetail::getEditor,update.getEditor())
                        .set(ApplyDetail::getEditDate,update.getEditDate())
                        .set(ApplyDetail::getEndTime,DateUtil.getMontageDate(update.getApplyStartTime(),3))
                        .set(ApplyDetail::getFee,oldFee)
                        .set(flag,ApplyDetail::getCurrentFee,oldFee)
                        .eq(ApplyDetail::getId,oldModel.getId())
                );
                //修改 员工投保明细记录 历史数据
                memberInsuranceJoinMapper.update(null,new UpdateWrapper<MemberInsurance>().lambda()
                        .set(MemberInsurance::getEndTime,update.getApplyStartTime())
                        .set(MemberInsurance::getFee,oldFee)
                        .eq(MemberInsurance::getRelationId,oldModel.getId())
                );
                ApplyDetail applyDetail = new ApplyDetail();
                applyDetail.setApplyId(oldModel.getApplyId());
                applyDetail.setCreateDate(new Date());
                applyDetail.setCreator(update.getEditor());
                applyDetail.setMemberId(oldModel.getMemberId());
                applyDetail.setIdcardNo(detail.getIdcardNo());
                applyDetail.setSex(Constants.getSexByIdCard(detail.getIdcardNo()));
                applyDetail.setMemberName(detail.getMemberName());
                applyDetail.setStartTime(DateUtil.getMontageDate(update.getApplyStartTime(),1));
                applyDetail.setEndTime(endDate);
                applyDetail.setDuId(detail.getDuId());
                applyDetail.setWorktypeId(detail.getWorktypeId());
                applyDetail.setIdcardNo(oldModel.getIdcardNo());
                applyDetail.setFee(fee.subtract(oldFee));
                applyDetail.setIsdeleted(Constants.ZERO);
                if(flag){
                    applyDetail.setCurrentFee(oldCurrentFee.multiply(oldFee));
                }else{
                    applyDetail.setCurrentFee(BigDecimal.ZERO);
                }
                applyDetail.setSex(oldModel.getSex());
                applyDetail.setMemberName(oldModel.getMemberName());
                applyDetail.setFromId(detail.getId());
                applyDetailJoinMapper.insert(applyDetail);
                MemberInsurance memberInsurance = new MemberInsurance(applyDetail,update.getId());
                memberInsuranceJoinMapper.insert(memberInsurance);
            }else{
                applyDetail.setCurrentFee(BigDecimal.ZERO);
            }
            applyDetail.setSex(oldModel.getSex());
            applyDetail.setMemberName(oldModel.getMemberName());
            applyDetail.setFromId(detail.getId());
            applyDetailJoinMapper.insert(applyDetail);
            MemberInsurance memberInsurance = new MemberInsurance(applyDetail,update.getId());
            memberInsuranceJoinMapper.insert(memberInsurance);
                applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda()
                        .set(ApplyDetail::getEditor,update.getEditor())
                        .set(ApplyDetail::getEditDate,update.getEditDate())
                        .set(ApplyDetail::getDuId,detail.getDuId())
                        .set(ApplyDetail::getWorktypeId,detail.getWorktypeId())
                        .eq(ApplyDetail::getId,oldModel.getId())
                );
                //员工投保明细记录 历史数据
                memberInsuranceJoinMapper.update(null,new UpdateWrapper<MemberInsurance>().lambda()
                        .set(MemberInsurance::getDuId,detail.getDuId())
                        .set(MemberInsurance::getDuName,detail.getDuName())
                        .set(MemberInsurance::getWorktypeId,detail.getWorktypeId())
                        .set(MemberInsurance::getWorktypeName,detail.getWorkTypeName())
                        .eq(MemberInsurance::getRelationId,oldModel.getId())
                );
            }
            Member member = memberMapper.selectById(detail.getMemberId());
            if(Objects.isNull(member)){
@@ -359,6 +418,11 @@
            member.setStartTime(detail.getStartTime());
            member.setEndTime(detail.getEndTime());
            memberMapper.updateById(member);
            applyChangeDetailJoinMapper.update(null,new UpdateWrapper<ApplyChagneDetail>().lambda()
                    .set(ApplyChagneDetail::getStartTime,DateUtil.getMontageDate(update.getApplyStartTime(), 1))
                    .eq(ApplyChagneDetail::getId,detail.getId())
            );
        }
    }
    /**
@@ -369,11 +433,16 @@
        List<ApplyChagneDetail> detailList = applyChagneDetailJoinMapper.selectJoinList(ApplyChagneDetail.class,
                new MPJLambdaWrapper<ApplyChagneDetail>()
                        .selectAll(ApplyChagneDetail.class)
                        .selectAs(Member::getIdcardNo,ApplyChagneDetail::getIdcardNo)
                        .selectAs(Solutions::getTimeUnit, ApplyChagneDetail::getSolutionTimeUnit)
                        .selectAs(Solutions::getPrice, ApplyChagneDetail::getSolutionPrice)
                        .selectAs(Worktype::getName, ApplyChagneDetail::getWorkTypeName)
                        .selectAs(DispatchUnit::getName, ApplyChagneDetail::getDuName)
                        .selectAs(Member::getName, ApplyChagneDetail::getMemberName)
                        .selectAs(Solutions::getName,ApplyChagneDetail::getSolutionsName)
                        .selectAs(InsuranceApply::getCode,ApplyChagneDetail::getApplyCode)
                        .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
                        .leftJoin(Member.class, Member::getId, ApplyChagneDetail::getMemberId)
                        .leftJoin(InsuranceApply.class, InsuranceApply::getId, ApplyChange::getApplyId)
                        .leftJoin(Solutions.class, Solutions::getId, InsuranceApply::getSolutionId)
                        .leftJoin(Worktype.class, Worktype::getId, ApplyChagneDetail::getWorktypeId)
@@ -390,7 +459,6 @@
        //投保记录 加保数据加入新数据  减保数据 修改老数据
        List<MemberInsurance> memberInsuranceList = new ArrayList<>();
        //加保业务 使用的加保金额
        ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO_add = new ApplyChangeCyclePriceDTO();
        applyChangeCyclePriceDTO_add.setApplyId(update.getApplyId());
@@ -406,6 +474,19 @@
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到员工数据");
            }
            if (Constants.equalsInteger(detail.getType(), Constants.ZERO)) {
                //查询加保人员是否存在 冲突的 保单明细数据
                if(applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>()
                        .lambda()
                        .eq(ApplyDetail::getApplyId,update.getApplyId())
                        .eq(ApplyDetail::getIdcardNo,detail.getIdcardNo())
                        .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(update.getApplyStartTime(),1))
                        .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(update.getApplyStartTime(),3))
                )>Constants.ZERO){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,加保人员【" + detail.getMemberName() + "】存在日期冲突的数据");
                }
                //加保
                ApplyDetail add = new ApplyDetail();
                add.setApplyId(update.getApplyId());
@@ -417,14 +498,18 @@
                add.setMemberId(detail.getMemberId());
                add.setMemberName(detail.getMemberName());
                add.setWorktypeId(detail.getWorktypeId());
                add.setIsdeleted(Constants.ZERO);
                add.setIdcardNo(detail.getIdcardNo());
                add.setSex(Constants.getSexByIdCard(detail.getIdcardNo()));
                add.setMemberName(detail.getMemberName());
                add.setDuId(detail.getDuId());
                add.setStartTime(update.getApplyStartTime());
                add.setEndTime(detail.getEndTime());
                add.setStartTime(DateUtil.getMontageDate(update.getApplyStartTime(), 1));
                add.setEndTime(DateUtil.getMontageDate(detail.getEndTime(), 2));
                add.setFee(countCyclePriceVO_add.getCyclePrice());
                if (DateUtil.daysBetweenDates(DateUtil.getMontageDate(detail.getStartTime(), 2), new Date()) >= 0) {
                if(new Date().compareTo(DateUtil.getMontageDate(detail.getStartTime(), 2))>=0){
                    Integer days = DateUtil.daysBetweenDates(DateUtil.getMontageDate(new Date(), 2), detail.getStartTime()) + 1;
                    //如果已产生费用,计算已产生费用
                    add.setCurrentFee(this.getApplyPrice(update.getApplyId(), days));
@@ -437,6 +522,13 @@
                MemberInsurance memberInsurance = new MemberInsurance(detail, update, update.getEditor(), add.getId());
                memberInsuranceList.add(memberInsurance);
                applyChangeDetailJoinMapper.update(null,new UpdateWrapper<ApplyChagneDetail>().lambda()
                        .set(ApplyChagneDetail::getFee,add.getFee())
                        .set(ApplyChagneDetail::getStartTime,DateUtil.getMontageDate(update.getApplyStartTime(), 1))
                        .eq(ApplyChagneDetail::getId,detail.getId())
                );
            } else {
                    //减保操作
                    //查询员工是在主单下 是否存在生效中的数据
@@ -480,6 +572,14 @@
                            .set(MemberInsurance::getEndTime, update.getApplyStartTime())
                            .eq(MemberInsurance::getRelationId, oldModel.getId())
                    );
                    //修改业务明细行数据实际批单日期
                    applyChangeDetailJoinMapper.update(null,new UpdateWrapper<ApplyChagneDetail>().lambda()
                            .set(ApplyChagneDetail::getFee,updateFee)
                            .set(ApplyChagneDetail::getEndTime,DateUtil.getMontageDate(update.getApplyStartTime(), 3))
                            .eq(ApplyChagneDetail::getId,detail.getId())
                    );
            }
            member.setApplyId(update.getApplyId());
@@ -502,6 +602,9 @@
                    .set(InsuranceApply::getEditDate, update.getEditDate())
                    .eq(InsuranceApply::getId, update.getApplyId())
            );
            update.setFee(totalFee);
        }
    }
@@ -620,7 +723,7 @@
        }
        CompanySolution companySolution = companySolutionMapper.selectOne(new QueryWrapper<CompanySolution>().lambda()
                .eq(CompanySolution::getCompanyId,loginUserInfo.getCompanyId())
                .eq(CompanySolution::getSolutionBaseId,solutions.getId())
                .eq(CompanySolution::getSolutionId,solutions.getId())
                .eq(CompanySolution::getIsdeleted,Constants.ZERO)
                .last(" limit 1 ")
        );
@@ -632,6 +735,16 @@
                && DateUtil.compareDate( applyChange.getValidTime(),insuranceApply.getEndTime()) >= Constants.ZERO)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "申请日期未处于保单日期内,无法进行该操作");
        }
        //查询保单下是否存在进行中的加减保/换厂单据
        if(applyChangeMapper.selectCount(new QueryWrapper<ApplyChange>().lambda()
                .eq(ApplyChange::getApplyId,insuranceApply.getId())
                .notIn(ApplyChange::getStatus,Constants.ApplyChangeStatus.APPROVE.getKey(),Constants.ApplyChangeStatus.CLOSE.getKey())
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "存在进行中的加减保/换厂申请");
        };
        applyChange.setCreateDate(new Date());
        applyChange.setCreator(loginUserInfo.getId());
        applyChange.setEditor(loginUserInfo.getId());
@@ -647,12 +760,6 @@
        applyChangeFee.setId(applyChange.getId());
        applyChangeFee.setFee(fee);
        applyChangeMapper.updateById(applyChangeFee);
//        if(1==1){
//            throw new BusinessException(ResponseStatus.DATA_EMPTY);
//        }
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_COMPANY_COMMIT;
        String info =applyLogType.getInfo();
@@ -722,7 +829,14 @@
                && DateUtil.compareDate( applyChange.getValidTime(),insuranceApply.getEndTime()) >= Constants.ZERO)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "申请日期未处于保单日期内,无法进行该操作");
        }
        //查询保单下是否存在进行中的加减保/换厂单据
        if(applyChangeMapper.selectCount(new QueryWrapper<ApplyChange>().lambda()
                .eq(ApplyChange::getApplyId,insuranceApply.getId())
                .ne(ApplyChange::getId,applyChange.getId())
                .notIn(ApplyChange::getStatus,Constants.ApplyChangeStatus.APPROVE.getKey(),Constants.ApplyChangeStatus.CLOSE.getKey())
        )>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "存在进行中的加减保/换厂申请");
        };
        applyChange.setEditDate(new Date());
        applyChange.setEditor(loginUserInfo.getId());
        applyChange.setApplyStartTime(applyChange.getValidTime());
@@ -733,7 +847,6 @@
        BigDecimal fee = this.dealApplyChangeData(applyChange,insuranceApply,companySolution,solutions,loginUserInfo,BigDecimal.ZERO);
        applyChange.setFee(fee);
        applyChangeMapper.updateById(applyChange);
        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_UPLOAD_AGAIN;
        String info =applyLogType.getInfo();
@@ -844,6 +957,18 @@
            if (Objects.isNull(applyChagneDetail.getMemberId())) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】必填项缺失");
            }
            //查询减保人员是否存在 冲突的 保单明细数据
            if(applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>()
                    .lambda()
                    .eq(ApplyDetail::getApplyId,applyChange.getApplyId())
                    .eq(ApplyDetail::getIdcardNo,applyChagneDetail.getIdcardNo())
                    .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))
                    .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),3))
            )<=Constants.ZERO){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,减保人员【" + applyChagneDetail.getMemberName() + "】未查询到符合批单日期的数据");
            }
            Member member = memberMapper.selectById(applyChagneDetail.getMemberId());
            if (Objects.isNull(member)) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】未查询到系统人员信息");
@@ -862,6 +987,8 @@
            List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda()
                    .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                    .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
                    .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))
                    .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),3))
                    .orderByDesc(ApplyDetail::getCreateDate));
            if (applyDetailList.size() > Constants.ONE) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "减保人员【" + applyChagneDetail.getMemberName() + "】保单信息异常,存在多条数据");
@@ -901,13 +1028,25 @@
     * @param duSolutionList
     * @param loginUserInfo
     */
    public void addChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList,List<DuWorktype> duWorktypeList,List<DuSolution> duSolutionList,InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee){
    public void addChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList,
                                List<DuWorktype> duWorktypeList,List<DuSolution> duSolutionList,
                                InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee){
        for (ApplyChagneDetail applyChagneDetail : addDetailList) {
            if (    Objects.isNull(applyChagneDetail.getDuId())
                    || Objects.isNull(applyChagneDetail.getWorktypeId())
                    || StringUtils.isBlank(applyChagneDetail.getIdcardNo())
            ) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "加保人员【" + applyChagneDetail.getMemberName() + "】必填项缺失");
            }
            //查询加保人员是否存在 冲突的 保单明细数据
            if(applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>()
                    .lambda()
                    .eq(ApplyDetail::getApplyId,applyChange.getApplyId())
                    .eq(ApplyDetail::getIdcardNo,applyChagneDetail.getIdcardNo())
                    .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))
                    .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),3))
            )>Constants.ZERO){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,加保人员【" + applyChagneDetail.getMemberName() + "】存在日期冲突的数据");
            }
            applyChagneDetail.setCreateDate(new Date());
@@ -1026,6 +1165,18 @@
            ) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】必填项缺失");
            }
            //查询换厂人员是否存在  有效的保单明细数据
            if(applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>()
                    .lambda()
                    .eq(ApplyDetail::getApplyId,applyChange.getApplyId())
                    .eq(ApplyDetail::getIdcardNo,applyChagneDetail.getIdcardNo())
                    .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))
                    .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))
            )<=Constants.ZERO){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,换厂人员【" + applyChagneDetail.getMemberName() + "】未查询到符合批单日期的数据");
            }
            Member member = memberMapper.selectById(applyChagneDetail.getMemberId());
            if (Objects.isNull(member)) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】未查询到系统人员信息");
@@ -1035,6 +1186,7 @@
                    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() + "】存在申请中的加减保/换厂单据");
@@ -1043,7 +1195,8 @@
            List<ApplyDetail>  applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda()
                    .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                    .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
                    .ge(ApplyDetail::getEndTime, new Date()));
                    .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))
                    .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1)));
            if(applyDetailList.size()>Constants.ONE){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】保单信息异常,存在多条数据");
            }else if(applyDetailList.size()==Constants.ZERO){
@@ -1060,6 +1213,10 @@
            if (duWorktypeList.stream().filter(d ->  d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
                    .collect(Collectors.toList()).size() <= Constants.ZERO) {
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】员工工种信息未查询到!");
            }
            if(applyChagneDetail.getOldDuId().equals(applyChagneDetail.getDuId())
            && applyChagneDetail.getOldWorktypeId().equals(applyChagneDetail.getWorktypeId())){
                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "换厂人员【" + applyChagneDetail.getMemberName() + "】换厂数据相同!");
            }
            applyChagneDetail.setCreateDate(new Date());
            applyChagneDetail.setCreator(loginUserInfo.getId());
@@ -1201,6 +1358,7 @@
                        Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())
//                .eq(!Objects.isNull(model.getCompanyId()),InsuranceApply::getCompanyId,model.getCompanyId())
//                .eq(!Objects.isNull(model.getSolutionsId()),ApplyChange::getSolutionsId,model.getSolutionsId())
                .eq(!Objects.isNull(model.getApplyId()),ApplyChange::getApplyId,model.getApplyId())
                .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" );
@@ -1216,13 +1374,16 @@
            }
            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());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        queryWrapper.orderByDesc(ApplyDetail::getCreateDate);
//        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
//            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
//                queryWrapper.orderByDesc(sortData.getProperty());
//            } else {
//                queryWrapper.orderByAsc(sortData.getProperty());
//            }
//        }
        PageData<ApplyChange> pageData = PageData.from(applyChangeJoinMapper.selectJoinPage(page,ApplyChange.class, queryWrapper));
        return pageData;
    }
@@ -1280,7 +1441,7 @@
            //删除其他待办
            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);
                    insuranceApply.getCompanyId(), Constants.NoticeType.THREE);
            noticesMapper.insert(notices);
@@ -1334,7 +1495,9 @@
        applyChangeMapper.updateById(applyChange);
        String info = applyLogType.getInfo();
        info = info.replace("${param}", applyChangeOptDTO.getOptIllustration());
        if(StringUtils.isNotBlank(applyChangeOptDTO.getOptIllustration())){
            info = info.replace("${param}", applyChangeOptDTO.getOptIllustration());
        }
        ApplyLog log = new ApplyLog(applyChange,applyLogType.getName(),info,applyChange.getId(),applyLogType.getKey(), null, null);
        applyLogMapper.insert(log);
    }
@@ -1531,7 +1694,7 @@
                .selectAs(InsuranceApply::getCompanyId,ApplyChange::getCompanyId)
                .selectAs(InsuranceApply::getCode,ApplyChange::getApplyCode)
                .selectAs(InsuranceApply::getStartTime,ApplyChange::getStartTime)
                .selectAs(InsuranceApply::getStartTime,ApplyChange::getEndTime)
                .selectAs(InsuranceApply::getEndTime,ApplyChange::getEndTime)
                .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)