Compare commits

..

10 Commits

Author SHA1 Message Date
bb4d29c4c2 调整模板 2022-09-04 15:15:21 +08:00
c403b90bd9 处理问题 2022-06-14 11:36:41 +08:00
2da510fd16 处理代码模板问题 2021-11-05 00:42:19 +08:00
c85899ba9b 修改模板字段 2021-11-01 15:15:33 +08:00
df7442e5bd 新增打包用MANIFEST文件 2021-08-16 16:41:49 +08:00
74802d4a17 处理字段带有富文本页面数据无法加载 2021-08-16 14:47:43 +08:00
538d13e555 gitignore 2021-07-06 20:55:02 +08:00
738db217f6 修复问题 2021-04-07 11:04:09 +08:00
73a3299a2f 文件路径问题 2021-04-04 11:41:54 +08:00
0b79f47cb2 处理生成mapper出现的问题
处理中文乱码问题
2021-04-04 11:35:32 +08:00
21 changed files with 392 additions and 223 deletions

36
.gitignore vendored Normal file
View File

@ -0,0 +1,36 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
.mvn
mvnw
mvnw.cmd
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

12
pom.xml
View File

@ -56,12 +56,24 @@
</dependency> </dependency>
<!-- freemarker end --> <!-- freemarker end -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.7.30</version> <version>1.7.30</version>
</dependency> </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>

View File

@ -19,7 +19,6 @@ import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView; import javafx.scene.control.TableView;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage; import javafx.stage.Stage;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -103,6 +102,7 @@ public class GenerateController implements Initializable {
this.generateService = new GenerateService(fieldTableView); this.generateService = new GenerateService(fieldTableView);
this.fieldService.setTableView(fieldTableView); this.fieldService.setTableView(fieldTableView);
this.fieldService.setTableName(tableVO.getTableName()); this.fieldService.setTableName(tableVO.getTableName());
this.fieldService.setTableNamePrefix(this.tablePrefixTextField.getText());
this.fieldService.showField(); this.fieldService.showField();
} }

View File

@ -1,6 +1,5 @@
package ink.wgink.code.factory.controller; package ink.wgink.code.factory.controller;
import com.sun.javafx.robot.impl.FXRobotHelper;
import ink.wgink.code.factory.utils.MsgUtil; import ink.wgink.code.factory.utils.MsgUtil;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.concurrent.Service; import javafx.concurrent.Service;
@ -9,7 +8,6 @@ import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField; import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.stage.Stage; import javafx.stage.Stage;

View File

@ -12,103 +12,44 @@ package ink.wgink.code.factory.enums;
**/ **/
public enum FormFieldTypeEnum { public enum FormFieldTypeEnum {
/** TEXT("text", "文本"),
* 文本 DATETIME("datetime", "时间戳"),
*/ DATE("date", "日期"),
TEXT("text"), NUMBER("number", "整形"),
/** DOUBLE("double", "双精度"),
* 时间戳 TEXTAREA("textarea", "文本域"),
*/ RICH_TEXT("richText", "富文本"),
DATETIME("datetime"), ID_SELECT("idSelect", "ID 选择"),
/** SELECT("select", "下拉选择"),
* 日期 CHECKBOX("checkbox", "复选"),
*/ STATIC_CHECKBOX("staticCheckbox", "静态复选"),
DATE("date"), RADIO("radio", "单选"),
/** STATIC_RADIO("staticRadio", "静态单选"),
* 整形 SELECT_USER("selectUser", "选择人员"),
*/ SELECT_DEPARTMENT("selectDepartment", "选择部门"),
NUMBER("number"), FILE("file", "文件"),
/** IMAGE("image", "图片"),
* 双精度 VIDEO("video", "视频"),
*/ AUDIO("audio", "音频"),
DOUBLE("double"), CURRENT_USER("currentUser", "当前用户"),
/** CURRENT_DEPARTMENT("currentDepartment", "当前部门"),
* 文本域 CURRENT_ROLE("currentRole", "当前角色"),
*/ CURRENT_GROUP("currentGroup", "当前组"),
TEXTAREA("textarea"), CURRENT_POSITION("currentPosition", "当前职位");
/**
* 富文本
*/
RICH_TEXT("richText"),
/**
* ID 选择
*/
ID_SELECT("idSelect"),
/**
* 下拉选择
*/
SELECT("select"),
/**
* 复选
*/
CHECKBOX("checkbox"),
/**
* 单选
*/
RADIO("radio"),
/**
* 选择人员
*/
SELECT_USER("selectUser"),
/**
* 选择部门
*/
SELECT_DEPARTMENT("selectDepartment"),
/**
* 文件
*/
FILE("file"),
/**
* 图片
*/
IMAGE("image"),
/**
* 视频
*/
VIDEO("video"),
/**
* 音频
*/
AUDIO("audio"),
/**
* 当前用户
*/
CURRENT_USER("currentUser"),
/**
* 当前部门
*/
CURRENT_DEPARTMENT("currentDepartment"),
/**
* 当前角色
*/
CURRENT_ROLE("currentRole"),
/**
* 当前组
*/
CURRENT_GROUP("currentGroup"),
/**
* 当前职位
*/
CURRENT_POSITION("currentPosition");
private String value; private String value;
private String summary;
FormFieldTypeEnum(String value) { FormFieldTypeEnum(String value, String summary) {
this.value = value; this.value = value;
this.summary = summary;
} }
public String getValue() { public String getValue() {
return value == null ? "" : value.trim(); return value == null ? "" : value.trim();
} }
public String getSummary() {
return summary == null ? "" : summary.trim();
}
} }

View File

