From 3c0943d2fa7a219b2d434a4a6120056334afa2d7 Mon Sep 17 00:00:00 2001 From: WenG <450292408@qq.com> Date: Mon, 8 Mar 2021 22:08:59 +0800 Subject: [PATCH] =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E5=91=A2=E6=97=A5?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 13 +++++ .../controller/GenerateController.java | 32 ++++++++++++ .../factory/ButtonTableCellFactory.java | 14 ++++++ .../factory/CheckBoxTableCellFactory.java | 4 ++ .../factory/ChoiceBoxTableCellFactory.java | 15 ++++-- .../factory/RadioButtonTableCellFactory.java | 41 +++++++++++++++ .../code/factory/service/FieldService.java | 16 ++++-- .../code/factory/service/GenerateService.java | 11 ++-- .../ink/wgink/code/factory/vos/FieldVO.java | 50 +++++++++++++++++++ .../wgink/code/factory/vos/GenerateVO.java | 32 ++++++++++++ src/main/resources/route/generate.fxml | 22 ++++---- 11 files changed, 228 insertions(+), 22 deletions(-) create mode 100644 src/main/java/ink/wgink/code/factory/factory/ButtonTableCellFactory.java create mode 100644 src/main/java/ink/wgink/code/factory/factory/RadioButtonTableCellFactory.java create mode 100644 src/main/java/ink/wgink/code/factory/vos/GenerateVO.java diff --git a/pom.xml b/pom.xml index fb561b7..5d4826a 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,19 @@ 2.5.1 + + + org.slf4j + slf4j-api + 1.7.30 + + + + org.projectlombok + lombok + 1.18.16 + compile + diff --git a/src/main/java/ink/wgink/code/factory/controller/GenerateController.java b/src/main/java/ink/wgink/code/factory/controller/GenerateController.java index e0973b3..968a0ff 100644 --- a/src/main/java/ink/wgink/code/factory/controller/GenerateController.java +++ b/src/main/java/ink/wgink/code/factory/controller/GenerateController.java @@ -2,10 +2,15 @@ package ink.wgink.code.factory.controller; import ink.wgink.code.factory.factory.CheckBoxTableCellFactory; import ink.wgink.code.factory.factory.ChoiceBoxTableCellFactory; +import ink.wgink.code.factory.factory.RadioButtonTableCellFactory; import ink.wgink.code.factory.service.FieldService; import ink.wgink.code.factory.service.GenerateService; +import ink.wgink.code.factory.utils.MsgUtil; +import ink.wgink.code.factory.vos.FieldVO; +import ink.wgink.code.factory.vos.GenerateVO; import ink.wgink.code.factory.vos.TableVO; import javafx.collections.ObservableList; +import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.CheckBox; @@ -13,6 +18,7 @@ import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; +import org.apache.commons.lang3.StringUtils; import java.net.URL; import java.util.ResourceBundle; @@ -91,4 +97,30 @@ public class GenerateController implements Initializable { fieldService.showField(); } + @FXML + public void onGenerateClick(ActionEvent actionEvent) { + ObservableList items = fieldTableView.getItems(); + for (FieldVO fieldVO : items) { + if (StringUtils.isBlank(fieldVO.getFormFieldValue())) { + MsgUtil.errorAlert(fieldVO.getColumnName() + "的表单类型不能为空"); + return; + } + } + GenerateVO generateVO = new GenerateVO(); + generateVO.setHasApi(apiCheckBox.isSelected()); + generateVO.setHasApi(appCheckBox.isSelected()); + generateVO.setHasResource(resourceCheckBox.isSelected()); + generateVO.setHasIService(iServiceCheckBox.isSelected()); + generateVO.setHasServiceImpl(serviceImplCheckBox.isSelected()); + generateVO.setHasIDao(iDaoCheckBox.isSelected()); + generateVO.setHasMySQL(mysqlCheckBox.isSelected()); + generateVO.setHasHtml(htmlCheckBox.isSelected()); + generateVO.setHasThymeleaf(thymeleafCheckBox.isSelected()); + generateVO.setHasRoute(routeCheckBox.isSelected()); + generateVO.setTablePrefix(tablePrefixTextField.getText()); + generateVO.setContext(contextTextField.getText()); + generateVO.setCodePackage(packageTextField.getText()); + generateService.generateCode(generateVO); + } + } diff --git a/src/main/java/ink/wgink/code/factory/factory/ButtonTableCellFactory.java b/src/main/java/ink/wgink/code/factory/factory/ButtonTableCellFactory.java new file mode 100644 index 0000000..d7f696d --- /dev/null +++ b/src/main/java/ink/wgink/code/factory/factory/ButtonTableCellFactory.java @@ -0,0 +1,14 @@ +package ink.wgink.code.factory.factory; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: ButtonTableCellFactory + * @Description: 按钮表格 + * @Author: WangGeng + * @Date: 2021/3/8 22:07 + * @Version: 1.0 + **/ +public class ButtonTableCellFactory { +} diff --git a/src/main/java/ink/wgink/code/factory/factory/CheckBoxTableCellFactory.java b/src/main/java/ink/wgink/code/factory/factory/CheckBoxTableCellFactory.java index 1830de2..0444c39 100644 --- a/src/main/java/ink/wgink/code/factory/factory/CheckBoxTableCellFactory.java +++ b/src/main/java/ink/wgink/code/factory/factory/CheckBoxTableCellFactory.java @@ -1,8 +1,11 @@ package ink.wgink.code.factory.factory; +import com.sun.deploy.uitoolkit.impl.fx.ui.FXUIFactory; import ink.wgink.code.factory.vos.FieldVO; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.value.ObservableValue; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; import javafx.scene.control.CheckBox; import javafx.scene.control.TableColumn; import javafx.util.Callback; @@ -22,6 +25,7 @@ public class CheckBoxTableCellFactory implements Callback singleSelect = FXCollections.observableArrayList( "", + FormFieldTypeEnum.TEXT.getValue(), FormFieldTypeEnum.RADIO.getValue(), FormFieldTypeEnum.SELECT.getValue() ); @@ -46,14 +46,21 @@ public class ChoiceBoxTableCellFactory implements Callback> call(TableColumn.CellDataFeatures param) { + FieldVO fieldVO = param.getValue(); ChoiceBox choiceBox = new ChoiceBox(); choiceBox.setPrefWidth(150); - if (StringUtils.equalsIgnoreCase(FormFieldTypeEnum.ID_SELECT.getValue(), param.getValue().getFormFieldType())) { + if (StringUtils.equalsIgnoreCase(FormFieldTypeEnum.ID_SELECT.getValue(), fieldVO.getFormFieldType())) { choiceBox.setItems(singleSelect); } else { + fieldVO.setFormFieldValue(fieldVO.getFormFieldType()); choiceBox.setItems(normalSelect); + choiceBox.getSelectionModel().select(fieldVO.getFormFieldType()); } - choiceBox.getSelectionModel().select(param.getValue().getFormFieldType()); + choiceBox.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + String oldText = (String) oldValue; + String newText = (String) newValue; + fieldVO.setFormFieldValue(newText); + }); return new ReadOnlyObjectWrapper<>(choiceBox); } } diff --git a/src/main/java/ink/wgink/code/factory/factory/RadioButtonTableCellFactory.java b/src/main/java/ink/wgink/code/factory/factory/RadioButtonTableCellFactory.java new file mode 100644 index 0000000..eafd69e --- /dev/null +++ b/src/main/java/ink/wgink/code/factory/factory/RadioButtonTableCellFactory.java @@ -0,0 +1,41 @@ +package ink.wgink.code.factory.factory; + +import ink.wgink.code.factory.vos.FieldVO; +import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.beans.value.ObservableValue; +import javafx.scene.control.RadioButton; +import javafx.scene.control.TableColumn; +import javafx.scene.control.ToggleGroup; +import javafx.util.Callback; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: RadioBoxTableCellFactory + * @Description: 单选框 + * @Author: WangGeng + * @Date: 2021/3/8 21:17 + * @Version: 1.0 + **/ +public class RadioButtonTableCellFactory implements Callback, ObservableValue> { + + public static final String IS_PRIMARY_KEY = "isPrimaryKey"; + public static final String PRIMARY_KEY_SUFFIX = "_id"; + private static final ToggleGroup toggleGroup = new ToggleGroup(); + private final String property; + + public RadioButtonTableCellFactory(String property) { + this.property = property; + } + + @Override + public ObservableValue call(TableColumn.CellDataFeatures param) { + RadioButton radioButton = new RadioButton(); + radioButton.setToggleGroup(toggleGroup); + if (param.getValue().getColumnName().endsWith(PRIMARY_KEY_SUFFIX)) { + radioButton.selectedProperty().set(true); + } + return new ReadOnlyObjectWrapper<>(radioButton); + } +} diff --git a/src/main/java/ink/wgink/code/factory/service/FieldService.java b/src/main/java/ink/wgink/code/factory/service/FieldService.java index 1848df8..635a1f0 100644 --- a/src/main/java/ink/wgink/code/factory/service/FieldService.java +++ b/src/main/java/ink/wgink/code/factory/service/FieldService.java @@ -99,13 +99,20 @@ public class FieldService { protected Integer call() throws Exception { List> tableFields = JdbcManager.getInstance().listTableField(tableName); fieldVOObservableList.clear(); - for (int i = 0; i < tableFields.size(); i++) { - Map field = tableFields.get(i); + int fieldIndex = 1; + for (Map field : tableFields) { System.out.println(field); + String columnName = field.get("COLUMN_NAME").toString(); + if (StringUtils.equals(DEFAULT_FIELD_ID, columnName)) { + continue; + } + if (StringUtils.equals(DEFAULT_FIELD_IS_DELETE, columnName)) { + continue; + } FieldVO fieldVO = new FieldVO(); - fieldVO.setRowNumber(i + 1); - fieldVO.setColumnName(field.get("COLUMN_NAME").toString()); + fieldVO.setRowNumber(fieldIndex); + fieldVO.setColumnName(columnName); fieldVO.setColumnType(field.get("COLUMN_TYPE").toString()); fieldVO.setDataType(field.get("DATA_TYPE").toString()); fieldVO.setCharacterMaximum(field.get("CHARACTER_MAXIMUM") == null ? 0 : Integer.valueOf(field.get("CHARACTER_MAXIMUM").toString())); @@ -118,6 +125,7 @@ public class FieldService { fieldVO.setPropertyType(getPropertyType(fieldVO.getDataType())); fieldVO.setFormFieldType(getFormFieldType(fieldVO.getDataType())); fieldVOObservableList.add(fieldVO); + fieldIndex++; } return 0; } diff --git a/src/main/java/ink/wgink/code/factory/service/GenerateService.java b/src/main/java/ink/wgink/code/factory/service/GenerateService.java index 644569d..730aa0f 100644 --- a/src/main/java/ink/wgink/code/factory/service/GenerateService.java +++ b/src/main/java/ink/wgink/code/factory/service/GenerateService.java @@ -1,10 +1,11 @@ package ink.wgink.code.factory.service; import ink.wgink.code.factory.vos.FieldVO; -import javafx.collections.FXCollections; -import javafx.collections.ObservableArray; +import ink.wgink.code.factory.vos.GenerateVO; import javafx.collections.ObservableList; import javafx.scene.control.TableView; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; /** * When you feel like quitting. Think about why you started @@ -16,14 +17,18 @@ import javafx.scene.control.TableView; * @Date: 2021/3/6 16:11 * @Version: 1.0 **/ +@Slf4j public class GenerateService { private TableView tableView; + private GenerateVO generateVO; public GenerateService(TableView tableView) { this.tableView = tableView; } - public void showField() { + public void generateCode(GenerateVO generateVO) { + ObservableList items = tableView.getItems(); + } } diff --git a/src/main/java/ink/wgink/code/factory/vos/FieldVO.java b/src/main/java/ink/wgink/code/factory/vos/FieldVO.java index fb34e44..3660205 100644 --- a/src/main/java/ink/wgink/code/factory/vos/FieldVO.java +++ b/src/main/java/ink/wgink/code/factory/vos/FieldVO.java @@ -28,6 +28,7 @@ public class FieldVO { private SimpleStringProperty propertyType; private SimpleIntegerProperty propertyLength; private String formFieldType; + private String formFieldValue; private Boolean isFormShow; private Boolean isListShow; private Boolean isNotNull; @@ -179,6 +180,14 @@ public class FieldVO { this.formFieldType = formFieldType; } + public String getFormFieldValue() { + return formFieldValue == null ? "" : formFieldValue.trim(); + } + + public void setFormFieldValue(String formFieldValue) { + this.formFieldValue = formFieldValue; + } + public Boolean getFormShow() { return isFormShow; } @@ -202,4 +211,45 @@ public class FieldVO { public void setNotNull(Boolean notNull) { isNotNull = notNull; } + + @Override + public String toString() { + 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(); + } } diff --git a/src/main/java/ink/wgink/code/factory/vos/GenerateVO.java b/src/main/java/ink/wgink/code/factory/vos/GenerateVO.java new file mode 100644 index 0000000..a8b6f03 --- /dev/null +++ b/src/main/java/ink/wgink/code/factory/vos/GenerateVO.java @@ -0,0 +1,32 @@ +package ink.wgink.code.factory.vos; + +import lombok.Data; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: GenerateVO + * @Description: 生成VO + * @Author: WangGeng + * @Date: 2021/3/8 19:54 + * @Version: 1.0 + **/ +@Data +public class GenerateVO { + + private Boolean hasApi; + private Boolean hasApp; + private Boolean hasResource; + private Boolean hasIService; + private Boolean hasServiceImpl; + private Boolean hasIDao; + private Boolean hasMySQL; + private Boolean hasHtml; + private Boolean hasThymeleaf; + private Boolean hasRoute; + private String tablePrefix; + private String context; + private String codePackage; + +} diff --git a/src/main/resources/route/generate.fxml b/src/main/resources/route/generate.fxml index 26b5172..0719bf1 100644 --- a/src/main/resources/route/generate.fxml +++ b/src/main/resources/route/generate.fxml @@ -20,17 +20,17 @@ - + - + - + @@ -50,12 +50,12 @@ - + - + @@ -75,7 +75,7 @@ - + @@ -92,7 +92,7 @@ - + @@ -115,17 +115,17 @@ - + - + - + @@ -152,7 +152,7 @@ -