Search in sources :

Example 1 with DaoByFreeSql

use of com.ctrip.platform.dal.daogen.dao.DaoByFreeSql in project dal by ctripcorp.

the class JavaDataPreparerOfFreeSqlProcessor method prepareFreeSql.

private List<Callable<ExecuteResult>> prepareFreeSql(CodeGenContext codeGenCtx) {
    JavaCodeGenContext ctx = (JavaCodeGenContext) codeGenCtx;
    int projectId = ctx.getProjectId();
    final Progress progress = ctx.getProgress();
    final String namespace = ctx.getNamespace();
    final Map<String, JavaMethodHost> _freeSqlPojoHosts = ctx.get_freeSqlPojoHosts();
    final Queue<FreeSqlHost> _freeSqlHosts = ctx.getFreeSqlHosts();
    DaoByFreeSql daoByFreeSql = SpringBeanGetter.getDaoByFreeSql();
    List<GenTaskByFreeSql> freeSqlTasks;
    if (ctx.isRegenerate()) {
        freeSqlTasks = daoByFreeSql.updateAndGetAllTasks(projectId);
        prepareDbFromFreeSql(ctx, freeSqlTasks);
    } else {
        freeSqlTasks = daoByFreeSql.updateAndGetTasks(projectId);
        prepareDbFromFreeSql(ctx, daoByFreeSql.getTasksByProjectId(projectId));
    }
    if (!ctx.isIgnoreApproveStatus() && freeSqlTasks != null && freeSqlTasks.size() > 0) {
        Iterator<GenTaskByFreeSql> ite = freeSqlTasks.iterator();
        while (ite.hasNext()) {
            int approved = ite.next().getApproved();
            if (approved != 2 && approved != 0) {
                ite.remove();
            }
        }
    }
    // 按照DbName以及ClassName做一次GroupBy(相同DbName的GenTaskByFreeSql作为一组),且ClassName不区分大小写
    final Map<String, List<GenTaskByFreeSql>> groupBy = freeSqlGroupBy(freeSqlTasks);
    List<Callable<ExecuteResult>> results = new ArrayList<>();
    // 以DbName以及ClassName为维度,为每个维度生成一个DAO类
    for (final Map.Entry<String, List<GenTaskByFreeSql>> entry : groupBy.entrySet()) {
        Callable<ExecuteResult> worker = new Callable<ExecuteResult>() {

            @Override
            public ExecuteResult call() throws Exception {
                ExecuteResult result = new ExecuteResult("Build  Free SQL[" + entry.getKey() + "] Host");
                progress.setOtherMessage(result.getTaskName());
                List<GenTaskByFreeSql> currentTasks = entry.getValue();
                if (currentTasks.size() < 1)
                    return result;
                FreeSqlHost host = new FreeSqlHost();
                host.setDbSetName(currentTasks.get(0).getDatabaseSetName());
                host.setClassName(currentTasks.get(0).getClass_name());
                host.setPackageName(namespace);
                host.setDatabaseCategory(getDatabaseCategory(currentTasks.get(0).getAllInOneName()));
                List<JavaMethodHost> methods = new ArrayList<>();
                // 每个Method可能就有一个Pojo
                for (GenTaskByFreeSql task : currentTasks) {
                    JavaMethodHost method = new JavaMethodHost();
                    method.setSql(task.getSql_content());
                    method.setName(task.getMethod_name());
                    method.setPackageName(namespace);
                    method.setScalarType(task.getScalarType());
                    method.setPojoType(task.getPojoType());
                    method.setPaging(task.isPagination());
                    method.setCrud_type(task.getCrud_type());
                    method.setComments(task.getComment());
                    if (task.getPojo_name() != null && !task.getPojo_name().isEmpty())
                        method.setPojoClassName(WordUtils.capitalize(task.getPojo_name() + "Pojo"));
                    List<JavaParameterHost> params = new ArrayList<>();
                    for (String param : StringUtils.split(task.getParameters(), ";")) {
                        String[] splitedParam = StringUtils.split(param, ",");
                        JavaParameterHost p = new JavaParameterHost();
                        p.setName(splitedParam[0]);
                        p.setSqlType(Integer.valueOf(splitedParam[1]));
                        p.setJavaClass(Consts.jdbcSqlTypeToJavaClass.get(p.getSqlType()));
                        p.setValidationValue(DbUtils.mockATest(p.getSqlType()));
                        boolean sensitive = splitedParam.length >= 3 ? Boolean.parseBoolean(splitedParam[2]) : false;
                        p.setSensitive(sensitive);
                        params.add(p);
                    }
                    SqlBuilder.rebuildJavaInClauseSQL(task.getSql_content(), params);
                    method.setParameters(params);
                    method.setHints(task.getHints());
                    methods.add(method);
                    if (method.getPojoClassName() != null && !method.getPojoClassName().isEmpty() && !_freeSqlPojoHosts.containsKey(method.getPojoClassName()) && !"update".equalsIgnoreCase(method.getCrud_type())) {
                        List<JavaParameterHost> paramHosts = new ArrayList<>();
                        for (AbstractParameterHost _ahost : DbUtils.testAQuerySql(task.getAllInOneName(), task.getSql_content(), task.getParameters(), new JavaGivenSqlResultSetExtractor())) {
                            paramHosts.add((JavaParameterHost) _ahost);
                        }
                        method.setFields(paramHosts);
                        _freeSqlPojoHosts.put(method.getPojoClassName(), method);
                    }
                }
                host.setMethods(methods);
                _freeSqlHosts.add(host);
                result.setSuccessal(true);
                return result;
            }
        };
        results.add(worker);
    }
    return results;
}
Also used : JavaGivenSqlResultSetExtractor(com.ctrip.platform.dal.daogen.host.java.JavaGivenSqlResultSetExtractor) JavaParameterHost(com.ctrip.platform.dal.daogen.host.java.JavaParameterHost) FreeSqlHost(com.ctrip.platform.dal.daogen.host.java.FreeSqlHost) GenTaskByFreeSql(com.ctrip.platform.dal.daogen.entity.GenTaskByFreeSql) JavaMethodHost(com.ctrip.platform.dal.daogen.host.java.JavaMethodHost) Callable(java.util.concurrent.Callable) ExecuteResult(com.ctrip.platform.dal.daogen.entity.ExecuteResult) JavaCodeGenContext(com.ctrip.platform.dal.daogen.generator.java.JavaCodeGenContext) AbstractParameterHost(com.ctrip.platform.dal.daogen.host.AbstractParameterHost) Progress(com.ctrip.platform.dal.daogen.entity.Progress) DaoByFreeSql(com.ctrip.platform.dal.daogen.dao.DaoByFreeSql)

Aggregations

DaoByFreeSql (com.ctrip.platform.dal.daogen.dao.DaoByFreeSql)1 ExecuteResult (com.ctrip.platform.dal.daogen.entity.ExecuteResult)1 GenTaskByFreeSql (com.ctrip.platform.dal.daogen.entity.GenTaskByFreeSql)1 Progress (com.ctrip.platform.dal.daogen.entity.Progress)1 JavaCodeGenContext (com.ctrip.platform.dal.daogen.generator.java.JavaCodeGenContext)1 AbstractParameterHost (com.ctrip.platform.dal.daogen.host.AbstractParameterHost)1 FreeSqlHost (com.ctrip.platform.dal.daogen.host.java.FreeSqlHost)1 JavaGivenSqlResultSetExtractor (com.ctrip.platform.dal.daogen.host.java.JavaGivenSqlResultSetExtractor)1 JavaMethodHost (com.ctrip.platform.dal.daogen.host.java.JavaMethodHost)1 JavaParameterHost (com.ctrip.platform.dal.daogen.host.java.JavaParameterHost)1 Callable (java.util.concurrent.Callable)1