美文网首页多线程学习
springboot aop+观察者模式的应用

springboot aop+观察者模式的应用

作者: 物空飞雨 | 来源:发表于2018-12-26 15:36 被阅读0次

    1.前言

             在现有的业务逻辑上增加,简历手动上传和插件上传的控制:

    @Component

    @Aspect

    public class ResumeControAspectextends Observable {

    private final static Loggerlogger = LoggerFactory.getLogger(ResumeControAspect.class);

    //增加观察者

        public ResumeControAspect(InResumeFlowObserver inResumeFlow, AlreadyEntryResumeObserver alreadyEntryResume, TalentResumeFlowObserver talentResumeFlow, ResumeOutObserver resumeOutObserver) {

    this.addObserver(inResumeFlow);//流程中

            this.addObserver(alreadyEntryResume);//已入职处理

            this.addObserver(talentResumeFlow);//事业部人才库

            this.addObserver(resumeOutObserver);

        }

    private ResumeOutVoresumeOutVo;

        public void setResumeId(ResumeOutVo resumeOutVo) {

    //增加入参 

    this.resumeOutVo = resumeOutVo;

    //被观察的东西发生改变,

            setChanged();

    //唤醒观察者

            notifyObservers(resumeOutVo);

        }

    @Autowired

        private ResumeServiceresumeService;

        @Before("excuteService()")

    public void doBeforeMethod(JoinPoint joinPoint) {

    Object[] obj = joinPoint.getArgs();

            BaseResumeEntity baseResumeEntity =null;

            SysLoginUserDTO sysLoginUserDTO =null;

            ResumeAccessVo  resumeAccessVo =null;

            for (Object argItem : obj) {

    if (argIteminstanceof BaseResumeEntity) {

    baseResumeEntity = (BaseResumeEntity) argItem;

                }

    if (argIteminstanceof ResumeAccessVo) {

    resumeAccessVo = (ResumeAccessVo) argItem;

                }

    if (argIteminstanceof SysLoginUserDTO) {

    sysLoginUserDTO = (SysLoginUserDTO) argItem;

                }

    }

    if (sysLoginUserDTO.getBussDeptId()==null){

    throw  new CustomException("登录用户事业部信息异常");

            }

    /***********************************************简历上传****************************************************************************/

            //判断是不是在该事业部人才库中 phone +buss_dept_id

            if (baseResumeEntity !=null && sysLoginUserDTO !=null) {

    List bussIds =  sysLoginUserDTO.getAccessibleDeptIds();

                //根据部门ID和手机号判断是否已存在

                List resumeOutVos =resumeService.selectIdByPhone(baseResumeEntity.getPhone(), bussIds);

                if (resumeOutVos!=null && resumeOutVos.size()>0){

    List collect = resumeOutVos.stream().filter(t -> t.getState().equals(StateEnum.FLOW.getCode())).collect(Collectors.toList());

                    if (collect.size()>0){

    collect.get(0).setOperUserId(sysLoginUserDTO.getId());

                        collect.get(0).setBaseResumeEntity(baseResumeEntity);

                        for (Object argItem : obj) {

    if (argIteminstanceof BaseResumeEntity) {

    baseResumeEntity = (BaseResumeEntity) argItem;

                                //在流程中的简历需要继续往下走 其他的直接返回

                                baseResumeEntity.setIsContinue(!StateEnum.FLOW.getCode().equals(collect.get(0).getState())?false:true);

                            }

    }

    //唤醒观察者

                        setResumeId(collect.get(0));

                    }else{

    resumeOutVos.get(0).setOperUserId(sysLoginUserDTO.getId());

                        resumeOutVos.get(0).setBaseResumeEntity(baseResumeEntity);

                        for (Object argItem : obj) {

    if (argIteminstanceof BaseResumeEntity) {

    baseResumeEntity = (BaseResumeEntity) argItem;

                                baseResumeEntity.setBussDeptId(sysLoginUserDTO.getBussDeptId());

                                //在流程中的简历需要继续往下走 其他的直接返回

                                baseResumeEntity.setIsContinue(!StateEnum.FLOW.getCode().equals(resumeOutVos.get(0).getState())?false:true);

                            }

    }

    //唤醒观察者

                        setResumeId(resumeOutVos.get(0));

                    }

    }

    }

    /***********************************************简历插件上传****************************************************************************/

            if (resumeAccessVo!=null && sysLoginUserDTO !=null){

    List bussId =  sysLoginUserDTO.getAccessibleDeptIds();

                //根据部门ID和手机号判断是否已存在

                List resumeOutVos =resumeService.selectIdByPhone(resumeAccessVo.getPhone(), bussId);

                if (resumeOutVos!=null && resumeOutVos.size()>0){

    List collect = resumeOutVos.stream().filter(t -> t.getState().equals(StateEnum.FLOW.getCode())).collect(Collectors.toList());

                    if (collect.size()>0){

    collect.get(0).setOperUserId(sysLoginUserDTO.getId());

                        collect.get(0).setResumeAccessVo(resumeAccessVo);

                        for (Object argItem : obj) {

    if (argIteminstanceof ResumeAccessVo) {

    resumeAccessVo = (ResumeAccessVo) argItem;

                                //在流程中的简历需要继续往下走 其他的直接返回

                                resumeAccessVo.setIsContinue(!StateEnum.FLOW.getCode().equals(collect.get(0).getState())?false:true);

                            }

    }

    setResumeId(collect.get(0));

                    }else{

    resumeOutVos.get(0).setOperUserId(sysLoginUserDTO.getId());

                        resumeOutVos.get(0).setResumeAccessVo(resumeAccessVo);

                        for (Object argItem : obj) {

    if (argIteminstanceof ResumeAccessVo) {

    resumeAccessVo = (ResumeAccessVo) argItem;

                                resumeAccessVo.setBussDeptId(sysLoginUserDTO.getBussDeptId());

                                //在流程中的简历需要继续往下走 其他的直接返回

                                resumeAccessVo.setIsContinue(!StateEnum.FLOW.getCode().equals(resumeOutVos.get(0).getState())?false:true);

                            }

    }

    setResumeId(resumeOutVos.get(0));

                    }

    }

    }

    }

    @Pointcut(value ="@annotation(ResumeContro)")

    public void excuteService() {

    }

    }

    相关文章

      网友评论

        本文标题:springboot aop+观察者模式的应用

        本文链接:https://www.haomeiwen.com/subject/tgvhlqtx.html