jiangping
2024-01-30 a9ca0823ab8f33ca85abebcf6ec4a8da235adb49
server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -12,12 +12,14 @@
import com.doumee.core.utils.Utils;
import com.doumee.core.utils.aliyun.ALiYunUtil;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dto.CountCyclePriceDTO;
import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
import com.doumee.dao.business.join.ApplyDetailJoinMapper;
import com.doumee.dao.business.join.ApplyLogJoinMapper;
import com.doumee.dao.business.join.InsuranceApplyJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.CountCyclePriceVO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.InsuranceApplyService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -606,16 +608,11 @@
        if(!loginUserInfo.getType().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户类型错误:非企业用户无法进行该操作");
        }
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
        List<ApplyDetail> applyDetailList = insuranceApply.getApplyDetailList();
        //判断是否存在重复信息
        List<Integer> memberIdList = applyDetailList.stream().map(i->i.getMemberId()).collect(Collectors.toList());
        Set<Integer> set = new HashSet<>(memberIdList);
        if(memberIdList.size() != set.size()){
        List<String> idCardList = applyDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList());
        Set<String> set = new HashSet<>(idCardList);
        if(idCardList.size() != set.size()){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"员工信息存在重复信息");
        }
        Constants.InsuranceApplyStatus insuranceApplyStatus = Constants.InsuranceApplyStatus.UPLOAD;
@@ -624,14 +621,92 @@
        insuranceApply.setIsdeleted(Constants.ZERO);
        insuranceApply.setCompanyId(loginUserInfo.getCompanyId());
        insuranceApply.setCheckInfo(insuranceApplyStatus.getName());
        insuranceApply.setStartTime(insuranceApply.getApplyStartTime());
        insuranceApply.setEndTime(insuranceApply.getApplyEndTime());
        insuranceApply.setCheckDate(new Date());
        insuranceApply.setCurrentFee(BigDecimal.ZERO);
        insuranceApply.setCheckUserId(loginUserInfo.getId());
        insuranceApply.setStatus(insuranceApplyStatus.getKey());
        insuranceApplyMapper.insert(insuranceApply);
        //处理下级数据
        this.dealApplyDetailData(insuranceApply,applyDetailList,loginUserInfo);
        InsuranceApply updBean = new InsuranceApply();
        updBean.setId(insuranceApply.getId());
        updBean.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
        insuranceApplyMapper.updateById(updBean);
        //存储日志数据
        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
        return insuranceApply.getId();
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer updateData(InsuranceApply insuranceApply) {
        if (Objects.isNull(insuranceApply)
                || Objects.isNull(insuranceApply.getId())
                || Objects.isNull(insuranceApply.getSolutionId())
                || Objects.isNull(insuranceApply.getApplyStartTime())
                || Objects.isNull(insuranceApply.getApplyEndTime())
                || !CollectionUtils.isNotEmpty(insuranceApply.getApplyDetailList())
        ) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!loginUserInfo.getType().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户类型错误:非企业用户无法进行该操作");
        }
        InsuranceApply dbInsuranceApply = insuranceApplyMapper.selectById(insuranceApply.getId());
        if(Objects.isNull(dbInsuranceApply)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到修改对象信息");
        }
        if(!(dbInsuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.PLATFORM_RETURN.getKey())
                    || dbInsuranceApply.getStatus().equals(Constants.InsuranceApplyStatus.FAIL_RETURN.getKey()))
        ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"状态错误,当前状态无法进行该操作");
        }
        List<ApplyDetail> applyDetailList = insuranceApply.getApplyDetailList();
        //判断是否存在重复信息
        List<String> idCardList = applyDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList());
        Set<String> set = new HashSet<>(idCardList);
        if(idCardList.size() != set.size()){
            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"员工信息存在重复信息");
        }
        Constants.InsuranceApplyStatus insuranceApplyStatus = Constants.InsuranceApplyStatus.UPLOAD;
        insuranceApply.setEditDate(new Date());
        insuranceApply.setEditor(loginUserInfo.getId());
        insuranceApply.setIsdeleted(Constants.ZERO);
        insuranceApply.setCompanyId(loginUserInfo.getCompanyId());
        insuranceApply.setCheckInfo(insuranceApplyStatus.getName());
        insuranceApply.setStartTime(insuranceApply.getApplyStartTime());
        insuranceApply.setEndTime(insuranceApply.getApplyEndTime());
        insuranceApply.setCheckDate(new Date());
        insuranceApply.setCurrentFee(BigDecimal.ZERO);
        insuranceApply.setCheckUserId(loginUserInfo.getId());
        insuranceApply.setStatus(insuranceApplyStatus.getKey());
        applyDetailMapper.delete(new QueryWrapper<ApplyDetail>().lambda().eq(ApplyDetail::getApplyId,insuranceApply.getId()));
        //处理下级数据
        this.dealApplyDetailData(insuranceApply,applyDetailList,loginUserInfo);
        insuranceApply.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
        insuranceApplyMapper.updateById(insuranceApply);
        //存储日志数据
        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
        return insuranceApply.getId();
    }
    public void dealApplyDetailData(InsuranceApply insuranceApply,List<ApplyDetail> applyDetailList,LoginUserInfo loginUserInfo){
        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到方案信息");
        }
        //查询保险方案下的所有派遣单位
        List<DuSolution> duSolutionList = duSolutionMapper.selectList(new QueryWrapper<DuSolution>().lambda()
                        .eq(DuSolution::getIsdeleted,Constants.ZERO)
                        .eq(DuSolution::getStatus,Constants.ONE)
                .eq(DuSolution::getIsdeleted,Constants.ZERO)
                .eq(DuSolution::getStatus,Constants.ONE)
                .eq(DuSolution::getSolutionId,insuranceApply.getSolutionId()));
        if(!CollectionUtils.isNotEmpty(duSolutionList)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"数据异常:保险方案下未查询到派遣单位");
