美文网首页
指令系统

指令系统

作者: 汤小刀 | 来源:发表于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

相关文章

  • CPU浅谈

    1、指令系统 1.1 x86架构 要讲CPU,就必须先讲一下指令系统。指令系统指的是一个CPU所能够处理的全部指令...

  • 【学习笔记】 计算机系统结构-2.1

    指令系统 基本概念 指令系统(ISA)是一台计算机能够直接识别并执行的机器指令的集合。 指令系统是软硬件的分界面,...

  • 03.RISC精简指令系统与总线

    1、CISC RISC 复杂 与精简指令系统。精简指令系统有以下特点:(1)指令数据少:只有load和stor...

  • 指令系统

    指令系统开发说明书 一、目录结构 二、模块设计 三、关键类说明 3.1类结构 四、编译说明 指令系统是一个mave...

  • 指令系统

    指令:计算机的语言 计算机语言中的基本单词称为指令,一台计算机的全部指令称为计算机的指令集。 MIPS汇编语言:a...

  • 指令系统

    指令系统1.指令是指示计算机执行某种操作的命令,又称为机器指令。2.一台计算机所有指令的集合构成该机的指令系统,也...

  • 指令系统

    指令系统处于软件与硬件中间层 指令必须包含操作码和操作数,结果存放地址,下一条指令地址 零地址指令 无需要操作数,...

  • CPU指令系统

    指令:执行某类操作信息的集合,是CPU工作的主要依据指令集:处理器能执行全体指令的集合 指令系统[指令系统]是计算...

  • AngularJS使用

    AngularJS实现MVC AngularJS模块化Module AngularJS指令系统 AngularJS...

  • Vue自定义指令你有写过吗?自定义指令的应用场景有哪些

    一、什么是指令 开始之前我们先学习一下指令系统这个词 指令系统是计算机硬件的语言系统,也叫机器语言,它是系统程序员...

网友评论

      本文标题:指令系统

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