wuxw
2019-07-30 17d4aa9b99244c02519920d4c655a64ab33054a7
java110-code-generator/src/main/java/com/java110/code/relationship/GeneratorBindingComponent.java
@@ -14,12 +14,144 @@
        //处理组件
        generatorComponentHtml(data);
        generatorComponentJs(data);
       /* generatorComponentJava(data);
        generatorComponentJava(data);
        genneratorIListSmo(data);
        genneratorListSmoImpl(data);
        genneratorListListener(data);
        genneratorServiceCodeConstant(data);*/
        //genneratorListListener(data);
        //genneratorServiceCodeConstant(data);
    }
    private void genneratorAddHtml(JSONObject data, String componentName){
        StringBuffer sb = readFile(GeneratorStart.class.getResource("/relationship/add/add.html").getFile());
        String fileContext = sb.toString();
        fileContext = super.replaceBindingTemplateContext(fileContext, data);
        // 处理 th 信息
        StringBuffer thSb = new StringBuffer();
        JSONObject _currentObj = data.getJSONObject("components").getJSONObject(componentName);
        JSONArray columns = _currentObj.getJSONArray("columns");
        for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
            JSONObject column = columns.getJSONObject(columnIndex);
            if ("none".equals(column.getString("inputType"))) {
                continue;
            }
            String required = column.getBoolean("required") ? "必填" : "选填";
            String inputStr = "";
            if ("select".equals(column.getString("inputType"))) {
                String[] selectValues = column.getString("selectValue").split(",");
                String[] selectValueNames = column.getString("selectValueName").split(",");
                String option = "";
                for (int valueIndex = 0; valueIndex < selectValues.length; valueIndex++) {
                    String value = selectValues[valueIndex];
                    option += "<option  value=\"" + value + "\">" + selectValueNames[valueIndex] + "</option>\n";
                }
                inputStr = "<select class=\"custom-select\" v-model=\"" + _currentObj.getString("templateCode") + "ViewInfo."+column.getString("code")+"\">\n" +
                        "         <option selected  disabled value=\"\">"+ required + ",请选择" + column.getString("cnCode") + "</option>\n" +
                        "         " +option+
                        "  </select>";
            } else if("textarea".equals(column.getString("inputType"))){
                inputStr = "<textarea  placeholder=\"" + required + ",请填写" + column.getString("cnCode") + "\" class=\"form-control\""+
                        " v-model=\"" + _currentObj.getString("templateCode") + "ViewInfo."+column.getString("code")+"\">"+
                        "</textarea>";
            }else {
                inputStr = "           <input v-model=\"" + _currentObj.getString("templateCode") + "ViewInfo."+column.getString("code")+"\" " +
                        "                  type=\"text\" placeholder=\"" + required + ",请填写" + column.getString("cnCode") + "\" class=\"form-control\">\n";
            }
            thSb.append("<div class=\"form-group row\">\n" +
                    "         <label class=\"col-sm-2 col-form-label\">" + column.getString("cnCode") + "</label>\n" +
                    "         <div class=\"col-sm-10\">\n" +
                    inputStr+
                    "         </div>\n" +
                    "</div>\n");
        }
        fileContext = fileContext.replace("@@addTemplateColumns@@", thSb.toString());
        String writePath = this.getClass().getResource("/").getPath()
                + "out/relationship/component/"+_currentObj.getString("package")+"/" + _currentObj.getString("templateCode") + "View/" + toUpperCaseFirstOne(_currentObj.getString("templateCode")) + "View.html";
        System.out.printf("writePath: " + writePath);
        writeFile(writePath,
                fileContext);
    }
    /**
     * 生成 html js java 类
     *
     * @param data
     */
    private void generatorAddJs(JSONObject data, String componentName) {
        StringBuffer sb = readFile(GeneratorStart.class.getResource("/relationship/add/add.js").getFile());
        String fileContext = sb.toString();
        fileContext = super.replaceBindingTemplateContext(fileContext, data);
        JSONObject _currentObj = data.getJSONObject("components").getJSONObject(componentName);
        fileContext = fileContext.replace("@@columnTemplateCode@@", _currentObj.getString("templateCode"));
        fileContext = fileContext.replace("@@ColumnTemplateCode@@", toUpperCaseFirstOne(_currentObj.getString("templateCode")));
        //替换 变量@@templateCodeColumns@@
        JSONArray columns = _currentObj.getJSONArray("columns");
        StringBuffer variable = new StringBuffer();
        String defaultValue = "";
        String validateInfo = "";
        for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
            JSONObject column = columns.getJSONObject(columnIndex);
            defaultValue = column.getBoolean("hasDefaultValue") ? column.getString("defaultValue") : "";
            defaultValue = "'" + defaultValue + "'";
            variable.append(column.getString("code") + ":" + defaultValue + ",\n");
            validateInfo += "'"+_currentObj.getString("templateCode")+"ViewInfo."+column.getString("code")+"':[\n" ;
            if(column.getBoolean("required")) {
                validateInfo +="{\n" +
                        "                            limit:\"required\",\n" +
                        "                            param:\"\",\n" +
                        "                            errInfo:\""+column.getString("cnCode")+"不能为空\"\n" +
                        "                        },\n";
            }
            if(column.containsKey("limit") && !StringUtils.isEmpty(column.getString("limit"))) {
                validateInfo +=" {\n" +
                        "                            limit:\""+column.getString("limit")+"\",\n" +
                        "                            param:\""+column.getString("limitParam")+"\",\n" +
                        "                            errInfo:\""+column.getString("limitErrInfo")+"\"\n" +
                        "                        },\n" +
                        "                    ],\n";
            }
        }
        fileContext =  fileContext.replace("@@templateCodeColumns@@", variable.toString());
        fileContext = fileContext.replace("@@addTemplateCodeValidate@@", validateInfo);
        // 替换 数据校验部分代码
        String writePath = this.getClass().getResource("/").getPath()
                + "out/relationship/component/"+_currentObj.getString("package")+"/" + _currentObj.getString("templateCode") + "View/" + toUpperCaseFirstOne(_currentObj.getString("templateCode")) + "View.js";
        System.out.printf("writePath: " + writePath);
        writeFile(writePath,
                fileContext);
    }
