package jnpf.generater.factory; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.builder.CustomFile; import com.baomidou.mybatisplus.generator.config.po.TableField; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.DateType; import jnpf.base.UserInfo; import jnpf.base.entity.VisualdevEntity; import jnpf.base.model.ColumnDataModel; import jnpf.base.model.DownloadCodeForm; import jnpf.base.model.Template6.AuthorityModel; import jnpf.base.model.Template6.BtnData; import jnpf.base.model.Template6.ColumnListField; import jnpf.base.model.Template7.Template7Model; import jnpf.base.model.VisualWebTypeEnum; import jnpf.base.util.SourceUtil; import jnpf.base.util.VisualUtils; import jnpf.base.util.app.AppGenModel; import jnpf.base.util.app.AppGenUtil; import jnpf.base.util.common.*; import jnpf.base.util.custom.CustomGenerator; import jnpf.base.util.fuctionFormVue3.*; import jnpf.constant.GenerateConstant; import jnpf.constant.JnpfConst; import jnpf.constant.MsgCode; import jnpf.constant.TableFieldsNameConst; import jnpf.database.model.entity.DbLinkEntity; import jnpf.database.util.DataSourceUtil; import jnpf.database.util.TenantDataSourceUtil; import jnpf.generater.model.FormDesign.ColumnListDataModel; import jnpf.generater.model.FormDesign.ListSearchGroupModel; import jnpf.generater.model.FormDesign.SearchTypeModel; import jnpf.generater.model.FormDesign.TemplateMethodEnum; import jnpf.model.generater.GenerField; import jnpf.model.visualJson.*; import jnpf.model.visualJson.analysis.*; import jnpf.model.visualJson.config.ConfigModel; import jnpf.model.visualJson.config.HeaderModel; import jnpf.model.visualJson.config.TabConfigModel; import jnpf.util.JsonUtil; import jnpf.util.StringUtil; import jnpf.util.TableFeildsEnum; import jnpf.util.XSSEscape; import jnpf.util.visiual.JnpfKeyConsts; import org.apache.commons.collections4.CollectionUtils; import org.apache.velocity.VelocityContext; import org.springframework.boot.SpringBootVersion; import org.springframework.stereotype.Component; import java.io.File; import java.sql.SQLException; import java.util.*; import java.util.function.BiConsumer; import java.util.stream.Collectors; /** * @author JNPF开发平台组 * @version V3.5.0 * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com) * @date 2021/5/31 */ @Component public class CodeGenerateFactoryV3 { //鉴别副表正则 String reg = "^[jnpf_]\\S*_jnpf\\S*"; /** * 根据模板路径对应实体 * * @param templateMethod * @return */ public void runGenerator(String templateMethod, GenerateParamModel generateParamModel) throws Exception { GenerateInterface codeGenerateUtil = null; if (templateMethod.equals(TemplateMethodEnum.T1.getMethod())) { codeGenerateUtil = new GenerateWorkFlow(); } else if (templateMethod.equals(TemplateMethodEnum.T2.getMethod())) { codeGenerateUtil = new GenerateFormList(); } else if (templateMethod.equals(TemplateMethodEnum.T3.getMethod())) { codeGenerateUtil = new GenerateFormListFlow(); } else if (templateMethod.equals(TemplateMethodEnum.T4.getMethod())) { codeGenerateUtil = new GenerateForm(); } else if (templateMethod.equals(TemplateMethodEnum.T5.getMethod())) { codeGenerateUtil = new GenerateFormFlow(); } else if (templateMethod.equals(TemplateMethodEnum.T6.getMethod())) { GenerateDataView generateDataView = new GenerateDataView(); generateDataView.generateDataView(generateParamModel); generateApp(generateParamModel); return; } else { codeGenerateUtil = null; } //生成后端代码 GenerateParamModel javaObj = BeanUtil.copyProperties(generateParamModel, GenerateParamModel.class); this.generateJava(javaObj, codeGenerateUtil); } /** * 生成java代码 * * @param codeUtil 生成重写接口 * @param generateParamModel * @throws Exception */ private void generateJava(GenerateParamModel generateParamModel, GenerateInterface codeUtil) throws Exception { List list = JsonUtil.getJsonToList(generateParamModel.getEntity().getVisualTables(), TableModel.class); //当前表别名及字段别名 Map tableAliseMap = generateParamModel.getTableAliseMap(); //表别名 for (TableModel model : list) { AliasModel aliasModel = tableAliseMap.get(model.getTable()); //表别名 String className = StringUtil.isNotEmpty(aliasModel.getAliasName()) ? aliasModel.getAliasName() : model.getTable(); generateParamModel.setTable(model.getTable()); generateParamModel.setClassName(className); generateParamModel.setMainTable(false); if ("1".equals(model.getTypeId())) { generateParamModel.setMainTable(true); //生成主表代码 this.setCode(generateParamModel, codeUtil); //前端代码 this.generateHtml(generateParamModel, codeUtil); //生成app代码 this.generateApp(generateParamModel); } else if ("0".equals(model.getTypeId())) { //生成子表代码 this.setCode(generateParamModel, codeUtil); } } } /** * 组装通用数据 * * @param generateParamModel */ private void setCommonParam(GenerateParamModel generateParamModel) { //组装通用数据----- VisualdevEntity entity = generateParamModel.getEntity(); DbLinkEntity linkEntity = generateParamModel.getLinkEntity(); List tableModelList = JsonUtil.getJsonToList(entity.getVisualTables(), TableModel.class) .stream().sorted(Comparator.comparing(TableModel::getTypeId).reversed()).collect(Collectors.toList()); //赋值主键 tableModelList.stream().forEach(t -> { try { t.setTableKey(VisualUtils.getpKey(linkEntity, t.getTable())); } catch (SQLException sqlException) { sqlException.printStackTrace(); } }); //表别名 Map tableRenames = generateParamModel.getTableAliseMap(); //formTempJson FormDataModel formData = JsonUtil.getJsonToBean(entity.getFormData(), FormDataModel.class); //设置乐观锁参数用于其他位置判断 generateParamModel.setConcurrencyLock(formData.getConcurrencyLock()); generateParamModel.setAutoIncrement(formData.getPrimaryKeyPolicy() == 2); List list = JsonUtil.getJsonToList(formData.getFields(), FieLdsModel.class); //所有控件 List formAllModel = new ArrayList<>(); RecursionForm recursionForm = new RecursionForm(); recursionForm.setTableModelList(JsonUtil.getJsonToList(entity.getVisualTables(), TableModel.class)); recursionForm.setList(list); FormCloumnUtil.recursionFormGen(recursionForm, formAllModel); generateParamModel.setTableModelList(tableModelList); generateParamModel.setFormAllModel(formAllModel); //塞别名 for (FormAllModel t : formAllModel) { if (FormEnum.mast.getMessage().equals(t.getJnpfKey())) { FieLdsModel fieLdsModel = t.getFormColumnModel().getFieLdsModel(); AliasModel aliasModel = tableRenames.get(fieLdsModel.getConfig().getTableName()); Map fieldsMap = aliasModel.getFieldsMap(); fieLdsModel.setTableAlias(aliasModel.getAliasName()); fieLdsModel.setFieldAlias(fieldsMap.get(fieLdsModel.getVModel())); } if (FormEnum.mastTable.getMessage().equals(t.getJnpfKey())) { FieLdsModel fieLdsModel = t.getFormMastTableModel().getMastTable().getFieLdsModel(); AliasModel aliasModel = tableRenames.get(fieLdsModel.getConfig().getTableName()); Map fieldsMap = aliasModel.getFieldsMap(); fieLdsModel.setTableAlias(aliasModel.getAliasName()); String[] split = fieLdsModel.getVModel().split(JnpfConst.SIDE_MARK); fieLdsModel.setFieldAlias(fieldsMap.get(split[1])); } if (FormEnum.table.getMessage().equals(t.getJnpfKey())) { FormColumnTableModel childList = t.getChildList(); AliasModel aliasModel = tableRenames.get(childList.getTableName()); Map fieldsMap = aliasModel.getFieldsMap(); childList.setAliasClassName(aliasModel.getAliasName()); childList.setAliasUpName(DataControlUtils.captureName(aliasModel.getAliasName())); childList.setAliasLowName(DataControlUtils.initialLowercase(aliasModel.getAliasName())); for (FormColumnModel formColumnModel : childList.getChildList()) { FieLdsModel fieLdsModel = formColumnModel.getFieLdsModel(); fieLdsModel.setTableAlias(aliasModel.getAliasName()); fieLdsModel.setFieldAlias(fieldsMap.get(fieLdsModel.getVModel())); } } } //代码生成基础信息 Template7Model template7Model = generateParamModel.getTemplate7Model(); template7Model.setClassName(DataControlUtils.captureName(generateParamModel.getClassName())); template7Model.setTableName(generateParamModel.getClassName()); template7Model.setDescription(generateParamModel.getDownloadCodeForm().getDescription()); generateParamModel.setTemplate7Model(template7Model); } /** * 获取传递参数 * * @param generateParamModel * @return * @throws Exception */ private Map getcolumndata(GenerateParamModel generateParamModel) throws Exception { Map columndata = new HashMap<>(16); DownloadCodeForm downloadCodeForm = generateParamModel.getDownloadCodeForm(); VisualdevEntity entity = generateParamModel.getEntity(); DbLinkEntity linkEntity = generateParamModel.getLinkEntity(); List tableModelList = generateParamModel.getTableModelList(); List formAllModel = generateParamModel.getFormAllModel(); Template7Model template7Model = generateParamModel.getTemplate7Model(); //自定义包名 String modulePackageName = downloadCodeForm.getModulePackageName(); //formTempJson FormDataModel formData = JsonUtil.getJsonToBean(entity.getFormData(), FormDataModel.class); //主表 TableModel mainTable = tableModelList.stream().filter(t -> t.getTypeId().equals("1")).findFirst().orElse(null); //表别名 Map tableRenames = generateParamModel.getTableAliseMap(); String mainModelName = DataControlUtils.captureName(tableRenames.get(mainTable.getTable()).getAliasName()); AliasModel mainAliasModel = tableRenames.get(mainTable.getTable()); //主表控件 List mast = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //子表控件 List table = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //副表控件 List mastTable = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); List subTableName = new ArrayList<>(); for (FormAllModel allModel : table) { FormColumnTableModel childList = allModel.getChildList(); if (childList != null) { subTableName.add(childList.getTableName()); } } //子表(tableField,tableName)->tablefield1->realname Map childKeyTableNameMap = new HashMap<>(8); table.stream().forEach(t -> childKeyTableNameMap.put(t.getChildList().getTableModel(), t.getChildList().getTableName())); //子表集合 List childTableNameList = new ArrayList<>(); //全部表 List allTableNameList = new ArrayList<>(); for (TableModel tableModel : tableModelList) { AliasModel aliasModel = tableRenames.get(tableModel.getTable()); Map fieldsMap = aliasModel.getFieldsMap(); TableModel Model = new TableModel(); Model.setInitName(tableModel.getTable()); Model.setTable(aliasModel.getAliasName()); Model.setFields(tableModel.getFields()); if (tableModel.getTable().equals(mainTable.getTable())) { Model.setTableTag("main"); } else { Model.setTableField(DataControlUtils.captureName(fieldsMap.get(tableModel.getTableField()))); Model.setRelationField(DataControlUtils.captureName(mainAliasModel.getFieldsMap().get(tableModel.getRelationField()))); Model.setTableTag(subTableName.contains(tableModel.getTable()) ? "sub" : "sub-jnpf"); } allTableNameList.add(Model); if ("0".equals(tableModel.getTypeId())) { childTableNameList.add(Model); } } TableModel mainTableModel = tableModelList.stream().filter(t -> t.getTypeId().equals("1")).findFirst().orElse(null); //主表的字段 if (mainTableModel == null || CollectionUtils.isEmpty(mainTableModel.getFields())) { throw new SQLException(MsgCode.COD001.get()); } //主表的属性 List mastTableHandle = new ArrayList<>(); for (int i = 0; i < mast.size(); i++) { FormAllModel mastModel = mast.get(i); FieLdsModel fieLdsModel = mastModel.getFormColumnModel().getFieLdsModel(); //接口templatejson转换 if (StringUtil.isNotEmpty(fieLdsModel.getVModel())) { List templateJson = fieLdsModel.getConfig().getTemplateJson(); String json = templateJson.size() > 0 ? JsonUtil.getObjectToString(templateJson) : fieLdsModel.getTemplateJson(); fieLdsModel.setTemplateJson(json); mastTableHandle.add(fieLdsModel); } } //副表模型 List columnTableHandle = new ArrayList<>(); //副表数据model Map> groupColumnDataMap = mastTable.stream().collect(Collectors.groupingBy(m -> m.getFormMastTableModel().getTable())); for (String key : groupColumnDataMap.keySet()) { String classNameMast = DataControlUtils.captureName(tableRenames.get(key).getAliasName()); ColumnListDataModel columnListDataModel = new ColumnListDataModel(); columnListDataModel.setModelName(classNameMast); columnListDataModel.setModelUpName(DataControlUtils.captureName(classNameMast)); columnListDataModel.setModelLowName(DataControlUtils.initialLowercase(classNameMast)); List allModels = groupColumnDataMap.get(key); List fields = allModels.stream().map(m -> m.getFormMastTableModel().getField()).collect(Collectors.toList()); columnListDataModel.setFieldList(fields); columnListDataModel.setFieLdsModelList(allModels.stream().map(al -> al.getFormMastTableModel()).collect(Collectors.toList())); columnListDataModel.setTableName(key); List collect = allModels.stream().map(all -> JsonUtil.getJsonToBean(all.getFormMastTableModel().getMastTable().getFieLdsModel(), FieLdsModel.class)).collect(Collectors.toList()); collect.stream().forEach(c -> { List templateJson = c.getConfig().getTemplateJson(); String json = templateJson.size() > 0 ? JsonUtil.getObjectToString(templateJson) : c.getTemplateJson(); c.setTemplateJson(json); }); columnListDataModel.setFieLdsModels(collect); TableModel tableModel = tableModelList.stream().filter(t -> t.getTable().equalsIgnoreCase(columnListDataModel.getTableName())).findFirst().orElse(null); if (ObjectUtil.isNotEmpty(tableModel)) { //副表主键别名 Map thisTableField = tableRenames.get(key).getFieldsMap(); String mainKeyAlias = thisTableField.get(tableModel.getTableKey()); String foreignKeyAlias = thisTableField.get(tableModel.getTableField()); //主表的主键 String relationKeyAlias = tableRenames.get(tableModel.getRelationTable()).getFieldsMap().get(tableModel.getRelationField()); columnListDataModel.setMainUpKey(DataControlUtils.captureName(relationKeyAlias)); //主键 columnListDataModel.setMainKey(mainKeyAlias); columnListDataModel.setMainField(DataControlUtils.captureName(mainKeyAlias)); //外键 columnListDataModel.setRelationField(foreignKeyAlias); columnListDataModel.setRelationUpField(DataControlUtils.captureName(foreignKeyAlias)); } columnTableHandle.add(columnListDataModel); } //子表的属性 List> childTableHandle = new ArrayList<>(); for (int i = 0; i < table.size(); i++) { FormColumnTableModel childList = table.get(i).getChildList(); List childListAll = childList.getChildList(); String classNameChild = DataControlUtils.captureName(tableRenames.get(childList.getTableName()).getAliasName()); //子表别名 childList.setAliasClassName(classNameChild); childList.setAliasUpName(DataControlUtils.captureName(classNameChild)); childList.setAliasLowName(DataControlUtils.initialLowercase(classNameChild)); for (FormColumnModel columnModel : childListAll) { FieLdsModel fieLdsModel = columnModel.getFieLdsModel(); List templateJson = fieLdsModel.getConfig().getTemplateJson(); String json = templateJson.size() > 0 ? JsonUtil.getObjectToString(templateJson) : fieLdsModel.getTemplateJson(); fieLdsModel.setTemplateJson(json); } Map childs = JsonUtil.entityToMap(childList); Optional first1 = tableModelList.stream().filter(t -> t.getTable().equals(childList.getTableName())).findFirst(); if (!first1.isPresent()) { throw new SQLException(MsgCode.COD001.get()); } TableModel tableModel = first1.get(); //获取主键-外键字段-关联主表字段 String tableKeyAlias = tableRenames.get(tableModel.getTable()).getFieldsMap().get(tableModel.getTableKey()); childs.put("chidKeyName", StringUtil.isNotEmpty(tableKeyAlias) ? tableKeyAlias : tableModel.getTableKey()); //外键 String tableField = tableRenames.get(tableModel.getTable()).getFieldsMap().get(tableModel.getTableField()); childs.put("tablefield", StringUtil.isNotEmpty(tableField) ? tableField : tableModel.getTableField()); //主表主键 String relationField = tableRenames.get(mainTable.getTable()).getFieldsMap().get(tableModel.getRelationField()); childs.put("relationField", StringUtil.isNotEmpty(relationField) ? relationField : tableModel.getRelationField()); childTableHandle.add(childs); } //++++++++++++++++++++++++++++主副子通用参数++++++++++++++++++++++++++// //微服务标识 columndata.put("isCloud", GenerateCommon.IS_CLOUD); //是列表,是流程判断 if (VisualWebTypeEnum.FORM_LIST.getType().equals(entity.getWebType()) && !Objects.equals(entity.getType(), 3)) { columndata.put("isList", true); //添加列表参数 getListColumndata(generateParamModel, columndata); } if (Objects.equals(downloadCodeForm.getEnableFlow(), 1)) { columndata.put("isFlow", true); } //后台 columndata.put("module", downloadCodeForm.getModule()); columndata.put("genInfo", template7Model); columndata.put("modelName", template7Model.getClassName()); //表单非系统控件字段--为了加null可以更新 columndata.put("tableNotSystemField", GenerateCommon.getNotSystemFields(mast, mastTable, table, generateParamModel)); //主副子 控件字段(已处理数据) columndata.put("mastTableHandle", mastTableHandle);//原system columndata.put("columnTableHandle", columnTableHandle);//原columnChildren columndata.put("childTableHandle", childTableHandle);//原child columndata.put("mainModelName", mainModelName); //数据源 if (ObjectUtil.isNotEmpty(linkEntity)) { columndata.put("DS", linkEntity.getFullName()); } // 数据源配置 DataSourceConfig dsc = SourceUtil.dbConfig(TenantDataSourceUtil.getTenantSchema(), linkEntity); //数据库类型 columndata.put("dbType", dsc.getDbType().getDb()); // 包名 columndata.put("modulePackageName", modulePackageName); columndata.put("pKeyName", generateParamModel.getPKeyName()); columndata.put("pKeyNameOriginal", generateParamModel.getPKeyNameOriginal()); columndata.put("VisualDevId", entity.getId()); columndata.put("allTableNameList", allTableNameList); String springVersion = SpringBootVersion.getVersion(); columndata.put("springVersion", springVersion); //++++++++++++++++++++++++++++仅主表参数++++++++++++++++++++++++++// if (generateParamModel.isMainTable()) { //后台 columndata.put("main", true); //模板名称 columndata.put("formModelName", entity.getFullName()); //乐观锁 columndata.put("version", formData.getConcurrencyLock()); TableFields versionField = mainTable.getFields().stream().filter(t -> TableFeildsEnum.VERSION.getField().equalsIgnoreCase(t.getField())).findFirst().orElse(null); columndata.put("versionType", versionField != null ? versionField.getDataType() : ""); //删除标志 columndata.put("logicalDelete", formData.getLogicalDelete()); //雪花 columndata.put("snowflake", formData.getPrimaryKeyPolicy() == 1); List businessKeyList = formData.getBusinessKeyList() != null ? Arrays.asList(formData.getBusinessKeyList()) : new ArrayList<>(); List businessKeyFields = mastTableHandle.stream().filter(t -> businessKeyList.contains(t.getVModel())).collect(Collectors.toList()); columndata.put("useBusinessKey", formData.isUseBusinessKey() && CollectionUtils.isNotEmpty(businessKeyList)); columndata.put("businessKeyList", businessKeyFields); columndata.put("businessKeyTip", formData.getBusinessKeyTip()); } return columndata; } /** * 获取列表传递参数 * * @param generateParamModel * @return * @throws Exception */ private void getListColumndata(GenerateParamModel generateParamModel, Map listMap) throws Exception { VisualdevEntity entity = generateParamModel.getEntity(); //tableJson List tableModelList = generateParamModel.getTableModelList(); //主表 TableModel mainTable = tableModelList.stream().filter(t -> t.getTypeId().equals("1")).findFirst().orElse(null); //表别名 Map tableRenames = generateParamModel.getTableAliseMap(); List formAllModel = generateParamModel.getFormAllModel(); //主表数据 List mast = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //子表数据 List table = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //副表数据 List mastTable = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); List subTableName = new ArrayList<>(); for (FormAllModel allModel : table) { FormColumnTableModel childList = allModel.getChildList(); if (childList != null) { subTableName.add(childList.getTableName()); } } //子表集合 List childTableNameList = new ArrayList<>(); //全部表 List allTableNameList = new ArrayList<>(); for (TableModel tableModel : tableModelList) { TableModel Model = new TableModel(); Model.setInitName(tableModel.getTable()); Model.setTable(tableRenames.get(tableModel.getTable()).getAliasName()); Model.setFields(tableModel.getFields()); if (tableModel.getTable().equals(mainTable.getTable())) { Model.setTableTag("main"); } else { Model.setTableField(DataControlUtils.captureName(tableModel.getTableField())); Model.setRelationField(DataControlUtils.captureName(tableModel.getRelationField())); Model.setTableTag(subTableName.contains(tableModel.getTable()) ? "sub" : "sub-jnpf"); } allTableNameList.add(Model); if ("0".equals(tableModel.getTypeId())) { childTableNameList.add(Model); } } //子表(tableField,tableName)->tablefield1->realname Map childKeyTableNameMap = new HashMap<>(8); table.stream().forEach(t -> childKeyTableNameMap.put(t.getChildList().getTableModel(), t.getChildList().getTableName())); TableModel mainTableModel = tableModelList.stream().filter(t -> t.getTypeId().equals("1")).findFirst().orElse(null); //主表的字段 if (mainTableModel == null || CollectionUtils.isEmpty(mainTableModel.getFields())) { throw new SQLException(MsgCode.COD001.get()); } //columnTempJson ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(entity.getColumnData(), ColumnDataModel.class); //app 列表对象 ColumnDataModel appColumnDataModel = JsonUtil.getJsonToBean(entity.getAppColumnData(), ColumnDataModel.class); //按钮 List btnPcList = JsonUtil.getJsonToList(columnDataModel.getBtnsList(), BtnData.class); List columnBtnPcList = JsonUtil.getJsonToList(columnDataModel.getColumnBtnsList(), BtnData.class); List btnAppList = JsonUtil.getJsonToList(appColumnDataModel.getBtnsList(), BtnData.class); List columnBtnAppList = JsonUtil.getJsonToList(appColumnDataModel.getColumnBtnsList(), BtnData.class); //pc和app按钮整合生成后端接口 List btnDataList = JsonUtil.getJsonToList(columnDataModel.getBtnsList(), BtnData.class); btnDataList.stream().forEach(a -> btnAppList.stream().forEach(b -> { if (a.getValue().equals(b.getValue())) if (b.isShow()) a.setShow(true); })); List columnBtnDataList = JsonUtil.getJsonToList(columnDataModel.getColumnBtnsList(), BtnData.class); columnBtnDataList.stream().forEach(a -> columnBtnAppList.stream().forEach(b -> { if (a.getValue().equals(b.getValue())) if (b.isShow()) a.setShow(true); })); //以下----pc端前端按钮判断 ---- 是否有导入按钮--webtype==2开启列表 boolean hasUploadBtn = Objects.equals(entity.getWebType(), 2) && btnPcList.stream().anyMatch(btn -> btn.getValue().equals("upload") && btn.isShow()); boolean hasDownloadBtn = Objects.equals(entity.getWebType(), 2) && btnPcList.stream().anyMatch(btn -> btn.getValue().equals("download") && btn.isShow()); boolean hasPrintBtn = Objects.equals(entity.getWebType(), 2) && btnPcList.stream().anyMatch(btn -> btn.getValue().equals("batchPrint") && btn.isShow()); boolean hasRemoveBtn = Objects.equals(entity.getWebType(), 2) && btnPcList.stream().anyMatch(btn -> btn.getValue().equals("batchRemove") && btn.isShow()); //列表和查询 List columnList = JsonUtil.getJsonToList(columnDataModel.getColumnList(), ColumnListField.class); List searchList = JsonUtil.getJsonToList(columnDataModel.getSearchList(), SearchTypeModel.class); List columnAppList = JsonUtil.getJsonToList(appColumnDataModel.getColumnList(), ColumnListField.class); List searchAppList = JsonUtil.getJsonToList(appColumnDataModel.getSearchList(), SearchTypeModel.class); //-----------------------------------------------------search start--------------------------------------- //列表全字段 List columnListAll = new ArrayList<>(columnList); List cLaArr = columnListAll.stream().map(ColumnListField::getProp).collect(Collectors.toList()); columnAppList.stream().forEach(t -> { if (!cLaArr.contains(t.getProp())) { columnListAll.add(t); cLaArr.add(t.getProp()); } }); //添加左侧树查询字段 addTreeSearchField(mainTableModel, columnDataModel, searchList); addTreeSearchField(mainTableModel, appColumnDataModel, searchAppList); //查询全字段 List searchListAll = new ArrayList<>(searchList); List cSaArr = searchListAll.stream().map(SearchTypeModel::getId).collect(Collectors.toList()); searchAppList.stream().forEach(t -> { if (!cSaArr.contains(t.getId())) { searchListAll.add(t); cSaArr.add(t.getId()); } }); //查询字段转换 List groupModels = getListSearchGroupModels(tableModelList, mainTable, tableRenames, childKeyTableNameMap, mainTableModel, searchList); List groupAppModels = getListSearchGroupModels(tableModelList, mainTable, tableRenames, childKeyTableNameMap, mainTableModel, searchAppList); List groupAllModels = getListSearchGroupModels(tableModelList, mainTable, tableRenames, childKeyTableNameMap, mainTableModel, searchListAll); //判断是否有关键词搜索 boolean keywordModels = searchList.stream().filter(t -> t.getIsKeyword() != null && t.getIsKeyword()).collect(Collectors.toList()).size() > 0; boolean keywordAppModels = searchAppList.stream().filter(t -> t.getIsKeyword() != null && t.getIsKeyword()).collect(Collectors.toList()).size() > 0; //-----------------------------------------------------search enddd--------------------------------------- //权限 AuthorityModel authority = new AuthorityModel(); BeanUtil.copyProperties(columnDataModel, authority); //导入字段 List> allUploadTemplates = new ArrayList<>(); boolean importHasChildren = false; String importType = "1"; UploaderTemplateModel uploaderTemplateModel = JsonUtil.getJsonToBean(columnDataModel.getUploaderTemplateJson(), UploaderTemplateModel.class); if (hasUploadBtn && uploaderTemplateModel != null && uploaderTemplateModel.getSelectKey() != null) { importType = uploaderTemplateModel.getDataType(); List selectKey = uploaderTemplateModel.getSelectKey(); Map> childMap = new HashMap<>(); //判断是否存在子表的导入导出 for (String item : selectKey) { if (item.toLowerCase().contains(JnpfKeyConsts.CHILD_TABLE_PREFIX)) { importHasChildren = true; String[] split = item.split("-"); if (childMap.get(split[0]) == null) { List keys = new ArrayList<>(); keys.add(split[1]); childMap.put(split[0], keys); } else { List keys = childMap.get(split[0]); keys.add(split[1]); childMap.replace(split[0], keys); } } else { //主表字段 for (FormAllModel fam : mast) { FieLdsModel fieLdsModel = fam.getFormColumnModel().getFieLdsModel(); if (item.equals(fieLdsModel.getVModel())) { Map map = JsonUtil.entityToMap(fieLdsModel); map.put("label", fieLdsModel.getConfig().getLabel()); allUploadTemplates.add(map); } } //副表字段 for (FormAllModel fam : mastTable) { FieLdsModel fieLdsModel = fam.getFormMastTableModel().getMastTable().getFieLdsModel(); if (item.equals(fieLdsModel.getVModel())) { Map map = JsonUtil.entityToMap(fieLdsModel); map.put("label", fieLdsModel.getConfig().getLabel()); allUploadTemplates.add(map); } } } } for (FormAllModel fam : table) { FormColumnTableModel child = fam.getChildList(); FormColumnTableModel childRes = new FormColumnTableModel(); BeanUtil.copyProperties(child, childRes); String childClassName = DataControlUtils.captureName(tableRenames.get(childRes.getTableName()).getAliasName()); //子表别名 childRes.setAliasClassName(childClassName); childRes.setAliasUpName(DataControlUtils.captureName(childClassName)); childRes.setAliasLowName(DataControlUtils.initialLowercase(childClassName)); String tableModel = child.getTableModel(); List childList1 = child.getChildList(); //获取该子表的所有需要导入字段 List keys = childMap.get(tableModel) != null ? childMap.get(tableModel) : Collections.EMPTY_LIST; List collect = childList1.stream().filter(t -> keys.contains(t.getFieLdsModel().getVModel())).collect(Collectors.toList()); childRes.setChildList(collect); Map childFilesMap = JsonUtil.entityToMap(childRes); childFilesMap.put("vModel", childRes.getTableModel()); //添加整个子表 allUploadTemplates.add(childFilesMap); } } //导入重复字段,需要标记(子表也以label判断重复) Set set = new HashSet<>(); List nameAgain = new ArrayList<>(); for (Map f : allUploadTemplates) { if (!set.add(String.valueOf(f.get("label")))) { nameAgain.add(String.valueOf(f.get("vModel"))); } } //树形列表参数 if (Objects.equals(columnDataModel.getType(), 5)) { columnDataModel.setHasPage(false); } String parentField = StringUtil.isNotEmpty(columnDataModel.getParentField()) ? columnDataModel.getParentField() : ""; if (StringUtil.isNotEmpty(parentField)) { parentField = parentField.substring(0, 1).toUpperCase() + parentField.substring(1); } String subField = StringUtil.isNotEmpty(columnDataModel.getSubField()) ? columnDataModel.getSubField() : ""; if (StringUtil.isNotEmpty(subField)) { subField = subField.substring(0, 1).toUpperCase() + subField.substring(1); } //导出字段属性转换 List listOptions = GenerateCommon.getExpotColumn(columnList); //++++++++++++++++++++++++++++主副子通用参数++++++++++++++++++++++++++/ listMap.put("hasPage", columnDataModel.getHasPage()); listMap.put("defaultSidx", columnDataModel.getDefaultSidx()); listMap.put("sort", columnDataModel.getSort()); listMap.put("authority", authority); //app pc 数据权限是否开启 listMap.put("pcDataPermisson", columnDataModel.getUseDataPermission()); listMap.put("appDataPermisson", appColumnDataModel.getUseDataPermission()); listMap.put("groupModels", groupModels); listMap.put("groupAppModels", groupAppModels); listMap.put("keywordModels", keywordModels); listMap.put("keywordAppModels", keywordAppModels); listMap.put("childTableNameList", childTableNameList); listMap.put("allTableNameList", allTableNameList); //是否开启高级查询 listMap.put("superQuery", columnDataModel.getHasSuperQuery()); listMap.put("ruleQuery", true); //++++++++++++++++++++++++++++仅主表参数++++++++++++++++++++++++++// if (generateParamModel.isMainTable()) { listMap.put("ruleList", GenerateCommon.swapRuleFields(columnDataModel.getRuleList())); listMap.put("ruleListApp", GenerateCommon.swapRuleFields(appColumnDataModel.getRuleListApp())); listMap.put("columnType", columnDataModel.getType()); listMap.put("columnParentField", columnDataModel.getParentField()); //列表全属性 listMap.put("columnData", JsonUtil.stringToMap(entity.getColumnData())); //列表-pc-app-并集 listMap.put("columnList", columnList); listMap.put("searchList", searchList); listMap.put("columnAppList", columnAppList); listMap.put("searchAppList", searchAppList); listMap.put("columnListAll", columnListAll); listMap.put("searchListAll", searchListAll); //子表样式 listMap.put("childTableStyle", columnDataModel.getChildTableStyle()); //左侧树 listMap.put("leftTreeTable", columnDataModel.getType() == 2); //分组 listMap.put("groupTable", columnDataModel.getType() == 3); listMap.put("groupField", columnDataModel.getGroupField()); //分组外第一个字段 if (columnDataModel.getType() == 3) { String firstField = ""; List collect = columnList.stream().filter(t -> !String.valueOf(t.getProp()).equals(columnDataModel.getGroupField())).collect(Collectors.toList()); List collect1 = collect.stream().filter(t -> "left".equals(t.getFixed())).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(collect)) { if (CollectionUtil.isNotEmpty(collect1)) { firstField = collect1.get(0).getProp(); } else { firstField = collect.get(0).getProp(); } } listMap.put("firstField", firstField); } //行内编辑 listMap.put("lineEdit", columnDataModel.getType() == 4); //树形参数 listMap.put("treeTable", columnDataModel.getType() == 5); //合计 boolean configurationTotal = columnDataModel.isShowSummary(); if (columnDataModel.getType() == 3 || columnDataModel.getType() == 5) { configurationTotal = false; } listMap.put("configurationTotal", configurationTotal); List summaryList = CollectionUtils.isEmpty(columnDataModel.getSummaryField()) ? Collections.EMPTY_LIST : columnDataModel.getSummaryField(); listMap.put("fieldsTotal", JsonUtil.getObjectToString(summaryList)); //按键 listMap.put("btnsList", btnDataList); listMap.put("columnBtnsList", columnBtnDataList); listMap.put("btnPcList", btnPcList); listMap.put("columnBtnPcList", columnBtnPcList); listMap.put("hasDownloadBtn", hasDownloadBtn); listMap.put("hasUploadBtn", hasUploadBtn); listMap.put("hasPrintBtn", hasPrintBtn); listMap.put("hasRemoveBtn", hasRemoveBtn); listMap.put("parentField", parentField); listMap.put("subField", subField); //导入的字段 listMap.put("importFields", allUploadTemplates); List> newUploadTemplates = new ArrayList<>(); Map complexNum = new HashMap<>(); int n = 0; for (Map item : allUploadTemplates) { String vModel = String.valueOf(item.get("vModel")); if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) { boolean flag = false; HeaderModel complexEnt = null; for (HeaderModel headerModel : columnDataModel.getComplexHeaderList()) { if (CollectionUtils.isNotEmpty(headerModel.getChildColumns()) && headerModel.getChildColumns().contains(vModel)) { flag = true; complexEnt = headerModel; } } if (flag) { if (complexNum.get(complexEnt.getId()) != null) { Map complexMap = newUploadTemplates.get(complexNum.get(complexEnt.getId())); List uploadFieldList = (List) complexMap.get("uploadFieldList"); uploadFieldList.add(item); complexMap.put("uploadFieldList", uploadFieldList); } else { complexNum.put(complexEnt.getId(), n); Map complexMap = JsonUtil.entityToMap(complexEnt); List> uploadFieldList = new ArrayList<>(); uploadFieldList.add(item); complexMap.put("uploadFieldList", uploadFieldList); complexMap.put("vModel", "complexHeader"); newUploadTemplates.add(complexMap); n++; } } else { newUploadTemplates.add(item); n++; } } else { newUploadTemplates.add(item); n++; } } listMap.put("importFieldsNew", newUploadTemplates); listMap.put("selectKey", "\"" + String.join("\",\"", uploaderTemplateModel.getSelectKey()) + "\""); //是否有子表-用于判断导入excel表头是否有两行 listMap.put("importHasChildren", importHasChildren); listMap.put("importType", importType); //导入字段名称是否重复 listMap.put("nameAgain", nameAgain); listMap.put("listOptions", listOptions); // 是否存在列表子表数据 listMap.put("hasSub", mastTable.size() > 0 ? true : false); //复杂表头 List complexFieldList = new ArrayList<>(); List> complexHeaderList = new ArrayList<>(); if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) { for (HeaderModel headerModel : columnDataModel.getComplexHeaderList()) { complexFieldList.addAll(headerModel.getChildColumns()); Map map = JsonUtil.entityToMap(headerModel); //复杂表头添加导入字段信息 List> uploadFieldList = new ArrayList<>(); for (Map uploadmap : allUploadTemplates) { if (headerModel.getChildColumns().contains(uploadmap.get("vModel"))) { Map objectObjectHashMap = new HashMap<>(); objectObjectHashMap.put("vModel", uploadmap.get("vModel")); objectObjectHashMap.put("label", uploadmap.get("label")); uploadFieldList.add(objectObjectHashMap); } } map.put("uploadFieldList", uploadFieldList); complexHeaderList.add(map); } } listMap.put("complexHeaderList", JsonUtil.getListToJsonArray(complexHeaderList)); listMap.put("complexFieldList", JsonUtil.getListToJsonArray(complexFieldList)); //标签面板 TabConfigModel tabConfig = columnDataModel.getTabConfig(); if (tabConfig != null && tabConfig.isOn() && StringUtil.isNotEmpty(tabConfig.getRelationField()) && (Objects.equals(columnDataModel.getType(), 1) || Objects.equals(columnDataModel.getType(), 4))) { tabConfig.setCreateTab(true); for (FormAllModel item : formAllModel) { if (FormEnum.mast.getMessage().equals(item.getJnpfKey()) && tabConfig.getRelationField().equals(item.getFormColumnModel().getFieLdsModel().getVModel())) { tabConfig.setFieldsModel(BeanUtil.copyProperties(item.getFormColumnModel().getFieLdsModel(), FieLdsModel.class)); break; } if (FormEnum.mastTable.getMessage().equals(item.getJnpfKey()) && tabConfig.getRelationField().equals(item.getFormMastTableModel().getMastTable().getFieLdsModel().getVModel())) { tabConfig.setFieldsModel(BeanUtil.copyProperties(item.getFormMastTableModel().getMastTable().getFieLdsModel(), FieLdsModel.class)); break; } } } listMap.put("tabConfig", JsonUtil.entityToMap(tabConfig)); } } /** * 添加左侧树查询字段 * * @param mainTableModel * @param columnDataModel * @param searchListAll */ private void addTreeSearchField(TableModel mainTableModel, ColumnDataModel columnDataModel, List searchListAll) { List cSaArr = searchListAll.stream().map(SearchTypeModel::getId).collect(Collectors.toList()); boolean flag = false; //左侧树-若查询列表内没有需要添加到查询字段内 if (Objects.equals(columnDataModel.getType(), 2)) { String treeRelationField = columnDataModel.getTreeRelation(); String treeVmodel = treeRelationField; if (treeVmodel.matches(reg)) { treeVmodel = treeVmodel.split(JnpfConst.SIDE_MARK)[1]; } else if (treeVmodel.toLowerCase().startsWith(JnpfKeyConsts.CHILD_TABLE_PREFIX)) { treeVmodel = treeVmodel.split("-")[1]; } if (!cSaArr.contains(treeRelationField)) { SearchTypeModel searchTypeModel = new SearchTypeModel(); searchTypeModel.setId(treeRelationField); searchTypeModel.setVModel(treeVmodel); searchTypeModel.setSearchType(2); if (columnDataModel.getTreeDataSource().equals("organize") || columnDataModel.getTreeDataSource().equals("formField")) { searchTypeModel.setJnpfKey(JnpfKeyConsts.COMSELECT); searchTypeModel.setSearchType(1); } searchTypeModel.setLabel("tree"); searchTypeModel.setTableName(mainTableModel.getTable()); searchListAll.add(searchTypeModel); cSaArr.add(searchTypeModel.getId()); } } //列表标签面板字段添加---目前标签字段只能下拉单选和单选框。代码匹配用等于 if (Objects.equals(columnDataModel.getType(), 1) || Objects.equals(columnDataModel.getType(), 4) || columnDataModel.getType() == null) { TabConfigModel tabConfig = columnDataModel.getTabConfig(); if (tabConfig != null && tabConfig.isOn() && StringUtil.isNotEmpty(tabConfig.getRelationField()) && !cSaArr.contains(tabConfig.getRelationField())) { String treeVmodel = tabConfig.getRelationField(); if (treeVmodel.matches(reg)) { treeVmodel = treeVmodel.split(JnpfConst.SIDE_MARK)[1]; } else if (treeVmodel.toLowerCase().startsWith(JnpfKeyConsts.CHILD_TABLE_PREFIX)) { treeVmodel = treeVmodel.split("-")[1]; } SearchTypeModel searchTypeModel = new SearchTypeModel(); searchTypeModel.setId(tabConfig.getRelationField()); searchTypeModel.setVModel(treeVmodel); searchTypeModel.setSearchType(1); searchTypeModel.setLabel("标签面板字段"); searchTypeModel.setTableName(mainTableModel.getTable()); searchListAll.add(searchTypeModel); cSaArr.add(searchTypeModel.getId()); } } } /** * 查询字段配置调整 * * @param tableModelList * @param mainTable * @param tableRenames * @param childKeyTableNameMap * @param mainTableModel * @param searchListAll * @return */ private List getListSearchGroupModels(List tableModelList, TableModel mainTable, Map tableRenames, Map childKeyTableNameMap, TableModel mainTableModel, List searchListAll) { List groupModels = new ArrayList<>(); List rangeToLike = new ArrayList() {{ add(JnpfKeyConsts.COM_INPUT); add(JnpfKeyConsts.TEXTAREA); }}; //查询全字段-转换--pagenation-字段不用替换了 searchListAll.stream().forEach(t -> { t.setId(t.getId().replace("-", "_")); //单行和多行范围查询转模糊 if (Objects.equals(t.getSearchType(), 3) && rangeToLike.contains(t.getConfig().getJnpfKey())) { t.setSearchType(2); } }); if (searchListAll.size() > 0) { searchListAll.stream().forEach(sl -> { String fieldName = sl.getId(); String tableName; if (fieldName.toLowerCase().startsWith(JnpfKeyConsts.CHILD_TABLE_PREFIX)) { String tableModelName = fieldName.split("_")[0]; tableName = childKeyTableNameMap.get(tableModelName); } else if (fieldName.matches(reg)) { String[] split = fieldName.split(JnpfConst.SIDE_MARK); tableName = split[0].substring(5); } else { tableName = mainTable.getTable(); } AliasModel aliasModel = tableRenames.get(tableName); Map fieldsMap = aliasModel.getFieldsMap(); sl.setTableName(tableName); sl.setTableAliasName(aliasModel.getAliasName()); if (fieldName.matches(reg)) { String[] split = fieldName.split(JnpfConst.SIDE_MARK); fieldName = fieldsMap.get(split[1]); } else { fieldName = fieldsMap.get(fieldName); } //字段别名:副表字段拼接jnpf_xxx_jnpf_xxx sl.setAfterVModel(fieldName); }); //副表--普通查询放回主表 Map> collect = searchListAll.stream().filter(s -> s.getId().matches(reg)).collect(Collectors.groupingBy(t -> t.getTableName())); groupModels = collect.entrySet().stream().map(c -> { ListSearchGroupModel groupModel = new ListSearchGroupModel(); groupModel.setModelName(tableRenames.get(c.getKey()).getAliasName()); groupModel.setTableName(c.getKey()); TableModel tableModel = tableModelList.stream().filter(t -> t.getTable().equalsIgnoreCase(c.getKey())).findFirst().orElse(null); groupModel.setForeignKey(tableModel.getTableField()); groupModel.setMainKey(tableModel.getRelationField()); groupModel.setSearchTypeModelList(c.getValue()); return groupModel; } ).collect(Collectors.toList()); //子表--普通查询放回主表 Map> collect1 = searchListAll.stream().filter(s -> s.getId().toLowerCase().contains(JnpfKeyConsts.CHILD_TABLE_PREFIX)) .collect(Collectors.groupingBy(t -> t.getId().substring(0, t.getId().indexOf("_")))); List collect2 = collect1.entrySet().stream().map(c -> { ListSearchGroupModel groupModel = new ListSearchGroupModel(); String tableName = childKeyTableNameMap.get(c.getKey()); Map fieldsMap = tableRenames.get(tableName).getFieldsMap(); groupModel.setModelName(tableRenames.get(tableName).getAliasName()); groupModel.setTableName(tableName); TableModel tableModel = tableModelList.stream().filter(t -> t.getTable().equalsIgnoreCase(tableName)).findFirst().orElse(null); groupModel.setForeignKey(tableModel.getTableField()); groupModel.setMainKey(tableModel.getRelationField()); List value = c.getValue(); value.stream().forEach(v -> { String vmodel = v.getVModel(); v.setTableName(tableRenames.get(tableName).getAliasName()); v.setAfterVModel(fieldsMap.get(vmodel)); }); groupModel.setSearchTypeModelList(value); return groupModel; } ).collect(Collectors.toList()); groupModels.addAll(collect2); //主表字段 ListSearchGroupModel groupModel = new ListSearchGroupModel(); AliasModel mainAlias = tableRenames.get(mainTable.getTable()); List mainSearchList = searchListAll.stream().filter(s -> !s.getId().matches(reg) && !s.getId().toLowerCase().contains(JnpfKeyConsts.CHILD_TABLE_PREFIX)).collect(Collectors.toList()); groupModel.setSearchTypeModelList(mainSearchList); groupModel.setTableName(mainTable.getTable()); groupModel.setModelName(mainAlias.getAliasName()); groupModels.add(groupModel); } return groupModels; } /** * 生成java代码 * * @param generateParamModel * @param codeUtil 模板对象 */ private void setCode(GenerateParamModel generateParamModel, GenerateInterface codeUtil) throws Exception { //组装通用参数 this.setCommonParam(generateParamModel); //获取传递参数 Map columndata = this.getcolumndata(generateParamModel); DbLinkEntity linkEntity = generateParamModel.getLinkEntity(); Template7Model template7Model = generateParamModel.getTemplate7Model(); String table = generateParamModel.getTable(); String path = generateParamModel.getPath(); //代码生成器创建 CustomGenerator mpg = new CustomGenerator(columndata); String cachePath = template7Model.getServiceDirectory() + generateParamModel.getFileName() + File.separator; //当前表别名及字段别名 Map tableAliseMap = generateParamModel.getTableAliseMap(); AliasModel aliasModel = tableAliseMap.get(generateParamModel.getTable()); //表别名 String className = generateParamModel.getClassName(); // 全局配置 GlobalConfig gc = new GlobalConfig.Builder() .outputDir(cachePath) .author(template7Model.getCreateUser()) .dateType(DateType.TIME_PACK) .commentDate("yyyy-MM-dd") .disableOpenDir() .build(); mpg.setGlobalConfig(gc); // 数据源配置 mpg.setDataSource(SourceUtil.dbConfig(TenantDataSourceUtil.getTenantSchema(), linkEntity)); // 策略配置 String tableAlisName = DataControlUtils.captureName(className); StrategyConfig sc = new StrategyConfig.Builder() .addInclude(table) .enableCapitalMode() .enableSkipView() .disableSqlFilter() .entityBuilder() .formatFileName(tableAlisName + GenerateConstant.ENTITY) .enableLombok() .disable() .serviceBuilder() .formatServiceFileName(tableAlisName + GenerateConstant.SERVICE) .formatServiceImplFileName(tableAlisName + GenerateConstant.SERVICEIMPL) .disable() .controllerBuilder() .formatFileName(tableAlisName + GenerateConstant.CONTROLLER) .disable() .mapperBuilder() .formatMapperFileName(tableAlisName + GenerateConstant.MAPPER) .formatXmlFileName(tableAlisName + GenerateConstant.MAPPER) .disable() .build(); mpg.setStrategy(sc); // 包配置 PackageConfig pc = new PackageConfig.Builder() .parent(generateParamModel.getDownloadCodeForm().getModulePackageName()) .build(); mpg.setPackageInfo(pc); boolean autoIncrement = generateParamModel.isAutoIncrement(); // 注入-自定义配置-字段映射 BiConsumer> biConsumer = (tableInfo, objectMap) -> { List fields = tableInfo.getFields(); //字段别名替换 for (int n = 0; n < fields.size(); n++) { TableField field = fields.get(n); // String name = field.getName().toLowerCase(); // name = name.startsWith("f_") ? name.substring(2) : name; // String aliasName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name); //命名规范里面取别名 String str = aliasModel.getFieldsMap().get(field.getName()); String aliasName = StringUtil.isNotEmpty(str) ? str : field.getName(); TableField tableField = field.setPropertyName(aliasName, field.getColumnType()); if (autoIncrement && tableField.isKeyFlag() && !field.getName().equalsIgnoreCase(TableFieldsNameConst.F_TENANT_ID)) { tableField.primaryKey(true); } fields.set(n, tableField); } }; //自定义模板和生成路径 List custFileList = GenerateCommon.getCustomFileList(generateParamModel); InjectionConfig cfg = new InjectionConfig.Builder().beforeOutputFile(biConsumer).customFile(custFileList).build(); mpg.setCfg(cfg); //禁用自带模板 mpg.setTemplate(new TemplateConfig.Builder().disable().build()); // 执行生成 mpg.execute(path); } /** * 生成前端代码 * * @param generateParamModel * @param codeUtil * @throws Exception */ private void generateHtml(GenerateParamModel generateParamModel, GenerateInterface codeUtil) throws Exception { String fileName = generateParamModel.getFileName(); String templatesPath = generateParamModel.getTemplatesPath(); DownloadCodeForm downloadCodeForm = generateParamModel.getDownloadCodeForm(); VisualdevEntity entity = generateParamModel.getEntity(); //tableList List tablesList = generateParamModel.getTableModelList(); Template7Model template7Model = generateParamModel.getTemplate7Model(); List formAllModel = generateParamModel.getFormAllModel(); //自定义包名 String modulePackageName = downloadCodeForm.getModulePackageName(); //formTempJson FormDataModel formData = JsonUtil.getJsonToBean(entity.getFormData(), FormDataModel.class); //取对应表的别名 Map tableRenames = generateParamModel.getTableAliseMap(); Map tableRenameMap = new HashMap<>(); for (String key : tableRenames.keySet()) { tableRenameMap.put(key, tableRenames.get(key).getAliasName()); } Map map = new HashMap<>(16); //form的属性 List mast = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); List table = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); List mastTable = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //子表(tableField,tableName)->tablefield1->realname Map childKeyTableNameMap = new HashMap<>(8); table.stream().forEach(t -> childKeyTableNameMap.put(t.getChildList().getTableModel(), t.getChildList().getTableName())); Map childKeyRenameMap = new HashMap<>(8); for (String key : childKeyTableNameMap.keySet()) { childKeyRenameMap.put(key, tableRenames.get(childKeyTableNameMap.get(key)).getAliasName()); } //主表赋值 for (int i = 0; i < mast.size(); i++) { FieLdsModel fieLdsModel = mast.get(i).getFormColumnModel().getFieLdsModel(); ConfigModel configModel = fieLdsModel.getConfig(); if (configModel.getDefaultValue() instanceof String) { configModel.setValueType("String"); } if (configModel.getDefaultValue() == null) { configModel.setValueType("undefined"); } fieLdsModel.setConfig(configModel); } //副表列表字段赋值 List formChildList = new ArrayList<>(); Map> groupColumnDataMap = mastTable.stream().collect(Collectors.groupingBy(m -> m.getFormMastTableModel().getTable())); //副表model for (String key : groupColumnDataMap.keySet()) { Map objectMap = new HashMap<>(); String childClassName = DataControlUtils.captureName(tableRenames.get(key).getAliasName()); ColumnListDataModel columnListDataModel = new ColumnListDataModel(); columnListDataModel.setModelName(childClassName); columnListDataModel.setModelUpName(DataControlUtils.captureName(childClassName)); columnListDataModel.setModelLowName(DataControlUtils.initialLowercase(childClassName)); List mastAllFields = groupColumnDataMap.get(key); List allModels = new ArrayList<>(); mastAllFields.stream().forEach(m -> { FormAllModel newModel = JsonUtil.getJsonToBean(m, FormAllModel.class); String vModel = newModel.getFormMastTableModel().getField(); newModel.getFormMastTableModel().getMastTable().getFieLdsModel().setVModel(vModel); allModels.add(newModel); }); List fields = allModels.stream().map(m -> m.getFormMastTableModel().getField()).collect(Collectors.toList()); columnListDataModel.setFieldList(fields); columnListDataModel.setFieLdsModelList(allModels.stream().map(al -> al.getFormMastTableModel()).collect(Collectors.toList())); columnListDataModel.setTableName(key); formChildList.add(columnListDataModel); List children = allModels.stream().map(allModel -> allModel.getFormMastTableModel().getMastTable()).collect(Collectors.toList()); FormColumnTableModel formColumnTableModel = new FormColumnTableModel(); formColumnTableModel.setChildList(children); objectMap.put("children", formColumnTableModel); objectMap.put("genInfo", generateParamModel.getTemplate7Model()); objectMap.put("package", modulePackageName); objectMap.put("module", downloadCodeForm.getModule()); objectMap.put("className", childClassName); childrenTemplates(template7Model.getServiceDirectory() + fileName, objectMap, downloadCodeForm, false, codeUtil); } //子表赋值 List> child = new ArrayList<>(); //子表model for (int i = 0; i < table.size(); i++) { FormColumnTableModel childList = table.get(i).getChildList(); Map objectMap = JsonUtil.entityToMap(childList); List tableList = childList.getChildList(); TableFields thisKeyFields = null; TableModel thisTable = tablesList.stream().filter(t -> t.getTable().equals(childList.getTableName())).findFirst().orElse(null); if (thisTable != null) { thisKeyFields = thisTable.getFields().stream().filter(t -> Objects.equals(t.getPrimaryKey(), 1) && !t.getField().equalsIgnoreCase(TableFeildsEnum.TENANTID.getField())).findFirst().orElse(null); } String childClassName = DataControlUtils.captureName(tableRenames.get(childList.getTableName()).getAliasName()); //导入字段属性设置 if (VisualWebTypeEnum.FORM_LIST.getType().equals(entity.getWebType()) && !Objects.equals(entity.getType(), 3)) { ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(entity.getColumnData(), ColumnDataModel.class); if (columnDataModel.getUploaderTemplateJson() != null) { UploaderTemplateModel uploaderTemplateModel = JsonUtil.getJsonToBean(columnDataModel.getUploaderTemplateJson(), UploaderTemplateModel.class); List selectKey = uploaderTemplateModel.getSelectKey() != null ? uploaderTemplateModel.getSelectKey() : Collections.EMPTY_LIST; tableList.stream().forEach(item -> { String childFieldKey = item.getFieLdsModel().getConfig().getParentVModel() + "-" + item.getFieLdsModel().getVModel(); if (selectKey.contains(childFieldKey)) { item.getFieLdsModel().setNeedImport(true); } }); } } //子表别名 childList.setAliasClassName(childClassName); childList.setAliasUpName(DataControlUtils.captureName(childClassName)); childList.setAliasLowName(DataControlUtils.initialLowercase(childClassName)); //去除复杂表头里面的字段(无用信息) List complexHeaderList = childList.getComplexHeaderList(); for (HeaderModel headerModel : complexHeaderList) { headerModel.setChildList(null); } objectMap.put("children", childList); objectMap.put("genInfo", generateParamModel.getTemplate7Model()); objectMap.put("package", modulePackageName); objectMap.put("module", downloadCodeForm.getModule()); objectMap.put("className", childClassName); objectMap.put("thisKeyFields", thisKeyFields);//子表主键字段 //生成xxxmodel 和 xxxlist childrenTemplates(template7Model.getServiceDirectory() + fileName, objectMap, downloadCodeForm, true, codeUtil); for (FormColumnModel columnModel : tableList) { FieLdsModel fieLdsModel = columnModel.getFieLdsModel(); List templateJson = fieLdsModel.getConfig().getTemplateJson(); String json = templateJson.size() > 0 ? JsonUtil.getObjectToString(templateJson) : fieLdsModel.getTemplateJson(); fieLdsModel.setTemplateJson(json); } childList.setChildList(tableList); Map childs = JsonUtil.entityToMap(childList); child.add(childs); } //微服务标识 map.put("isCloud", GenerateCommon.IS_CLOUD); //是列表,是流程判断 if (VisualWebTypeEnum.FORM_LIST.getType().equals(entity.getWebType())) { map.put("isList", true); } if (Objects.equals(downloadCodeForm.getEnableFlow(), 1)) { map.put("isFlow", true); } //界面 map.put("genInfo", generateParamModel.getTemplate7Model()); map.put("modelName", generateParamModel.getClassName()); map.put("package", modulePackageName); map.put("isMain", true); map.put("moduleId", entity.getId()); map.put("module", downloadCodeForm.getModule()); map.put("className", DataControlUtils.captureName(generateParamModel.getClassName())); map.put("templateJsonAll", JSONObject.toJSONString(GenerateCommon.getInterTemplateJson(formAllModel, childKeyRenameMap))); //乐观锁 map.put("snowflake", formData.getPrimaryKeyPolicy() == 1); map.put("version", formData.getConcurrencyLock()); map.put("formRef", formData.getFormRef()); map.put("formModel", formData.getFormModel()); map.put("size", formData.getSize()); map.put("labelPosition", formData.getLabelPosition()); map.put("generalWidth", formData.getGeneralWidth()); map.put("drawerWidth", formData.getDrawerWidth()); map.put("fullScreenWidth", formData.getFullScreenWidth()); map.put("formStyle", formData.getFormStyle()); map.put("labelWidth", formData.getLabelWidth()); map.put("labelSuffix", formData.getLabelSuffix()); map.put("formRules", formData.getFormRules()); map.put("gutter", formData.getGutter()); map.put("disabled", formData.getDisabled()); map.put("span", formData.getSpan()); map.put("formBtns", formData.getFormBtns()); map.put("idGlobal", formData.getIdGlobal()); map.put("popupType", formData.getPopupType()); //表单按钮 map.put("HasCancelBtn", formData.getHasCancelBtn()); map.put("HasConfirmBtn", formData.getHasConfirmBtn()); map.put("HasPrintBtn", formData.getHasPrintBtn()); map.put("cancelButtonText", formData.getCancelButtonText()); map.put("cancelButtonTextI18nCode", formData.getCancelButtonTextI18nCode()); map.put("confirmButtonText", formData.getConfirmButtonText()); map.put("confirmButtonTextI18nCode", formData.getConfirmButtonTextI18nCode()); map.put("printButtonText", formData.getPrintButtonText()); map.put("printButtonTextI18nCode", formData.getPrintButtonTextI18nCode()); map.put("PrintId", JsonUtil.getObjectToString(formData.getPrintId())); map.put("form", formAllModel); map.put("groupColumnDataMap", groupColumnDataMap); map.put("formModelName", entity.getFullName()); map.put("dbLinkId", entity.getDbLinkId()); //共用 map.put("children", child); map.put("fields", mast); map.put("mastTable", mastTable); map.put("columnChildren", formChildList); map.put("pKeyName", generateParamModel.getPKeyName()); map.put("pKeyNameOriginal", generateParamModel.getPKeyNameOriginal()); String modelPathName = generateParamModel.getClassName().toLowerCase(); map.put("modelPathName", modelPathName); map.put("formModelName", entity.getFullName()); map.put("formDataStr", GenerateCommon.objRemoveJson(entity.getFormData())); map.put("tableListStr", JSONObject.toJSONString(tablesList, SerializerFeature.WriteMapNullValue, SerializerFeature.PrettyFormat)); map.put("ableAll", JsonUtil.getListToJsonArray(formAllModel)); map.put("hasConfirmAndAddBtn", formData.getHasConfirmAndAddBtn()); //单据规则 Map billRule = DataControlUtils.getBillRule(formAllModel); map.put("billRule", billRule); boolean hasUploadBtn = false; boolean hasSuperQuery = false; int columnTtype = 0; //webType=2 列表生成 高级查询json,列表json,查询json enableflow启用流程 if (VisualWebTypeEnum.FORM_LIST.getType().equals(entity.getWebType()) && !Objects.equals(entity.getType(), 3)) { //添加行参数 generateParamModel.setMainTable(true); getListColumndata(generateParamModel, map); Map columnDataModel = JsonUtil.stringToMap(entity.getColumnData()); //按钮 List btnDataList = JsonUtil.getJsonToList(columnDataModel.get("btnsList"), BtnData.class); hasUploadBtn = btnDataList.stream().anyMatch(btn -> btn.getValue().equals("upload")); //是否开启高级查询 hasSuperQuery = (boolean) columnDataModel.get("hasSuperQuery"); columnTtype = (int) columnDataModel.get("type"); //最外层zip包路径名称 String zipName = template7Model.getServiceDirectory() + fileName; //生成文件夹 String htmlTSPath = XSSEscape.escapePath(zipName + File.separator + "html" + File.separator + "web" + File.separator + modelPathName + File.separator + "helper"); File htmlJSfile = new File(htmlTSPath); if (!htmlJSfile.exists() && !"form".equals(downloadCodeForm.getModule())) { htmlJSfile.mkdirs(); } String superSqJsPath = htmlTSPath + File.separator + "superQueryJson.ts"; String data = GenerateCommon.simplifyJson(columnDataModel.get("columnOptions"), columnTtype, 3); SuperQueryUtil.CreateJsFile(data, superSqJsPath, "superQueryJson"); String colData = GenerateCommon.simplifyJson(columnDataModel.get("columnList"), columnTtype, 1); String colListJsPath = htmlTSPath + File.separator + "columnList.ts"; SuperQueryUtil.CreateJsFile(colData, colListJsPath, "columnList"); String searchData = GenerateCommon.simplifyJson(columnDataModel.get("searchList"), columnTtype, 2); String searchListJsPath = htmlTSPath + File.separator + "searchList.ts"; SuperQueryUtil.CreateJsFile(searchData, searchListJsPath, "searchList"); //生成复杂表头对象 GenerateCommon.createComplexHeaderExcelVo(zipName, generateParamModel, entity, downloadCodeForm, map); } //代码生成json内容 Map paramConst = new LinkedHashMap<>(); paramConst.put("dbLinkId", entity.getDbLinkId()); paramConst.put("primaryKeyPolicy", formData.getPrimaryKeyPolicy()); paramConst.put("logicalDelete", formData.getLogicalDelete()); if (map.containsKey("columnType")) { paramConst.put("columnType", map.get("columnType")); paramConst.put("columnParentField", map.get("columnParentField")); } paramConst.putAll(billRule); //分组字段管理 if (map.containsKey("groupField")) { paramConst.put("groupField", map.get("groupField")); paramConst.put("firstField", map.get("firstField")); } FormDataModel newFormData = JsonUtil.getJsonToBean(GenerateCommon.objRemoveJson(entity.getFormData()), FormDataModel.class); List fieLdsModels = JsonUtil.getJsonToList(newFormData.getFields(), FieLdsModel.class); List fields = new ArrayList<>(); VisualUtils.recursionFields(fieLdsModels, fields); List gfList = JsonUtil.getJsonToList(fields, GenerField.class); paramConst.put("fields", JsonUtil.getListToJsonArray(gfList)); paramConst.put("tableList", JsonUtil.getListToJsonArray(tablesList)); paramConst.put("tableRenames", tableRenameMap); paramConst.put("tableFieldKey", childKeyTableNameMap); if (map.containsKey("ruleList")) { paramConst.put("ruleList", JSONObject.parseObject(map.get("ruleList").toString())); } if (map.containsKey("ruleListApp")) { paramConst.put("ruleListApp", JSONObject.parseObject(map.get("ruleListApp").toString())); } if (map.containsKey("complexHeaderList")) { paramConst.put("complexHeaderList", map.get("complexHeaderList")); } map.put("paramConst", JSONObject.toJSONString(paramConst, SerializerFeature.PrettyFormat)); /** * 生成前端及后端model文件 */ GenerateCommon.htmlTemplates(template7Model.getServiceDirectory() + fileName, map, templatesPath, columnTtype, hasUploadBtn, downloadCodeForm, codeUtil); /** * 生成表单设计json文件 */ VisualdevEntity visualdevEntity = FunctionFormPublicUtil.exportFlowFormJson(entity, generateParamModel); SuperQueryUtil.CreateFlowFormJsonFile(JsonUtil.getObjectToString(visualdevEntity), template7Model.getServiceDirectory() + fileName); } /** * 副子表model * * @param path 路径 * @param object 模板数据 */ private void childrenTemplates(String path, Map object, DownloadCodeForm downloadCodeForm, Boolean isChild, GenerateInterface codeUtil) { //获取模板列表 List templates = codeUtil.getChildTemps(isChild); VelocityContext context = new VelocityContext(); context.put("context", object); for (String templateName : templates) { String className = object.get("className").toString(); String fileNames = GenerateCommon.getFileName(path, templateName, className, downloadCodeForm); GenerateCommon.velocityWriterFile(context, templateName, fileNames); } } /** * app代码生成 * * @param generateParamModel 参数 */ private void generateApp(GenerateParamModel generateParamModel) throws Exception { VisualdevEntity entity = generateParamModel.getEntity(); DownloadCodeForm downloadCodeForm = generateParamModel.getDownloadCodeForm(); UserInfo userInfo = generateParamModel.getUserInfo(); String templatesPath = generateParamModel.getTemplatesPath(); String fileName = generateParamModel.getFileName(); DataSourceUtil dataSourceUtil = generateParamModel.getDataSourceUtil(); DbLinkEntity linkEntity = generateParamModel.getLinkEntity(); String column = StringUtil.isNotEmpty(entity.getColumnData()) ? entity.getColumnData() : "{}"; ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(column, ColumnDataModel.class); boolean groupTable = "3".equals(String.valueOf(columnDataModel.getType())); String dataModel = StringUtil.isNotEmpty(entity.getFormData()) ? entity.getFormData() : "{}"; FormDataModel model = JsonUtil.getJsonToBean(dataModel, FormDataModel.class); model.setModule(downloadCodeForm.getModule()); model.setClassName(generateParamModel.getClassName()); model.setAreasName(downloadCodeForm.getModule()); //app信息调整 VisualdevEntity entityCopy = BeanUtil.copyProperties(entity, VisualdevEntity.class); entityCopy.setColumnData(entity.getAppColumnData()); AppGenModel appGenModel = new AppGenModel(); appGenModel.setEntity(entityCopy); appGenModel.setPKeyName(generateParamModel.getPKeyNameOriginal()); appGenModel.setDownloadCodeForm(downloadCodeForm); appGenModel.setUserInfo(userInfo); appGenModel.setTemplatePath(templatesPath); appGenModel.setFileName(fileName); appGenModel.setLinkEntity(linkEntity); appGenModel.setDataSourceUtil(dataSourceUtil); appGenModel.setGroupTable(groupTable); appGenModel.setType(String.valueOf(columnDataModel.getType())); appGenModel.setModel(model); appGenModel.setTableAliseMap(generateParamModel.getTableAliseMap()); appGenModel.setTemplate7Model(generateParamModel.getTemplate7Model()); AppGenUtil appGenUtil = new AppGenUtil(); appGenUtil.htmlTemplates(appGenModel); } }