美文网首页
指令系统

指令系统

作者: 汤小刀 | 来源:发表于2018-02-07 11:54 被阅读0次

    指令系统开发说明书

    一、目录结构

    directive
    |__ dependencies                                      依赖包
    |__ modules                                           公共模块
        |__ booter                                     web启动模块
        |__ datatables                                 指令实现模块(项目核心模块)
        |__ utils                                      公共类
        |__ gmybatis                                   mybats封装(已停止使用)
        |__ message                                    消息处理模块
        |__ mq                                         mq封装
        |__ shiro                                      shiro封装
        |__ sms                                        短信发送
        |__ validator                                  参数验证注解
        |__ webjars                                    web包
        |__ words                                      分词处理
    |__ programs
        |__ executor                                   service启动模块
        |__ tester                                     测试
    

    二、模块设计

    datatables
    |__ com.juzi.datatables
        |__ builder                                    创建指令实体结构
        |__ exception                                  异常实现
        |__ expression                                 SQL语句中的表达式实现
        |__ handler                                    指令逻辑处理
        |__ impl                                       指令调用实现
        |__ plugin                                     插件(未实现)
        |__ repository                                 数据库访问
        |__ transfers                                  数据转发
        |__ executor                                   SQL执行
        |__ utils                                      公共类
        |__ DirectiveService                           接口服务类
    utils
    |__ com.juzi.utils
        |__ HttpUitls
        |__ JSONRequest
        |__ JSONResponse
        |__ JSONStatement
        |__ KeyConst
        |__ TokenHandler
        |__ TokenParser
    

    三、关键类说明

    com.juzi.datatables.DirectiveEngine    指令引擎
    1. 指令调用入口,DirectiveServiceImpl创建实例,调用engine.execute()
    

    3.1类结构

        /**
         * transfererManager
         * 转发管理器
         */
        private TransfererManager transfererManager;
    
        /**
         * repository
         * 数据库访问
         */
        private RoutingRepository repository;
    
        /**
         * directiveManager
         * 指令管理器
         */
        
        /**
        创建engine实例,需要spring提供repository和 directiveManager 
         */
        public DirectiveEngine(RoutingRepository repository, DirectiveManager directiveManager) {
            this.repository = repository;
            this.directiveManager = directiveManager;
        }
        
       /**
         *
         * @param st 指令参数,继承自JSONRequest,JSON数据结构,至少包括
         *           name 指令名,没有指令名无法执行
         *           其它参数根据SQL的模板来决定
         *           如${product_id},则需要一个product_id的参数
         * @return JSONResponse 执行结果
         * @throws BaseException 指令异常
         */
        public JSONResponse execute(final JSONStatement st) throws BaseException {
            if (StringUtils.isEmpty(st.getName())) {
                st.setName(st.getString("statement"));
            }
    
            // 从数据库中获取指令内容
            Directive directiveObject = directiveManager.getDirective(st.getName());
            if (null == directiveObject) {
                throw new BuilderException("No directive named:" + st.getName());
            }
    
            if (null == directiveObject.getContext()) {
                throw new BuilderException("Directive content null:" + st.getName());
            }
    
            JSONResponse response = new JSONResponse();
            // 解析指令
            String text = directiveObject.getContext().toString();
            DirectiveGroup group = Builder.createDirectiveGroup(directiveObject.getName(), text);
            for (DirectiveWrapper wrapper : group.getDirectiveList()) {
                // 判断命令是否需要执行
                if (null != wrapper.getConditions() && !wrapper.getConditions().isEmpty()) {
                    if (!checkConditions(wrapper.getConditions(), st)) {
                        continue;
                    }
                }
    
                // 创建Executor
                Executor executor = Builder.createExecutor(wrapper, repository.getRepository(st.getDatasource()));
    
                // 执行命令
                Object resultObject = executor.execute(st);
                Object convertObject = ResultUtils.convert(wrapper.getResultType(), resultObject);
                response.put(wrapper.getResultKey(), convertObject);
    
                // Select 获取记录总数
                if (executor instanceof SelectExecutor) {
                    response.setRecordsFiltered(((SelectExecutor) executor).getRecordsFiltered());
                    response.setRecordsTotal(((SelectExecutor) executor).getRecordsTotal());
                }
    
                if (null != wrapper.getTransfer() && null != transfererManager) {
                    transfererManager.getTransferer().transfer(wrapper.getTransfer(), resultObject);
                }
            }
            return response;
        }
    

    四、编译说明

    指令系统是一个maven项目,使用默认的maven插件命令即可

    4.1 全工程编译[根目录]

    1. mvn complie
    
    image
    2. install到本地仓库
        mvn install
    
    3. deploy到私有仓库
        mvn deploy
    

    4.2 编译datatables

    同上,只是目录不同
    

    4.3 编译executor

    同上,只是目录不同
    

    4.4 更新版本号

    mvn versions:set -DnewVersion=${versionCode}
    versionCode=你需要设置的版本号
    

    五、流程图

    5.1整体流程

    st=>start: 开始
    e=>end: 结束
    op=>operation: 操作
    sub=>subroutine: 子程序
    cond=>condition: 是或者不是?
    io=>inputoutput: 输出
    
    st(right)->op->cond
    cond(yes)->io(right)->e
    cond(no)->sub(right)->op
    

    相关文章

      网友评论

          本文标题:指令系统

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