@@ -69,7 +201,10 @@
                    "                   callBackFunction=\"notify\"\n" +
                    "        ></vc:create>\n" +
                    "    </div>\n");
            //如果相应组件不存在,则根据组件配置自动生成
            if(!flow.getBoolean("existsComponent")){
                genneratorAddHtml(data, flow.getString("vcName"));
            }
        }
        int stepLastIndex = data.getBoolean("needAffirm") ? flows.size() : flows.size() - 1;
@@ -117,6 +252,11 @@
            validateInfo.append("vc.emit('" + flow.getString("vcName") + "', 'onIndex', vc.component.serviceBindingInfo.index);\n");
            //如果相应组件不存在,则根据组件配置自动生成
            if(!flow.getBoolean("existsComponent")){
                generatorAddJs(data, flow.getString("vcName"));
            }
        }
        String showAffirmPage = data.getBoolean("needAffirm") ? "确认信息" : "";
        allStep.append(showAffirmPage);
@@ -144,13 +284,13 @@
     */
    private void generatorComponentJava(JSONObject data) {
        StringBuffer sb = readFile(GeneratorStart.class.getResource("/web/add/AddComponent.java").getFile());
        StringBuffer sb = readFile(GeneratorStart.class.getResource("/relationship/binding/BindingComponent.java").getFile());
        String fileContext = sb.toString();
        fileContext = super.replaceTemplateContext(fileContext, data);
        fileContext = super.replaceBindingTemplateContext(fileContext, data);
        String writePath = this.getClass().getResource("/").getPath()
                + "out/web/component/java/" + data.getString("templateCode") + "/Add" + toUpperCaseFirstOne(data.getString("templateCode")) + "Component.java";
                + "out/relationship/component/java/" + data.getString("templateCode") + "/" + toUpperCaseFirstOne(data.getString("templateCode")) + "BindingComponent.java";
        System.out.printf("writePath: " + writePath);
        writeFile(writePath,
                fileContext);
@@ -164,13 +304,13 @@
     * @param data
     */
    private void genneratorIListSmo(JSONObject data) {
        StringBuffer sb = readFile(GeneratorStart.class.getResource("/web/add/IAddSMO.java").getFile());
        StringBuffer sb = readFile(GeneratorStart.class.getResource("/relationship/binding/IBindingSMO.java").getFile());
        String fileContext = sb.toString();
        fileContext = super.replaceTemplateContext(fileContext, data);
        fileContext = super.replaceBindingTemplateContext(fileContext, data);
        String writePath = this.getClass().getResource("/").getPath()
                + "out/web/smo/" + data.getString("templateCode") + "/IAdd" + toUpperCaseFirstOne(data.getString("templateCode")) + "SMO.java";
                + "out/relationship/smo/" + data.getString("templateCode") + "/I" + toUpperCaseFirstOne(data.getString("templateCode")) + "BindingSMO.java";
        System.out.printf("writePath: " + writePath);
        writeFile(writePath,
                fileContext);
@@ -182,18 +322,34 @@
     * @param data
     */
    private void genneratorListSmoImpl(JSONObject data) {
        StringBuffer sb = readFile(GeneratorStart.class.getResource("/web/add/AddSMOImpl.java").getFile());
        StringBuffer sb = readFile(GeneratorStart.class.getResource("/relationship/binding/BindingSMOImpl.java").getFile());
        String fileContext = sb.toString();
        fileContext = super.replaceTemplateContext(fileContext, data);
        fileContext = super.replaceBindingTemplateContext(fileContext, data);
        //替换校验部分代码 @@validateTemplateColumns@@
        JSONArray columns = data.getJSONArray("columns");
        JSONArray flows = data.getJSONArray("flows");
        StringBuffer validateStr = new StringBuffer();
        for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
            JSONObject column = columns.getJSONObject(columnIndex);
            if (column.getBoolean("required")) {
                validateStr.append("Assert.hasKeyAndValue(paramIn, \"" + column.getString("code") + "\", \"" + column.getString("desc") + "\");\n");
        for(int flowIndex = 0 ; flowIndex < flows.size() ; flowIndex ++) {
            JSONObject flowObj = flows.getJSONObject(flowIndex);
            if(flowObj.containsKey("existsComponent") && flowObj.getBoolean("existsComponent")){
                continue;
            }
            String vcName = flowObj.getString("vcName");
            JSONObject vcObject = data.getJSONObject("components").getJSONObject(vcName);
            JSONArray columns = vcObject.getJSONArray("columns");
            for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
                JSONObject column = columns.getJSONObject(columnIndex);
                if (column.getBoolean("required")) {
                    validateStr.append("Assert.hasKeyByFlowData(infos, \""+ flowObj.getString("vcName") +"\", \"" + column.getString("code") + "\", \"" + column.getString("desc") + "\");\n");
                }
            }
        }
@@ -201,7 +357,7 @@
        String writePath = this.getClass().getResource("/").getPath()
                + "out/web/smo/" + data.getString("templateCode") + "/impl/Add" + toUpperCaseFirstOne(data.getString("templateCode")) + "SMOImpl.java";
                + "out/relationship/smo/" + data.getString("templateCode") + "/impl/" + toUpperCaseFirstOne(data.getString("templateCode")) + "BindingSMOImpl.java";
        System.out.printf("writePath: " + writePath);
        writeFile(writePath,
                fileContext);