@@ -645,11 +720,13 @@
        if(!CollectionUtils.isNotEmpty(duWorktypeList)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"数据异常:保险方案下未查询到工种信息");
        }
        if(CollectionUtils.isNotEmpty(applyDetailList)){
            for (int i = 0; i < applyDetailList.size(); i++) {
                ApplyDetail applyDetail = applyDetailList.get(i);
                if(Objects.isNull(applyDetail)
                        ||Objects.isNull(applyDetail.getMemberId())
                        ||StringUtils.isBlank(applyDetail.getIdcardNo())
                        ||StringUtils.isBlank(applyDetail.getMemberName())
                        ||Objects.isNull(applyDetail.getDuId())
                        ||Objects.isNull(applyDetail.getWorktypeId())
                ){
@@ -658,15 +735,49 @@
                applyDetail.setCreateDate(new Date());
                applyDetail.setCreator(loginUserInfo.getId());
                applyDetail.setIsdeleted(Constants.ZERO);
                applyDetail.setStartTime(insuranceApply.getApplyStartTime());
                applyDetail.setEndTime(insuranceApply.getApplyEndTime());
                applyDetail.setSortnum(i);
                applyDetail.setApplyId(insuranceApply.getId());
                Member member = new Member();
                if(Objects.isNull(applyDetail.getMemberId())){
                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"【"+applyDetail.getMemberName()+"】员工信息存在异常数据!");
                    //查询是否存在该用户
                    member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                            .eq(Member::getCompanyId,insuranceApply.getCompanyId())
                            .eq(Member::getIsdeleted,Constants.ZERO)
                            .eq(Member::getIdcardNo,applyDetail.getIdcardNo())
                            .last(" limit 1")
                    );
                    if(Objects.isNull(member)){
                        member = new Member();
                        member.setCreateDate(new Date());
                        member.setCreator(loginUserInfo.getId());
                        member.setIsdeleted(Constants.ZERO);
                        member.setName(applyDetail.getMemberName());
                        member.setCompanyId(insuranceApply.getCompanyId());
                        member.setSex(Constants.getSexByIdCard(applyDetail.getIdcardNo()));
                        member.setIdcardNo(applyDetail.getIdcardNo());
                        member.setApplyId(insuranceApply.getId());
                        member.setDuId(applyDetail.getDuId());
                        member.setWorktypeId(applyDetail.getWorktypeId());
                        memberMapper.insert(member);
                    }else{
                        member.setApplyId(insuranceApply.getId());
                        member.setDuId(applyDetail.getDuId());
                        member.setWorktypeId(applyDetail.getWorktypeId());
                        memberMapper.updateById(member);
                    }
                }else{
                    member = memberMapper.selectById(applyDetail.getMemberId());
                    if(Objects.isNull(member)){
                        throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"【"+applyDetail.getMemberName()+"】员工信息存在异常数据!");
                    }
                    member.setApplyId(insuranceApply.getId());
                    member.setDuId(applyDetail.getDuId());
                    member.setWorktypeId(applyDetail.getWorktypeId());
                    memberMapper.updateById(member);
                }
                Member member = memberMapper.selectById(applyDetail.getMemberId());
                if(Objects.isNull(member)){
                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"【"+applyDetail.getMemberName()+"】员工信息存在异常数据!");
                }
                applyDetail.setMemberId(member.getId());
                applyDetail.setIdcardNo(member.getIdcardNo());
                applyDetail.setSex(member.getSex());
                applyDetail.setFee(Constants.countDetailFee(solutions,insuranceApply.getApplyEndTime(),insuranceApply.getApplyStartTime()));
