jiangping
2024-06-21 4cb17b2019008ea2df010ba022db7e93b438831f
server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -1038,13 +1038,15 @@
        }
        if (!(Constants.equalsInteger(insuranceApply.getStatus(), Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
                ||Constants.equalsInteger(insuranceApply.getStatus(), Constants.InsuranceApplyStatus.WTB_DONE.getKey())
            )
        ) {
            )) {
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "保单状态错误");
        }
        if (DateUtil.compareDate(insuranceApply.getEndTime(),new Date()) >= Constants.ZERO
        ) {
        if (DateUtil.compareDate(insuranceApply.getEndTime(),new Date()) >= Constants.ZERO ) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "保单已过保,无法进行该操作");
        }
        if (DateUtil.compareDate(applyChange.getValidTime(),insuranceApply.getStartTime()) >= Constants.ZERO) {
            //如果保单尚未生效,设置期望生效日期为保单生效开始时间
            applyChange.setValidTime(insuranceApply.getStartTime());
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
@@ -1086,30 +1088,10 @@
        applyChange.setIsdeleted(Constants.ZERO);
        //根据申请日期 处理加减保的 实际生效日期
        if(applyChange.getType().equals(Constants.ZERO)){
            if(Objects.nonNull(solutions.getAddValidDays())){
                applyChange.setApplyStartTime(
                        DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getAddValidDays())
                );
            }else{
                applyChange.setApplyStartTime(applyChange.getValidTime());
            }
            if(Objects.nonNull(solutions.getDelValidDays())){
                applyChange.setDelValidTime(
                        DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getDelValidDays())
                );
            }else{
                applyChange.setDelValidTime(applyChange.getValidTime());
            }
            //仅支持替换  保证加减保日期为同一天
            if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)){
                applyChange.setApplyStartTime(
                        applyChange.getDelValidTime()
                );
            }
            initJJBValidTime(applyChange,insuranceApply,solutions);
        }else{
            applyChange.setApplyStartTime(applyChange.getValidTime());
        }
        applyChange.setStatus(Constants.ZERO);
        applyChangeMapper.insert(applyChange);
@@ -1137,13 +1119,17 @@
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer update(ApplyChange applyChange) {
        if(applyChange.getType().equals(Constants.ZERO)){
            //2024年5月9日14:59:24  修改 默认入当前天
            applyChange.setValidTime(DateUtil.getMontageDate(new Date(),1));
        }
        if (Objects.isNull(applyChange)
                || Objects.isNull(applyChange.getId())
                || Objects.isNull(applyChange.getApplyId())
                || Objects.isNull(applyChange.getValidTime())
//                || Objects.isNull(applyChange.getValidTime())
                || Objects.isNull(applyChange.getType())
                || !(applyChange.getType().equals(Constants.ZERO) || applyChange.getType().equals(Constants.ONE))
        ) {
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
@@ -1172,6 +1158,9 @@
        if (DateUtil.compareDate(insuranceApply.getEndTime(),new Date()) >= Constants.ZERO
        ) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "保单已过保,无法进行该操作");
        }
        if (DateUtil.compareDate(applyChange.getValidTime(),insuranceApply.getStartTime()) > Constants.ZERO) {
            applyChange.setValidTime(insuranceApply.getStartTime());
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
@@ -1207,27 +1196,8 @@
        };
        if(applyChange.getType().equals(Constants.ZERO)){
            if(Objects.nonNull(solutions.getAddValidDays())){
                applyChange.setApplyStartTime(
                        DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getAddValidDays())
                );
            }else{
                applyChange.setApplyStartTime(applyChange.getValidTime());
            }
            if(Objects.nonNull(solutions.getDelValidDays())){
                applyChange.setDelValidTime(
                        DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getDelValidDays())
                );
            }else{
                applyChange.setDelValidTime(applyChange.getValidTime());
            }
            //仅支持替换  保证加减保日期为同一天
            if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)){
                applyChange.setApplyStartTime(
                        applyChange.getDelValidTime()
                );
            }
            //处理期望生效日期
            initJJBValidTime(applyChange,insuranceApply,solutions);
        }else{
            applyChange.setApplyStartTime(applyChange.getValidTime());
        }
@@ -1255,6 +1225,34 @@
        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,applyChange.getId()));
        return applyChange.getId();
    }
    private void initJJBValidTime(ApplyChange applyChange, InsuranceApply insuranceApply, Solutions solutions) {
        if( applyChange.getValidTime().getTime()>=insuranceApply.getStartTime().getTime()
                && Objects.nonNull(solutions.getAddValidDays())){
            //如果保单已生效,按照t+n的规则
            applyChange.setApplyStartTime(
                    DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getAddValidDays())
            );
        }else{
            //如果保单未生或者没有配置生效天数,设置期望生效日期为保单生效开始时间
            applyChange.setApplyStartTime(applyChange.getValidTime());
        }
        if(applyChange.getValidTime().getTime()>=insuranceApply.getStartTime().getTime()
                &&Objects.nonNull(solutions.getDelValidDays())){
            applyChange.setDelValidTime(
                    DateUtil.afterDateByType(applyChange.getValidTime(),0,solutions.getDelValidDays())
            );
        }else{
            applyChange.setDelValidTime(applyChange.getValidTime());
        }
        //仅支持替换  保证加减保日期为同一天
        if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)){
            applyChange.setApplyStartTime(
                    applyChange.getDelValidTime()
            );
        }
    }
@@ -1393,7 +1391,7 @@
                    .lambda()
                    .eq(ApplyDetail::getApplyId,applyChange.getApplyId())
                    .eq(ApplyDetail::getIdcardNo,applyChagneDetail.getIdcardNo())
                    .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getDelValidTime(),1))
//                    .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getDelValidTime(),1))
                    .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(applyChange.getDelValidTime(),3))
            )<=Constants.ZERO){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前保单下,减保人员【" + applyChagneDetail.getMemberName() + "】未查询到符合批单日期的数据");
@@ -1417,7 +1415,7 @@
            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.getDelValidTime(),1))
//                    .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getDelValidTime(),1))
                    .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(applyChange.getDelValidTime(),3))
                    .orderByDesc(ApplyDetail::getCreateDate));
            if (applyDetailList.size() > Constants.ONE) {