@ -1,12 +1,9 @@
package ink.wgink.code.factory.factory; package ink.wgink.code.factory.factory;
import com.sun.deploy.uitoolkit.impl.fx.ui.FXUIFactory; import ink.wgink.code.factory.service.FieldService;
import ink.wgink.code.factory.vos.FieldVO; import ink.wgink.code.factory.vos.FieldVO;
import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.CheckBox; import javafx.scene.control.CheckBox;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
import javafx.util.Callback; import javafx.util.Callback;
@ -37,10 +34,33 @@ public class CheckBoxTableCellFactory implements Callback<TableColumn.CellDataFe
public ObservableValue<CheckBox> call(TableColumn.CellDataFeatures<FieldVO, String> param) { public ObservableValue<CheckBox> call(TableColumn.CellDataFeatures<FieldVO, String> param) {
FieldVO fieldVO = param.getValue(); FieldVO fieldVO = param.getValue();
CheckBox checkBox = new CheckBox(); CheckBox checkBox = new CheckBox();
String tableName = param.getValue().getTableName();
String tableNamePrefix = param.getValue().getTableNamePrefix();
if (StringUtils.equals(IS_FORM_SHOW, property)) { if (StringUtils.equals(IS_FORM_SHOW, property)) {
Boolean isFormShow = param.getValue().getFormShow(); Boolean isFormShow = param.getValue().getFormShow();
// 如果是主键
if (StringUtils.equals(String.format("%s_id", tableName.replace(tableNamePrefix, "")), param.getValue().getColumnName())) {
param.getValue().setFormShow(false);
checkBox.setSelected(false);
} else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_CREATOR, param.getValue().getColumnName())) {
param.getValue().setFormShow(false);
checkBox.setSelected(false);
} else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_GMT_CREATE, param.getValue().getColumnName())) {
param.getValue().setFormShow(false);
checkBox.setSelected(false);
} else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_MODIFIER, param.getValue().getColumnName())) {
param.getValue().setFormShow(false);
checkBox.setSelected(false);
} else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_GMT_MODIFIED, param.getValue().getColumnName())) {
param.getValue().setFormShow(false);
checkBox.setSelected(false);
} else if(StringUtils.equals(FieldService.DEFAULT_COLUMN_IS_DELETE, param.getValue().getColumnName())) {
param.getValue().setFormShow(false);
checkBox.setSelected(false);
} else {
checkBox.setSelected(isFormShow == null || !isFormShow ? false : true); checkBox.setSelected(isFormShow == null || !isFormShow ? false : true);
} }
}
if (StringUtils.equals(IS_LIST_SHOW, property)) { if (StringUtils.equals(IS_LIST_SHOW, property)) {
Boolean isListShow = param.getValue().getListShow(); Boolean isListShow = param.getValue().getListShow();
checkBox.setSelected(isListShow == null || !isListShow ? false : true); checkBox.setSelected(isListShow == null || !isListShow ? false : true);

View File

@ -26,12 +26,13 @@ public class ChoiceBoxTableCellFactory implements Callback<TableColumn.CellDataF
private final String property; private final String property;
private ObservableList<String> normalSelect = FXCollections.observableArrayList( private ObservableList<String> normalSelect = FXCollections.observableArrayList(
"", FormFieldTypeEnum.TEXT.getValue(), FormFieldTypeEnum.NUMBER.getValue(), "", FormFieldTypeEnum.TEXT.getValue(), FormFieldTypeEnum.NUMBER.getValue(),
FormFieldTypeEnum.DOUBLE.getValue(), FormFieldTypeEnum.TEXTAREA.getValue(), FormFieldTypeEnum.DOUBLE.getValue(), FormFieldTypeEnum.TEXTAREA.getValue(), FormFieldTypeEnum.RICH_TEXT.getValue(),
FormFieldTypeEnum.STATIC_RADIO.getValue(),
FormFieldTypeEnum.CHECKBOX.getValue(), FormFieldTypeEnum.STATIC_CHECKBOX.getValue(),
FormFieldTypeEnum.SELECT_USER.getValue(), FormFieldTypeEnum.SELECT_DEPARTMENT.getValue(), FormFieldTypeEnum.SELECT_USER.getValue(), FormFieldTypeEnum.SELECT_DEPARTMENT.getValue(),
FormFieldTypeEnum.FILE.getValue(), FormFieldTypeEnum.IMAGE.getValue(), FormFieldTypeEnum.FILE.getValue(), FormFieldTypeEnum.IMAGE.getValue(),
FormFieldTypeEnum.AUDIO.getValue(), FormFieldTypeEnum.VIDEO.getValue(), FormFieldTypeEnum.AUDIO.getValue(), FormFieldTypeEnum.VIDEO.getValue(),
FormFieldTypeEnum.DATETIME.getValue(), FormFieldTypeEnum.DATE.getValue(), FormFieldTypeEnum.DATETIME.getValue(), FormFieldTypeEnum.DATE.getValue()
FormFieldTypeEnum.CHECKBOX.getValue()
); );
private ObservableList<String> singleSelect = FXCollections.observableArrayList( private ObservableList<String> singleSelect = FXCollections.observableArrayList(
"", "",

View File

@ -47,6 +47,7 @@ public class FieldService {
private ObservableList<FieldVO> fields = FXCollections.observableArrayList(); private ObservableList<FieldVO> fields = FXCollections.observableArrayList();
private TableView tableView; private TableView tableView;
private String tableName; private String tableName;
private String tableNamePrefix;
private Stage fieldStage; private Stage fieldStage;
/** /**
@ -114,11 +115,13 @@ public class FieldService {
continue; continue;
} }
FieldVO fieldVO = new FieldVO(); FieldVO fieldVO = new FieldVO();
fieldVO.setTableName(tableName);
fieldVO.setTableNamePrefix(tableNamePrefix);
fieldVO.setRowNumber(fieldIndex); fieldVO.setRowNumber(fieldIndex);
fieldVO.setColumnName(columnName); fieldVO.setColumnName(columnName);
fieldVO.setColumnType(field.get("COLUMN_TYPE").toString()); fieldVO.setColumnType(field.get("COLUMN_TYPE").toString());
fieldVO.setDataType(field.get("DATA_TYPE").toString()); fieldVO.setDataType(field.get("DATA_TYPE").toString());
fieldVO.setCharacterMaximum(field.get("CHARACTER_MAXIMUM_LENGTH") == null ? 0 : Integer.valueOf(field.get("CHARACTER_MAXIMUM_LENGTH").toString())); fieldVO.setCharacterMaximum(field.get("CHARACTER_MAXIMUM_LENGTH") == null ? 0 : Long.valueOf(field.get("CHARACTER_MAXIMUM_LENGTH").toString()));
fieldVO.setNumericPrecision(field.get("NUMERIC_PRECISION") == null ? 0 : Integer.valueOf(field.get("NUMERIC_PRECISION").toString())); fieldVO.setNumericPrecision(field.get("NUMERIC_PRECISION") == null ? 0 : Integer.valueOf(field.get("NUMERIC_PRECISION").toString()));
fieldVO.setNumericScale(field.get("NUMERIC_SCALE") == null ? 0 : Integer.valueOf(field.get("NUMERIC_SCALE").toString())); fieldVO.setNumericScale(field.get("NUMERIC_SCALE") == null ? 0 : Integer.valueOf(field.get("NUMERIC_SCALE").toString()));
fieldVO.setColumnComment(field.get("COLUMN_COMMENT") == null ? "" : field.get("COLUMN_COMMENT").toString()); fieldVO.setColumnComment(field.get("COLUMN_COMMENT") == null ? "" : field.get("COLUMN_COMMENT").toString());
@ -170,6 +173,14 @@ public class FieldService {
this.tableName = tableName; this.tableName = tableName;
} }
public String getTableNamePrefix() {
return tableNamePrefix == null ? "" : tableNamePrefix.trim();
}
public void setTableNamePrefix(String tableNamePrefix) {
this.tableNamePrefix = tableNamePrefix;
}
public void removeField(String columnName) { public void removeField(String columnName) {
new Service<Integer>() { new Service<Integer>() {

View File

@ -1,9 +1,9 @@
package ink.wgink.code.factory.service; package ink.wgink.code.factory.service;
import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration; import freemarker.template.Configuration;
import freemarker.template.Template; import freemarker.template.Template;
import freemarker.template.TemplateException; import freemarker.template.TemplateException;
import ink.wgink.code.factory.enums.FormFieldTypeEnum;
import ink.wgink.code.factory.utils.DateUtil; import ink.wgink.code.factory.utils.DateUtil;
import ink.wgink.code.factory.utils.MsgUtil; import ink.wgink.code.factory.utils.MsgUtil;
import ink.wgink.code.factory.utils.WStringUtil; import ink.wgink.code.factory.utils.WStringUtil;
@ -18,10 +18,7 @@ import javafx.stage.Stage;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.io.File; import java.io.*;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -41,6 +38,7 @@ import java.util.Map;
@Slf4j @Slf4j
public class GenerateService { public class GenerateService {
public static final String UTF_8 = "UTF-8";
private Stage fieldStage; private Stage fieldStage;
private TableView tableView; private TableView tableView;
Configuration freemarkerConfiguration = new Configuration(Configuration.getVersion()); Configuration freemarkerConfiguration = new Configuration(Configuration.getVersion());
@ -53,7 +51,7 @@ public class GenerateService {
// this.freemarkerConfiguration.setTemplateLoader(new ClassTemplateLoader(this.getClass(), "/template")); // this.freemarkerConfiguration.setTemplateLoader(new ClassTemplateLoader(this.getClass(), "/template"));
// 3.加载 jar中的模板 // 3.加载 jar中的模板
this.freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "/template"); this.freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "/template");
this.freemarkerConfiguration.setDefaultEncoding("utf-8"); this.freemarkerConfiguration.setDefaultEncoding(UTF_8);
} }
public void generateCode(TableVO tableVO, GenerateVO generateVO) throws IOException, TemplateException { public void generateCode(TableVO tableVO, GenerateVO generateVO) throws IOException, TemplateException {
@ -68,20 +66,24 @@ public class GenerateService {
String tableFullName = tableVO.getTableName(); String tableFullName = tableVO.getTableName();
String tableNameWithoutPrefix = tableFullName.replaceFirst(generateVO.getTablePrefix(), ""); String tableNameWithoutPrefix = tableFullName.replaceFirst(generateVO.getTablePrefix(), "");
String tableName = WStringUtil.underLine2LowerUpper(tableNameWithoutPrefix); String tableName = WStringUtil.underLine2LowerUpper(tableNameWithoutPrefix);
String underlineTableName = WStringUtil.lowerUpper2UnderLine(tableName);
// 首字母大写驼峰表名 // 首字母大写驼峰表名
String firstUpperTableName = WStringUtil.firstToUpper(tableName); String firstUpperTableName = WStringUtil.firstToUpper(tableName);
// 首字母小写驼峰表明 // 首字母小写驼峰表明
String firstLowerTableName = WStringUtil.firstToLower(tableName); String firstLowerTableName = WStringUtil.firstToLower(tableName);
String lowerTableName = tableNameWithoutPrefix.replaceAll("\\_", "").toLowerCase(); String lowerTableName = tableNameWithoutPrefix.replaceAll("\\_", "").toLowerCase();
String requestMappingName = tableNameWithoutPrefix.replaceAll("\\_", "-").toLowerCase();
Map<String, Object> dataModel = new HashMap<>(16); Map<String, Object> dataModel = new HashMap<>(16);
dataModel.put("context", generateVO.getContext()); dataModel.put("context", generateVO.getContext());
dataModel.put("codePackage", generateVO.getCodePackage()); dataModel.put("codePackage", generateVO.getCodePackage());
dataModel.put("tableNameWithoutPrefix", tableNameWithoutPrefix); dataModel.put("tableNameWithoutPrefix", tableNameWithoutPrefix);
dataModel.put("lowerTableName", lowerTableName); dataModel.put("lowerTableName", lowerTableName);
dataModel.put("requestMappingName", requestMappingName);
dataModel.put("tableName", tableName); dataModel.put("tableName", tableName);
dataModel.put("tableFullName", tableFullName); dataModel.put("tableFullName", tableFullName);
dataModel.put("firstUpperTableName", firstUpperTableName); dataModel.put("firstUpperTableName", firstUpperTableName);
dataModel.put("firstLowerTableName", firstLowerTableName); dataModel.put("firstLowerTableName", firstLowerTableName);
dataModel.put("underlineTableName", underlineTableName);
dataModel.put("tableExplain", tableVO.getTableComment()); dataModel.put("tableExplain", tableVO.getTableComment());
dataModel.put("author", "CodeFactory"); dataModel.put("author", "CodeFactory");
dataModel.put("date", DateUtil.getTime()); dataModel.put("date", DateUtil.getTime());
@ -107,13 +109,13 @@ public class GenerateService {
iDaoCode("/normal/dao/i-dao.ftl", String.format("%s/dao/%s", outFolder, lowerTableName), firstUpperTableName, dataModel); iDaoCode("/normal/dao/i-dao.ftl", String.format("%s/dao/%s", outFolder, lowerTableName), firstUpperTableName, dataModel);
} }
if (generateVO.getHasMySQL()) { if (generateVO.getHasMySQL()) {
mySqlMapperCode("/normal/mapper/mysql-mapper.ftl", String.format("%s/mapper/%s", outFolder, tableName), tableName, dataModel); mySqlMapperCode("/normal/mapper/mysql-mapper.ftl", String.format("%s/mapper/%s", outFolder, requestMappingName), tableName, dataModel);
} }
if (generateVO.getHasHtml()) { if (generateVO.getHasHtml()) {
htmlCode("/normal/page", String.format("%s/static/route/%s", outFolder, tableName), tableName, dataModel); htmlCode("/normal/page", String.format("%s/static/route/%s", outFolder, requestMappingName), tableName, dataModel);
} }
if (generateVO.getHasThymeleaf()) { if (generateVO.getHasThymeleaf()) {
thymeleafCode("/normal/page", String.format("%s/templates/%s", outFolder, tableName), tableName, dataModel); thymeleafCode("/normal/page", String.format("%s/templates/%s", outFolder, requestMappingName), tableName, dataModel);
} }
if (generateVO.getHasRoute()) { if (generateVO.getHasRoute()) {
routeCode("/normal/controller/route-controller.ftl", String.format("%s/controller/route/%s", outFolder, lowerTableName), firstUpperTableName, dataModel); routeCode("/normal/controller/route-controller.ftl", String.format("%s/controller/route/%s", outFolder, lowerTableName), firstUpperTableName, dataModel);
@ -132,16 +134,27 @@ public class GenerateService {
*/ */
private void initFieldList(String tableNameWithoutPrefix, Map<String, Object> dataModel, ObservableList<FieldVO> fields) { private void initFieldList(String tableNameWithoutPrefix, Map<String, Object> dataModel, ObservableList<FieldVO> fields) {
List<Map<String, Object>> fieldList = new ArrayList<>(); List<Map<String, Object>> fieldList = new ArrayList<>();
String idColumn = null;
boolean hasId = false; boolean hasId = false;
boolean idFormShow = false;
boolean hasGmtCreate = false; boolean hasGmtCreate = false;
boolean hasCreator = false; boolean hasCreator = false;
boolean hasGmtModified = false; boolean hasGmtModified = false;
boolean gmtModifiedFormShow = false;
boolean hasModifier = false; boolean hasModifier = false;
boolean modifierFormShow = false;
boolean hasIsDelete = false; boolean hasIsDelete = false;
boolean hasFile = false;
boolean hasImage = false;
boolean hasVideo = false;
boolean hasAudio = false;
boolean hasRichText = false;
for (int i = 0; i < fields.size(); i++) { for (int i = 0; i < fields.size(); i++) {
FieldVO field = fields.get(i); FieldVO field = fields.get(i);
if (!hasId && StringUtils.equals(String.format("%s_id", tableNameWithoutPrefix), field.getColumnName())) { if (!hasId && StringUtils.equals(String.format("%s_id", tableNameWithoutPrefix), field.getColumnName())) {
hasId = true; hasId = true;
idColumn = field.getColumnName();
idFormShow = field.getFormShow();
} }
if (!hasGmtCreate && StringUtils.equals(FieldService.DEFAULT_FIELD_GMT_CREATE, field.getPropertyName())) { if (!hasGmtCreate && StringUtils.equals(FieldService.DEFAULT_FIELD_GMT_CREATE, field.getPropertyName())) {
hasGmtCreate = true; hasGmtCreate = true;
@ -151,13 +164,30 @@ public class GenerateService {
} }
if (!hasGmtModified && StringUtils.equals(FieldService.DEFAULT_FIELD_GMT_MODIFIED, field.getPropertyName())) { if (!hasGmtModified && StringUtils.equals(FieldService.DEFAULT_FIELD_GMT_MODIFIED, field.getPropertyName())) {
hasGmtModified = true; hasGmtModified = true;
gmtModifiedFormShow = field.getFormShow();
} }
if (!hasModifier && StringUtils.equals(FieldService.DEFAULT_FIELD_MODIFIER, field.getPropertyName())) { if (!hasModifier && StringUtils.equals(FieldService.DEFAULT_FIELD_MODIFIER, field.getPropertyName())) {
hasModifier = true; hasModifier = true;
modifierFormShow = field.getFormShow();
} }
if (!hasIsDelete && StringUtils.equals(FieldService.DEFAULT_FIELD_IS_DELETE, field.getPropertyName())) { if (!hasIsDelete && StringUtils.equals(FieldService.DEFAULT_FIELD_IS_DELETE, field.getPropertyName())) {
hasIsDelete = true; hasIsDelete = true;
} }
if (!hasFile && StringUtils.equals(FormFieldTypeEnum.FILE.getValue(), field.getFormFieldValue())) {
hasFile = true;
}
if (!hasImage && StringUtils.equals(FormFieldTypeEnum.IMAGE.getValue(), field.getFormFieldValue())) {
hasImage = true;
}
if (!hasVideo && StringUtils.equals(FormFieldTypeEnum.VIDEO.getValue(), field.getFormFieldValue())) {
hasVideo = true;
}
if (!hasAudio && StringUtils.equals(FormFieldTypeEnum.AUDIO.getValue(), field.getFormFieldValue())) {
hasAudio = true;
}
if (!hasRichText && StringUtils.equals(FormFieldTypeEnum.RICH_TEXT.getValue(), field.getFormFieldValue())) {
hasRichText = true;
}
Map<String, Object> fieldMap = new HashMap<>(16); Map<String, Object> fieldMap = new HashMap<>(16);
fieldMap.put("columnName", field.getColumnName()); fieldMap.put("columnName", field.getColumnName());
fieldMap.put("propertyName", field.getPropertyName()); fieldMap.put("propertyName", field.getPropertyName());
@ -176,13 +206,22 @@ public class GenerateService {
fieldMap.put("fieldSplit", fieldSplit); fieldMap.put("fieldSplit", fieldSplit);
fieldList.add(fieldMap); fieldList.add(fieldMap);
} }
dataModel.put("idColumn", idColumn);
dataModel.put("hasId", hasId); dataModel.put("hasId", hasId);
dataModel.put("idFormShow", idFormShow);
dataModel.put("hasGmtCreate", hasGmtCreate); dataModel.put("hasGmtCreate", hasGmtCreate);
dataModel.put("hasCreator", hasCreator); dataModel.put("hasCreator", hasCreator);
dataModel.put("hasGmtModified", hasGmtModified); dataModel.put("hasGmtModified", hasGmtModified);
dataModel.put("gmtModifiedFormShow", gmtModifiedFormShow);
dataModel.put("hasModifier", hasModifier); dataModel.put("hasModifier", hasModifier);
dataModel.put("modifierFormShow", modifierFormShow);
dataModel.put("hasIsDelete", hasIsDelete); dataModel.put("hasIsDelete", hasIsDelete);
dataModel.put("fieldList", fieldList); dataModel.put("fieldList", fieldList);
dataModel.put("hasFile", hasFile);
dataModel.put("hasImage", hasImage);
dataModel.put("hasVideo", hasVideo);
dataModel.put("hasAudio", hasAudio);
dataModel.put("hasRichText", hasRichText);
} }
/** /**
@ -308,7 +347,7 @@ public class GenerateService {
if (!folder.exists()) { if (!folder.exists()) {
folder.mkdirs(); folder.mkdirs();
} }
code(templateFtl, String.format("%s/%s-mapper.xml", outFolder, tableName), dataModel); code(templateFtl, String.format("%s/%s-mapper.xml", outFolder, WStringUtil.lowerUpper2Separator(tableName, "-")), dataModel);
} }
/** /**
@ -455,8 +494,8 @@ public class GenerateService {
* @throws TemplateException * @throws TemplateException
*/ */
private void code(String templateFtl, String outFile, Map<String, Object> dataModel) throws IOException, TemplateException { private void code(String templateFtl, String outFile, Map<String, Object> dataModel) throws IOException, TemplateException {
Template template = freemarkerConfiguration.getTemplate(templateFtl); Template template = freemarkerConfiguration.getTemplate(templateFtl, UTF_8);
Writer out = new FileWriter(outFile); Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), UTF_8));
template.process(dataModel, out); template.process(dataModel, out);
out.close(); out.close();
} }

View File

@ -138,15 +138,31 @@ public class WStringUtil {
* @date 2018年2月28日 下午4:28:45 * @date 2018年2月28日 下午4:28:45
*/ */
public static String lowerUpper2UnderLine(String str) { public static String lowerUpper2UnderLine(String str) {
return lowerUpper2Separator(str, "-");
}
/**
* <p>
* title 驼峰名称转分隔符名称
* </p>
* <p>
* description 驼峰名称转小写名称用分隔符名称
* </p>
*
* @param str
* @param separator
* @return
*/
public static String lowerUpper2Separator(String str, String separator) {
Matcher matcher = LOWER_UPPER_PATTERN.matcher(str); Matcher matcher = LOWER_UPPER_PATTERN.matcher(str);
while (matcher.find()) { while (matcher.find()) {
String group = matcher.group(); String group = matcher.group();
String lower = "_" + group.toLowerCase(); String lower = separator + group.toLowerCase();
str = str.replaceFirst(group, lower); str = str.replaceFirst(group, lower);
matcher = LOWER_UPPER_PATTERN.matcher(str); matcher = LOWER_UPPER_PATTERN.matcher(str);
} }
if (str.startsWith("_")) { if (str.startsWith(separator)) {
str = str.substring(1, str.length()); str = str.substring(1);
} }
return str; return str;
} }
@ -167,7 +183,23 @@ public class WStringUtil {
* @date 2018年2月28日 下午4:49:13 * @date 2018年2月28日 下午4:49:13
*/ */
public static String underLine2LowerUpper(String str) { public static String underLine2LowerUpper(String str) {
String[] strs = str.split("_"); return separator2LowerUpper(str, "_");
}
/**
* <p>
* title 分割符转驼峰式
* </p>
* <p>
* description 分割符转驼峰式
* </p>
*
* @param str 字符串
* @param separator 分隔符
* @return
*/
public static String separator2LowerUpper(String str, String separator) {
String[] strs = str.split(separator);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (int i = 0; i < strs.length; i++) { for (int i = 0; i < strs.length; i++) {
String letter = strs[i].toLowerCase(); String letter = strs[i].toLowerCase();
@ -208,7 +240,29 @@ public class WStringUtil {
String result = underLine2LowerUpper(str); String result = underLine2LowerUpper(str);
if (firstLower) { if (firstLower) {
int first = result.charAt(0) + 32; int first = result.charAt(0) + 32;
result = ((char) first) + result.substring(1, result.length()); result = ((char) first) + result.substring(1);
}
return result;
}
/**
* <p>
* title 分隔符转驼峰式
* </p>
* <p>
* description 分隔符转驼峰式
* </p>
*
* @param str 字符串
* @param separator 分隔符
* @param firstLower 首字母小写
* @return
*/
public static String separator2LowerUpper(String str, String separator, boolean firstLower) {
String result = separator2LowerUpper(str, separator);
if (firstLower) {
int first = result.charAt(0) + 32;
result = ((char) first) + result.substring(1);
} }
return result; return result;
} }

View File

@ -1,6 +1,7 @@
package ink.wgink.code.factory.vos; package ink.wgink.code.factory.vos;
import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleLongProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
/** /**
@ -21,17 +22,19 @@ public class FieldVO {
private SimpleStringProperty columnDefault; private SimpleStringProperty columnDefault;
private String dataType; private String dataType;
private SimpleStringProperty columnType; private SimpleStringProperty columnType;
private Integer characterMaximum; private Long characterMaximum;
private Integer numericPrecision; private Integer numericPrecision;
private Integer numericScale; private Integer numericScale;
private SimpleStringProperty propertyName; private SimpleStringProperty propertyName;
private SimpleStringProperty propertyType; private SimpleStringProperty propertyType;
private SimpleIntegerProperty propertyLength; private SimpleLongProperty propertyLength;
private String formFieldType; private String formFieldType;
private String formFieldValue; private String formFieldValue;
private Boolean isFormShow; private Boolean isFormShow;
private Boolean isListShow; private Boolean isListShow;
private Boolean isNotNull; private Boolean isNotNull;
private String tableName;
private String tableNamePrefix;
public FieldVO() { public FieldVO() {
this.rowNumber = new SimpleIntegerProperty(0); this.rowNumber = new SimpleIntegerProperty(0);
@ -41,7 +44,7 @@ public class FieldVO {
this.columnType = new SimpleStringProperty(); this.columnType = new SimpleStringProperty();
this.propertyName = new SimpleStringProperty(); this.propertyName = new SimpleStringProperty();
this.propertyType = new SimpleStringProperty(); this.propertyType = new SimpleStringProperty();
this.propertyLength = new SimpleIntegerProperty(0); this.propertyLength = new SimpleLongProperty(0);
} }
public int getRowNumber() { public int getRowNumber() {
@ -112,11 +115,11 @@ public class FieldVO {
this.columnType.set(columnType); this.columnType.set(columnType);
} }
public Integer getCharacterMaximum() { public Long getCharacterMaximum() {
return characterMaximum; return characterMaximum;
} }
public void setCharacterMaximum(Integer characterMaximum) { public void setCharacterMaximum(Long characterMaximum) {
this.characterMaximum = characterMaximum; this.characterMaximum = characterMaximum;
} }
@ -160,15 +163,15 @@ public class FieldVO {
this.propertyType.set(propertyType); this.propertyType.set(propertyType);
} }
public int getPropertyLength() { public long getPropertyLength() {
return propertyLength.get(); return propertyLength.get();
} }
public SimpleIntegerProperty propertyLengthProperty() { public SimpleLongProperty propertyLengthProperty() {
return propertyLength; return propertyLength;
} }
public void setPropertyLength(int propertyLength) { public void setPropertyLength(long propertyLength) {
this.propertyLength.set(propertyLength); this.propertyLength.set(propertyLength);
} }
@ -212,44 +215,20 @@ public class FieldVO {
isNotNull = notNull; isNotNull = notNull;
} }
@Override public String getTableName() {
public String toString() { return tableName == null ? "" : tableName.trim();
final StringBuilder sb = new StringBuilder("{");
sb.append("\"rowNumber\":")
.append(rowNumber);
sb.append(",\"columnName\":")
.append(columnName);
sb.append(",\"columnComment\":")
.append(columnComment);
sb.append(",\"columnDefault\":")
.append(columnDefault);
sb.append(",\"dataType\":\"")
.append(dataType).append('\"');
sb.append(",\"columnType\":")
.append(columnType);
sb.append(",\"characterMaximum\":")
.append(characterMaximum);
sb.append(",\"numericPrecision\":")
.append(numericPrecision);
sb.append(",\"numericScale\":")
.append(numericScale);
sb.append(",\"propertyName\":")
.append(propertyName);
sb.append(",\"propertyType\":")
.append(propertyType);
sb.append(",\"propertyLength\":")
.append(propertyLength);
sb.append(",\"formFieldType\":\"")
.append(formFieldType).append('\"');
sb.append(",\"formFieldValue\":\"")
.append(formFieldValue).append('\"');
sb.append(",\"isFormShow\":")
.append(isFormShow);
sb.append(",\"isListShow\":")
.append(isListShow);
sb.append(",\"isNotNull\":")
.append(isNotNull);
sb.append('}');
return sb.toString();
} }
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableNamePrefix() {
return tableNamePrefix == null ? "" : tableNamePrefix.trim();
}
public void setTableNamePrefix(String tableNamePrefix) {
this.tableNamePrefix = tableNamePrefix;
}
} }

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: ink.wgink.code.factory.StartUp

View File

@ -0,0 +1,8 @@
log4j.logger.info=debug
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = info
log4j.appender.info.append=true
# log4j.appender.info.File=/mylog/info.log

View File

@ -28,7 +28,7 @@ import java.util.Map;
**/ **/
@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "${tableExplain}接口") @Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "${tableExplain}接口")
@RestController @RestController
@RequestMapping(ISystemConstant.API_PREFIX + "/${lowerTableName}") @RequestMapping(ISystemConstant.API_PREFIX + "/${requestMappingName}")
public class ${firstUpperTableName}Controller extends DefaultBaseController { public class ${firstUpperTableName}Controller extends DefaultBaseController {
@Autowired @Autowired

View File

@ -28,7 +28,7 @@ import java.util.Map;
**/ **/
@Api(tags = ISystemConstant.API_TAGS_APP_PREFIX + "${tableExplain}接口") @Api(tags = ISystemConstant.API_TAGS_APP_PREFIX + "${tableExplain}接口")
@RestController @RestController
@RequestMapping(ISystemConstant.APP_PREFIX + "/${lowerTableName}") @RequestMapping(ISystemConstant.APP_PREFIX + "/${requestMappingName}")
public class ${firstUpperTableName}AppController extends DefaultBaseController { public class ${firstUpperTableName}AppController extends DefaultBaseController {
@Autowired @Autowired
@ -64,7 +64,7 @@ public class ${firstUpperTableName}AppController extends DefaultBaseController {
@ApiImplicitParam(name = "${firstLowerTableName}Id", value = "${tableExplain}ID", paramType = "path") @ApiImplicitParam(name = "${firstLowerTableName}Id", value = "${tableExplain}ID", paramType = "path")
}) })
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@PutMapping("update${lowerTableName}/{${firstLowerTableName}Id}") @PutMapping("update/{${firstLowerTableName}Id}")
@CheckRequestBodyAnnotation @CheckRequestBodyAnnotation
public SuccessResult update${firstUpperTableName}(@RequestHeader("token") String token, @PathVariable("${firstLowerTableName}Id") String ${firstLowerTableName}Id, @RequestBody ${firstUpperTableName}VO ${firstLowerTableName}VO) { public SuccessResult update${firstUpperTableName}(@RequestHeader("token") String token, @PathVariable("${firstLowerTableName}Id") String ${firstLowerTableName}Id, @RequestBody ${firstUpperTableName}VO ${firstLowerTableName}VO) {
${firstLowerTableName}Service.update(token, ${firstLowerTableName}Id, ${firstLowerTableName}VO); ${firstLowerTableName}Service.update(token, ${firstLowerTableName}Id, ${firstLowerTableName}VO);
@ -103,7 +103,7 @@ public class ${firstUpperTableName}AppController extends DefaultBaseController {
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String") @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String")
}) })
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@GetMapping("listpage${lowerTableName}") @GetMapping("listpage")
public SuccessResultList<List<${firstUpperTableName}DTO>> listPage(@RequestHeader("token") String token, ListPage page) { public SuccessResultList<List<${firstUpperTableName}DTO>> listPage(@RequestHeader("token") String token, ListPage page) {
Map<String, Object> params = requestParams(); Map<String, Object> params = requestParams();
page.setParams(params); page.setParams(params);

View File

@ -28,7 +28,7 @@ import java.util.Map;
**/ **/
@Api(tags = ISystemConstant.API_TAGS_RESOURCE_PREFIX + "${tableExplain}接口") @Api(tags = ISystemConstant.API_TAGS_RESOURCE_PREFIX + "${tableExplain}接口")
@RestController @RestController
@RequestMapping(ISystemConstant.RESOURCE_PREFIX + "/${lowerTableName}") @RequestMapping(ISystemConstant.RESOURCE_PREFIX + "/${requestMappingName}")
public class ${firstUpperTableName}ResourceController extends DefaultBaseController { public class ${firstUpperTableName}ResourceController extends DefaultBaseController {
@Autowired @Autowired

View File

@ -21,22 +21,22 @@ import java.util.Map;
**/ **/
@Api(tags = ISystemConstant.ROUTE_TAGS_PREFIX + "${tableExplain}路由") @Api(tags = ISystemConstant.ROUTE_TAGS_PREFIX + "${tableExplain}路由")
@RestController @RestController
@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/${lowerTableName}") @RequestMapping(ISystemConstant.ROUTE_PREFIX + "/${requestMappingName}")
public class ${firstUpperTableName}RouteController extends DefaultBaseController { public class ${firstUpperTableName}RouteController extends DefaultBaseController {
@GetMapping("save") @GetMapping("save")
public ModelAndView save() { public ModelAndView save() {
return new ModelAndView("${lowerTableName}/save"); return new ModelAndView("${requestMappingName}/save");
} }
@GetMapping("update") @GetMapping("update")
public ModelAndView update() { public ModelAndView update() {
return new ModelAndView("${lowerTableName}/update"); return new ModelAndView("${requestMappingName}/update");
} }
@GetMapping("list") @GetMapping("list")
public ModelAndView list() { public ModelAndView list() {
return new ModelAndView("${lowerTableName}/list"); return new ModelAndView("${requestMappingName}/list");
} }
} }

View File

@ -50,7 +50,7 @@
is_delete = 1 is_delete = 1
WHERE WHERE
<#if hasId> <#if hasId>
${tableName}_id IN ${idColumn} IN
<foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")"> <foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")">
${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"} ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"}
</foreach> </foreach>
@ -66,7 +66,7 @@
${tableFullName} ${tableFullName}
WHERE WHERE
<#if hasId> <#if hasId>
${tableName}_id IN ${idColumn} IN
<foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")"> <foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")">
${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"} ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"}
</foreach> </foreach>
@ -81,7 +81,7 @@
${tableFullName} ${tableFullName}
SET SET
<#list fieldList! as field> <#list fieldList! as field>
<#if field.listShow> <#if field.formShow>
<#if field.formFieldValue == "number" || field.formFieldValue == "double"> <#if field.formFieldValue == "number" || field.formFieldValue == "double">
<if test="${field.propertyName} != null"> <if test="${field.propertyName} != null">
${field.columnName} = ${r"#{"}${field.propertyName}${r"}"}, ${field.columnName} = ${r"#{"}${field.propertyName}${r"}"},
@ -91,26 +91,34 @@
${field.columnName} = ${r"#{"}${field.propertyName}${r"}"}, ${field.columnName} = ${r"#{"}${field.propertyName}${r"}"},
</if> </if>
<#else> <#else>
<#if hasId>
<#if field.columnName != idColumn>
<if test="${field.propertyName} != null and ${field.propertyName} != ''"> <if test="${field.propertyName} != null and ${field.propertyName} != ''">
${field.columnName} = ${r"#{"}${field.propertyName}${r"}"}, ${field.columnName} = ${r"#{"}${field.propertyName}${r"}"},
</if> </if>
</#if> </#if>
<#if hasGmtModified> <#else>
<if test="${field.propertyName} != null and ${field.propertyName} != ''">
${field.columnName} = ${r"#{"}${field.propertyName}${r"}"},
</if>
</#if>
</#if>
</#if>
</#list>
<#if hasGmtModified && !gmtModifiedFormShow>
gmt_modified = ${r"#{gmtModified}"}, gmt_modified = ${r"#{gmtModified}"},
</#if> </#if>
<#if hasModifier> <#if hasModifier && !modifierFormShow>
modifier = ${r"#{modifier}"}, modifier = ${r"#{modifier}"},
</#if> </#if>
</#if>
<#if hasId> <#if hasId>
${tableName}_id = ${tableName}_id ${idColumn} = ${idColumn}
<#else> <#else>
<!-- 填充条件 --> <!-- 填充条件 -->
</#if> </#if>
</#list>
WHERE WHERE
<#if hasId> <#if hasId>
${tableName}_id = ${r"#{"}${firstLowerTableName}${r"Id}"} ${idColumn} = ${r"#{"}${firstLowerTableName}${r"Id}"}
<#else> <#else>
<!-- 添加条件 --> <!-- 添加条件 -->
</#if> </#if>
@ -125,7 +133,7 @@
</#if> </#if>
</#list> </#list>
<#if hasId> <#if hasId>
t1.${tableName}_id t1.${idColumn}
<#else> <#else>
1 1
</#if> </#if>
@ -140,7 +148,7 @@
<#if hasId> <#if hasId>
<if test="${firstLowerTableName}Id != null and ${firstLowerTableName}Id != ''"> <if test="${firstLowerTableName}Id != null and ${firstLowerTableName}Id != ''">
AND AND
t1.${tableName}_id = ${r"#{"}${firstLowerTableName}${r"Id}"} t1.${idColumn} = ${r"#{"}${firstLowerTableName}${r"Id}"}
</if> </if>
<#else> <#else>
<!-- 添加条件 --> <!-- 添加条件 -->
@ -164,7 +172,7 @@
<#if hasId> <#if hasId>
<if test="${firstLowerTableName}Id != null and ${firstLowerTableName}Id != ''"> <if test="${firstLowerTableName}Id != null and ${firstLowerTableName}Id != ''">
AND AND
t1.${tableName}_id = ${r"#{"}${firstLowerTableName}${r"Id}"} t1.${idColumn} = ${r"#{"}${firstLowerTableName}${r"Id}"}
</if> </if>
<#else> <#else>
<!-- 添加条件 --> <!-- 添加条件 -->
@ -188,7 +196,7 @@
<#if hasId> <#if hasId>
<if test="${firstLowerTableName}Id != null and ${firstLowerTableName}Id != ''"> <if test="${firstLowerTableName}Id != null and ${firstLowerTableName}Id != ''">
AND AND
t1.${tableName}_id = ${r"#{"}${firstLowerTableName}${r"Id}"} t1.${idColumn} = ${r"#{"}${firstLowerTableName}${r"Id}"}
</if> </if>
<#else> <#else>
<!-- 添加条件 --> <!-- 添加条件 -->
@ -231,7 +239,7 @@
<#if hasId> <#if hasId>
<if test="${firstLowerTableName}Ids != null and ${firstLowerTableName}Ids.size > 0"> <if test="${firstLowerTableName}Ids != null and ${firstLowerTableName}Ids.size > 0">
AND AND
t1.${tableName}_id IN t1.${idColumn} IN
<foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")"> <foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")">
${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"} ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"}
</foreach> </foreach>
@ -272,7 +280,7 @@
<#if hasId> <#if hasId>
<if test="${firstLowerTableName}Ids != null and ${firstLowerTableName}Ids.size > 0"> <if test="${firstLowerTableName}Ids != null and ${firstLowerTableName}Ids.size > 0">
AND AND
t1.${tableName}_id IN t1.${idColumn} IN
<foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")"> <foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")">
${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"} ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"}
</foreach> </foreach>
@ -313,7 +321,7 @@
<#if hasId> <#if hasId>
<if test="${firstLowerTableName}Ids != null and ${firstLowerTableName}Ids.size > 0"> <if test="${firstLowerTableName}Ids != null and ${firstLowerTableName}Ids.size > 0">
AND AND
t1.${tableName}_id IN t1.${idColumn} IN
<foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")"> <foreach collection="${firstLowerTableName}Ids" index="index" open="(" separator="," close=")">
${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"} ${r"#{"}${firstLowerTableName}${r"Ids[${index}]}"}
</foreach> </foreach>

View File

@ -28,13 +28,14 @@
<div class="layui-card-body"> <div class="layui-card-body">
<div class="test-table-reload-btn" style="margin-bottom: 10px;"> <div class="test-table-reload-btn" style="margin-bottom: 10px;">
<div class="layui-inline"> <div class="layui-inline">
<input type="text" id="keywords" class="layui-input search-item" placeholder="输入关键字"> <input type="text" id="keywords" class="layui-input search-item search-item-width-100" placeholder="输入关键字">
</div>
新增时间
<div class="layui-inline">
<input type="text" id="startTime" class="layui-input search-item search-item-width-100" placeholder="开始时间" readonly>
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
<input type="text" id="startTime" class="layui-input search-item" placeholder="开始时间" readonly> <input type="text" id="endTime" class="layui-input search-item search-item-width-100" placeholder="结束时间" readonly>
</div>
<div class="layui-inline">
<input type="text" id="endTime" class="layui-input search-item" placeholder="结束时间" readonly>
</div> </div>
<button type="button" id="search" class="layui-btn layui-btn-sm"> <button type="button" id="search" class="layui-btn layui-btn-sm">
<i class="fa fa-lg fa-search"></i> 搜索 <i class="fa fa-lg fa-search"></i> 搜索
@ -75,7 +76,7 @@
var laydate = layui.laydate; var laydate = layui.laydate;
var common = layui.common; var common = layui.common;
var resizeTimeout = null; var resizeTimeout = null;
var tableUrl = 'api/${lowerTableName}/listpage'; var tableUrl = 'api/${requestMappingName}/listpage';
// 初始化表格 // 初始化表格
function initTable() { function initTable() {
@ -141,7 +142,6 @@
// 重载表格 // 重载表格
function reloadTable(currentPage) { function reloadTable(currentPage) {
table.reload('dataTable', { table.reload('dataTable', {
url: top.restAjax.path(tableUrl, []),
where: { where: {
keywords: $('#keywords').val(), keywords: $('#keywords').val(),
startTime: $('#startTime').val(), startTime: $('#startTime').val(),
@ -150,7 +150,6 @@
page: { page: {
curr: currentPage curr: currentPage
}, },
height: $win.height() - 90,
}); });
} }
// 初始化日期 // 初始化日期
@ -174,7 +173,7 @@
yes: function (index) { yes: function (index) {
top.dialog.close(index); top.dialog.close(index);
var layIndex; var layIndex;
top.restAjax.delete(top.restAjax.path('api/${lowerTableName}/remove/{ids}', [ids]), {}, null, function (code, data) { top.restAjax.delete(top.restAjax.path('api/${requestMappingName}/remove/{ids}', [ids]), {}, null, function (code, data) {
top.dialog.msg(top.dataMessage.deleteSuccess, {time: 1000}); top.dialog.msg(top.dataMessage.deleteSuccess, {time: 1000});
reloadTable(); reloadTable();
}, function (code, data) { }, function (code, data) {
@ -213,7 +212,7 @@
area: ['100%', '100%'], area: ['100%', '100%'],
shadeClose: true, shadeClose: true,
anim: 2, anim: 2,
content: top.restAjax.path('route/${lowerTableName}/save<#if html>.html</#if>', []), content: top.restAjax.path('route/${requestMappingName}/save<#if html>.html</#if>', []),
end: function() { end: function() {
reloadTable(); reloadTable();
} }
@ -231,7 +230,7 @@
area: ['100%', '100%'], area: ['100%', '100%'],
shadeClose: true, shadeClose: true,
anim: 2, anim: 2,
content: top.restAjax.path('route/${lowerTableName}/update<#if html>.html</#if>?${firstLowerTableName}Id={${firstLowerTableName}Id}', [checkDatas[0].${firstLowerTableName}Id]), content: top.restAjax.path('route/${requestMappingName}/update<#if html>.html</#if>?${firstLowerTableName}Id={${firstLowerTableName}Id}', [checkDatas[0].${firstLowerTableName}Id]),
end: function() { end: function() {
reloadTable(); reloadTable();
} }

View File

@ -19,7 +19,9 @@
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/> <link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all"> <link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all"> <link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<#if hasImage>
<link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css"> <link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css">
</#if>
</head> </head>
<body> <body>
<div class="layui-fluid layui-anim layui-anim-fadein"> <div class="layui-fluid layui-anim layui-anim-fadein">
@ -81,6 +83,13 @@
{{# } }} {{# } }}
</select> </select>
</script> </script>
</div>
<#elseif field.formFieldValue == "staticCheckbox">
<div class="layui-form-item" pane>
<label class="layui-form-label">${field.columnComment}</label>
<div class="layui-input-block layui-form" lay-filter="${field.propertyName}CheckboxTemplateBox">
<input type="checkbox" name="${field.propertyName}" value="">
</div>
</div> </div>
<#elseif field.formFieldValue == "checkbox"> <#elseif field.formFieldValue == "checkbox">
<div class="layui-form-item" pane> <div class="layui-form-item" pane>
@ -91,6 +100,13 @@
<input type="checkbox" name="${field.propertyName}[{{item.selectId}}]" value="{{item.selectId}}" title="{{item.selectName}}"> <input type="checkbox" name="${field.propertyName}[{{item.selectId}}]" value="{{item.selectId}}" title="{{item.selectName}}">
{{# } }} {{# } }}
</script> </script>
</div>
<#elseif field.formFieldValue == "staticRadio">
<div class="layui-form-item" pane>
<label class="layui-form-label">${field.columnComment}</label>
<div class="layui-input-block layui-form">
<input type="radio" name="${field.propertyName}" value="">
</div>
</div> </div>
<#elseif field.formFieldValue == "radio"> <#elseif field.formFieldValue == "radio">
<div class="layui-form-item" pane> <div class="layui-form-item" pane>
@ -281,28 +297,39 @@
</div> </div>
</div> </div>
</div> </div>
<#if hasRichText>
<script src="assets/js/vendor/wangEditor/wangEditor.min.js"></script> <script src="assets/js/vendor/wangEditor/wangEditor.min.js"></script>
</#if>
<#if hasVideo>
<script src="assets/js/vendor/ckplayer/ckplayer/ckplayer.js"></script> <script src="assets/js/vendor/ckplayer/ckplayer/ckplayer.js"></script>
</#if>
<#if hasImage>
<script src="assets/js/vendor/viewer/viewer.min.js"></script> <script src="assets/js/vendor/viewer/viewer.min.js"></script>
</#if>
<script src="assets/layuiadmin/layui/layui.js"></script> <script src="assets/layuiadmin/layui/layui.js"></script>
<script> <script>
layui.config({ layui.config({
base: 'assets/layuiadmin/' //静态资源所在路径 base: 'assets/layuiadmin/' //静态资源所在路径
}).extend({ }).extend({
index: 'lib/index' //主入口模块 index: 'lib/index' //主入口模块
}).use(['index', 'form', 'laydate', 'laytpl'], function(){ }).use(['index', 'form', 'laydate', 'laytpl', 'upload'], function(){
var $ = layui.$; var $ = layui.$;
var form = layui.form; var form = layui.form;
var laytpl = layui.laytpl; var laytpl = layui.laytpl;
var laydate = layui.laydate; var laydate = layui.laydate;
<#if hasRichText>
var wangEditor = window.wangEditor; var wangEditor = window.wangEditor;
var wangEditorObj = {}; var wangEditorObj = {};
</#if>
<#if hasImage>
var viewerObj = {}; var viewerObj = {};
</#if>
function closeBox() { function closeBox() {
parent.layer.close(parent.layer.getFrameIndex(window.name)); parent.layer.close(parent.layer.getFrameIndex(window.name));
} }
<#if hasFile || hasImage>
function refreshDownloadTemplet(fileName, file) { function refreshDownloadTemplet(fileName, file) {
var dataRander = {}; var dataRander = {};
dataRander[fileName] = file; dataRander[fileName] = file;
@ -337,7 +364,9 @@
top.dialog.msg(data.msg); top.dialog.msg(data.msg);
}); });
} }
</#if>
<#if hasVideo>
// 初始化视频 // 初始化视频
function initVideo(fileName, data) { function initVideo(fileName, data) {
for(var i = 0, item; item = data[i++];) { for(var i = 0, item; item = data[i++];) {
@ -352,6 +381,7 @@
}); });
} }
} }
</#if>
<#list fieldList! as field> <#list fieldList! as field>
<#if field.formShow> <#if field.formShow>
@ -710,7 +740,7 @@
</#if> </#if>
</#if> </#if>
</#list> </#list>
top.restAjax.post(top.restAjax.path('api/${lowerTableName}/save', []), formData.field, null, function(code, data) { top.restAjax.post(top.restAjax.path('api/${requestMappingName}/save', []), formData.field, null, function(code, data) {
var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, { var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, {
time: 0, time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no], btn: [top.dataMessage.button.yes, top.dataMessage.button.no],

View File

@ -19,7 +19,9 @@
<link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/> <link rel="stylesheet" href="assets/fonts/font-awesome/css/font-awesome.css"/>
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all"> <link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all"> <link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
<#if hasImage>
<link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css"> <link rel="stylesheet" type="text/css" href="assets/js/vendor/viewer/viewer.min.css">
</#if>
</head> </head>
<body> <body>
<div class="layui-fluid layui-anim layui-anim-fadein"> <div class="layui-fluid layui-anim layui-anim-fadein">
@ -68,6 +70,13 @@
<div class="layui-input-block"> <div class="layui-input-block">
<div id="${field.propertyName}"></div> <div id="${field.propertyName}"></div>
</div> </div>
</div>
<#elseif field.formFieldValue == "staticSelect">
<div class="layui-form-item" pane>
<label class="layui-form-label">${field.columnComment}</label>
<div class="layui-input-block layui-form" lay-filter="${field.propertyName}CheckboxTemplateBox">
<input type="checkbox" name="${field.propertyName}" value="">
</div>
</div> </div>
<#elseif field.formFieldValue == "select"> <#elseif field.formFieldValue == "select">
<div class="layui-form-item"> <div class="layui-form-item">
@ -91,6 +100,13 @@
<input type="checkbox" name="${field.propertyName}[{{item.selectId}}]" value="{{item.selectId}}" title="{{item.selectName}}"> <input type="checkbox" name="${field.propertyName}[{{item.selectId}}]" value="{{item.selectId}}" title="{{item.selectName}}">
{{# } }} {{# } }}
</script> </script>
</div>
<#elseif field.formFieldValue == "staticRadio">
<div class="layui-form-item" pane>
<label class="layui-form-label">${field.columnComment}</label>
<div class="layui-input-block layui-form">
<input type="radio" name="${field.propertyName}" value="">
</div>
</div> </div>
<#elseif field.formFieldValue == "radio"> <#elseif field.formFieldValue == "radio">
<div class="layui-form-item" pane> <div class="layui-form-item" pane>
@ -281,30 +297,41 @@
</div> </div>
</div> </div>
</div> </div>
<#if hasRichText>
<script src="assets/js/vendor/wangEditor/wangEditor.min.js"></script> <script src="assets/js/vendor/wangEditor/wangEditor.min.js"></script>
</#if>
<#if hasVideo>
<script src="assets/js/vendor/ckplayer/ckplayer/ckplayer.js"></script> <script src="assets/js/vendor/ckplayer/ckplayer/ckplayer.js"></script>
</#if>
<#if hasImage>
<script src="assets/js/vendor/viewer/viewer.min.js"></script> <script src="assets/js/vendor/viewer/viewer.min.js"></script>
</#if>
<script src="assets/layuiadmin/layui/layui.js"></script> <script src="assets/layuiadmin/layui/layui.js"></script>
<script> <script>
layui.config({ layui.config({
base: 'assets/layuiadmin/' //静态资源所在路径 base: 'assets/layuiadmin/' //静态资源所在路径
}).extend({ }).extend({
index: 'lib/index' //主入口模块 index: 'lib/index' //主入口模块
}).use(['index', 'form', 'laydate', 'laytpl'], function(){ }).use(['index', 'form', 'laydate', 'laytpl', 'upload'], function(){
var $ = layui.$; var $ = layui.$;
var form = layui.form; var form = layui.form;
var laytpl = layui.laytpl; var laytpl = layui.laytpl;
var laydate = layui.laydate; var laydate = layui.laydate;
var ${firstLowerTableName}Id = top.restAjax.params(window.location.href).${firstLowerTableName}Id; var ${firstLowerTableName}Id = top.restAjax.params(window.location.href).${firstLowerTableName}Id;
<#if hasRichText>
var wangEditor = window.wangEditor; var wangEditor = window.wangEditor;
var wangEditorObj = {}; var wangEditorObj = {};
</#if>
<#if hasImage>
var viewerObj = {}; var viewerObj = {};
</#if>
function closeBox() { function closeBox() {
parent.layer.close(parent.layer.getFrameIndex(window.name)); parent.layer.close(parent.layer.getFrameIndex(window.name));
} }
<#if hasFile || hasImage>
function refreshDownloadTemplet(fileName, file) { function refreshDownloadTemplet(fileName, file) {
var dataRander = {}; var dataRander = {};
dataRander[fileName] = file; dataRander[fileName] = file;
@ -339,7 +366,9 @@
top.dialog.msg(data.msg); top.dialog.msg(data.msg);
}); });
} }
</#if>
<#if hasVideo>
// 初始化视频 // 初始化视频
function initVideo(fileName, data) { function initVideo(fileName, data) {
for(var i = 0, item; item = data[i++];) { for(var i = 0, item; item = data[i++];) {
@ -354,6 +383,7 @@
}); });
} }
} }
</#if>
<#list fieldList! as field> <#list fieldList! as field>
<#if field.formShow> <#if field.formShow>
@ -689,7 +719,7 @@
// 初始化内容 // 初始化内容
function initData() { function initData() {
var loadLayerIndex; var loadLayerIndex;
top.restAjax.get(top.restAjax.path('api/${lowerTableName}/get/{${firstLowerTableName}Id}', [${firstLowerTableName}Id]), {}, null, function(code, data) { top.restAjax.get(top.restAjax.path('api/${requestMappingName}/get/{${firstLowerTableName}Id}', [${firstLowerTableName}Id]), {}, null, function(code, data) {
var dataFormData = {}; var dataFormData = {};
for(var i in data) { for(var i in data) {
dataFormData[i] = data[i] +''; dataFormData[i] = data[i] +'';
@ -741,7 +771,7 @@
</#if> </#if>
</#if> </#if>
</#list> </#list>
top.restAjax.put(top.restAjax.path('api/${lowerTableName}/update/{${firstLowerTableName}Id}', [${firstLowerTableName}Id]), formData.field, null, function(code, data) { top.restAjax.put(top.restAjax.path('api/${requestMappingName}/update/{${firstLowerTableName}Id}', [${firstLowerTableName}Id]), formData.field, null, function(code, data) {
var layerIndex = top.dialog.msg(top.dataMessage.updateSuccess, { var layerIndex = top.dialog.msg(top.dataMessage.updateSuccess, {
time: 0, time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no], btn: [top.dataMessage.button.yes, top.dataMessage.button.no],