@@ -674,18 +785,15 @@
                if(duSolutionList.stream().filter(d->d.getDispatchUnitId().equals(applyDetail.getDuId())).collect(Collectors.toList()).size()<=Constants.ZERO){
                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"【"+applyDetail.getMemberName()+"】员工派遣单位未查询到!");
                }
                if(duWorktypeList.stream().filter(d->d.getDuSolutionId().equals(applyDetail.getDuId())&&d.getWorkTypeId().equals(applyDetail.getWorktypeId()))
                if(duWorktypeList.stream().filter(d->d.getWorkTypeId().equals(applyDetail.getWorktypeId()))
                        .collect(Collectors.toList()).size()<=Constants.ZERO){
                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"【"+applyDetail.getMemberName()+"】员工工种信息未查询到!");
                }
            }
            applyDetailJoinMapper.insertBatchSomeColumn(applyDetailList);
        }
        //存储日志数据
        this.saveApplyLog(insuranceApply,insuranceApplyStatus,null);
        return insuranceApply.getId();
    }
    public void saveApplyLog(InsuranceApply insuranceApply,Constants.InsuranceApplyStatus insuranceApplyStatus,String content){
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
@@ -834,13 +942,18 @@
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.eq(InsuranceApply::getStatus, pageWrap.getModel().getStatus());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
        if(CollectionUtils.isNotEmpty(pageWrap.getSorts())){
            for(PageWrap.SortData sortData: pageWrap.getSorts()) {
                if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                    queryWrapper.orderByDesc(sortData.getProperty());
                } else {
                    queryWrapper.orderByAsc(sortData.getProperty());
                }
            }
        }else{
            queryWrapper.orderByDesc(InsuranceApply::getCreateDate);
        }
        PageData<InsuranceApply> pageData = PageData.from(insuranceApplyJoinMapper.selectJoinPage(page,InsuranceApply.class, queryWrapper));
        if(pageData.getRecords()!=null){
            for (InsuranceApply apply : pageData.getRecords()){
@@ -952,10 +1065,10 @@
        List<ApplyLog> applyLogList = applyLogJoinMapper.selectJoinList(ApplyLog.class,
                new MPJLambdaWrapper<ApplyLog>()
                        .selectAll(ApplyLog.class)
                        .selectAs(Member::getName,ApplyLog::getCreatorName)
                        .selectAs(SystemUser::getRealname,ApplyLog::getCreatorName)
                        .selectAs(Company::getName,ApplyLog::getCompanyName)
                        .leftJoin(Member.class,Member::getId,ApplyLog::getCreator)
                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                        .leftJoin(SystemUser.class,SystemUser::getId,ApplyLog::getCreator)
                        .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                        .eq(ApplyLog::getApplyId,insuranceApply.getId())
                        .orderByAsc(ApplyLog::getCreateDate)
        );
@@ -1003,6 +1116,18 @@
                }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.BD_DONE_PDF.getKey())){
                    //最終保险单
                    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()));
                    }
                }
            }
        }
@@ -1134,15 +1259,37 @@
            }
        }
    }
    @Override
    public CountCyclePriceVO getCountCyclePriceVO(CountCyclePriceDTO countCyclePriceDTO){
        if(Objects.isNull(countCyclePriceDTO)
            || Objects.isNull(countCyclePriceDTO.getSolutionsId())
            || Objects.isNull(countCyclePriceDTO.getStartDate())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Solutions solutions = solutionsMapper.selectById(countCyclePriceDTO.getSolutionsId());
        if(Objects.isNull(solutions)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询方案信息");
        }
        CountCyclePriceVO countCyclePriceVO = new CountCyclePriceVO();
        if(solutions.getInsureCycleUnit().equals(Constants.ZERO)){
            countCyclePriceVO.setEndDate(DateUtil.afterDateByType(countCyclePriceDTO.getStartDate(),0,solutions.getInsureCycle()));
        }else if(solutions.getInsureCycleUnit().equals(Constants.TWO)){
            Integer monthDays = DateUtil.monthDays(countCyclePriceDTO.getStartDate());
            Date afterDate = DateUtil.afterDateByType(countCyclePriceDTO.getStartDate(),0,monthDays);
            countCyclePriceVO.setEndDate(DateUtil.afterDateByType(afterDate,0,-1));
        }else if(solutions.getInsureCycleUnit().equals(Constants.THREE)){
            Date afterDate = DateUtil.afterDateByType(countCyclePriceDTO.getStartDate(),2,solutions.getInsureCycle());
            countCyclePriceVO.setEndDate(DateUtil.afterDateByType(afterDate,0,-1));
        }
        countCyclePriceVO.setCyclePrice(Constants.countDetailFee(solutions,countCyclePriceVO.getEndDate(),countCyclePriceDTO.getStartDate()));
        return countCyclePriceVO;
    }
}