refactor(controller): 重构枚举类型相关代码,优化类型转换和显示逻辑

重构枚举类型的处理逻辑,统一使用Vo对象替代Model对象
- 修改ComboBoxUtils初始化逻辑,支持更多类型转换
- 实现VendorCatalogStringConverter用于类型转换
- 更新ContractFileTypeListCell和ContractFileTypeTableCell显示逻辑
- 调整VendorTabSkinFile和CompanyVendorTabSkinBase使用新的类型转换方式
- 更新相关服务类接口,添加类型转换方法
- 修改FXML文件添加类型选择控件
This commit is contained in:
2025-09-23 18:24:00 +08:00
parent 73cbb4e19e
commit 543311c676
21 changed files with 396 additions and 248 deletions

View File

@@ -125,6 +125,7 @@ public class ComboBoxUtils {
list.addAll(queryService.findAll());
comboBox.setItems(list);
EntityStringConverter<T> converter = new EntityStringConverter<>(list);
comboBox.setConverter(converter);

View File

@@ -1,4 +1,41 @@
package com.ecep.contract.controller.list.cell;
public class ContractFileTypeListCell {
import com.ecep.contract.ContractFileType;
import com.ecep.contract.Desktop;
import com.ecep.contract.service.ContractFileTypeService;
import com.ecep.contract.vo.ContractFileTypeLocalVo;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.util.Callback;
/**
* @param <T>
*/
public class ContractFileTypeListCell<T> extends ListCell<ContractFileType> {
public static Callback<ListView<ContractFileType>, ListCell<ContractFileType>> forListView(ContractFileTypeService typeService) {
return listView -> new ContractFileTypeListCell<>(typeService);
}
private final ContractFileTypeService service;
public ContractFileTypeListCell(ContractFileTypeService service) {
this.service = service;
}
@Override
protected void updateItem(ContractFileType item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
return;
}
ContractFileTypeLocalVo local = service.findByType(Desktop.instance.getActiveEmployee().localeProperty().get(), item);
if (local == null) {
setText(item.name());
} else {
setText(local.getValue());
}
}
}

View File

@@ -3,6 +3,7 @@ package com.ecep.contract.controller.project.sale_type;
import java.util.Arrays;
import java.util.List;
import com.ecep.contract.controller.list.cell.ContractFileTypeListCell;
import org.controlsfx.control.ListSelectionView;
import com.ecep.contract.ContractFileType;
@@ -36,8 +37,6 @@ public class ProjectSaleTypeRequireFilesTabSkin extends AbstProjectSaleTypeBased
private final SimpleBooleanProperty changed = new SimpleBooleanProperty(false);
private ListSelectionView<ContractFileType> fileTypesField;
private final ObservableMap<ContractFileType, ContractFileTypeLocal> fileTypeLocalMap = FXCollections
.observableHashMap();
@Setter
private ProjectSaleTypeRequireFileTypeService requireFileTypeService;
@@ -63,7 +62,6 @@ public class ProjectSaleTypeRequireFilesTabSkin extends AbstProjectSaleTypeBased
public void initializeTab() {
initializeListView();
loadSelectedRoles();
fileTypeLocalMap.putAll(getCachedBean(ContractFileTypeService.class).findAll(getLocale()));
}
private void loadSelectedRoles() {
@@ -79,22 +77,7 @@ public class ProjectSaleTypeRequireFilesTabSkin extends AbstProjectSaleTypeBased
List<ContractFileType> types = Arrays.stream(ContractFileType.values())
.filter(ContractFileType::isSupportCustomer).toList();
fileTypesField.getSourceItems().setAll(types);
fileTypesField.setCellFactory(param -> new ListCell<>() {
@Override
protected void updateItem(ContractFileType item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
} else {
ContractFileTypeLocal local = fileTypeLocalMap.get(item);
if (local == null) {
setText(item.name());
} else {
setText(local.getValue());
}
}
}
});
fileTypesField.setCellFactory(ContractFileTypeListCell.forListView(getCachedBean(ContractFileTypeService.class)));
fileTypesField.getTargetItems().addListener((ListChangeListener<ContractFileType>) change -> {
while (change.next()) {

View File

@@ -1,16 +1,28 @@
package com.ecep.contract.controller.tab;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.imageio.ImageIO;
import com.ecep.contract.*;
import com.ecep.contract.constant.ContractConstant;
import com.ecep.contract.controller.contract.AbstContractTableTabSkin;
import com.ecep.contract.controller.contract.ContractWindowController;
import com.ecep.contract.controller.table.EditableEntityTableTabSkin;
import com.ecep.contract.controller.table.cell.ContractFileTypeTableCell;
import com.ecep.contract.controller.table.cell.LocalDateFieldTableCell;
import com.ecep.contract.model.ContractFileTypeLocal;
import com.ecep.contract.service.ContractFileService;
import com.ecep.contract.service.ContractFileTypeService;
import com.ecep.contract.util.FxmlPath;
import com.ecep.contract.util.UITools;
import com.ecep.contract.vm.ContractFileViewModel;
import com.ecep.contract.vo.ContractFileTypeLocalVo;
import com.ecep.contract.vo.ContractFileVo;
import com.ecep.contract.vo.ContractVo;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.scene.control.*;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.stage.WindowEvent;
import javafx.util.StringConverter;
import lombok.Setter;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.io.MemoryUsageSetting;
@@ -25,46 +37,15 @@ import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.springframework.util.StringUtils;
import com.ecep.contract.ContractFileType;
import com.ecep.contract.ContractPayWay;
import com.ecep.contract.DesktopUtils;
import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.SpringApp;
import com.ecep.contract.constant.ContractConstant;
import com.ecep.contract.controller.contract.AbstContractTableTabSkin;
import com.ecep.contract.controller.contract.ContractWindowController;
import com.ecep.contract.controller.table.EditableEntityTableTabSkin;
import com.ecep.contract.controller.table.cell.LocalDateFieldTableCell;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractFile;
import com.ecep.contract.model.ContractFileTypeLocal;
import com.ecep.contract.service.ContractFileService;
import com.ecep.contract.service.ContractFileTypeService;
import com.ecep.contract.util.FxmlPath;
import com.ecep.contract.util.UITools;
import com.ecep.contract.vm.ContractFileViewModel;
import com.ecep.contract.vo.ContractFileVo;
import com.ecep.contract.vo.ContractVo;
import javafx.beans.binding.Bindings;
import javafx.collections.FXCollections;
import javafx.collections.MapChangeListener;
import javafx.collections.ObservableList;
import javafx.collections.ObservableMap;
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.Tab;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.stage.WindowEvent;
import javafx.util.StringConverter;
import lombok.Setter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* 合同文件
@@ -82,15 +63,13 @@ public class ContractTabSkinFiles
public Menu fileTable_menu_change_type;
public Menu fileTable_menu_change_type_and_name;
public TableColumn<ContractFileViewModel, Number> fileTable_idColumn;
public TableColumn<ContractFileViewModel, ContractFileTypeLocal> fileTable_typeColumn;
public TableColumn<ContractFileViewModel, ContractFileType> fileTable_typeColumn;
public TableColumn<ContractFileViewModel, String> fileTable_filePathColumn;
public TableColumn<ContractFileViewModel, LocalDate> fileTable_applyDateColumn;
public TableColumn<ContractFileViewModel, String> fileTable_descriptionColumn;
@Setter
private ContractFileService contractFileService;
private final ObservableMap<ContractFileType, ContractFileTypeLocal> fileTypeLocalMap = FXCollections
.observableHashMap();
public ContractTabSkinFiles(ContractWindowController controller) {
super(controller);
@@ -150,44 +129,9 @@ public class ContractTabSkinFiles
fileTable_idColumn.setReorderable(false);
fileTable_typeColumn
.setCellValueFactory(param -> Bindings.valueAt(fileTypeLocalMap, param.getValue().getType()));
.setCellValueFactory(param -> param.getValue().getType());
fileTable_typeColumn
.setCellFactory(param -> new TextFieldTableCell<>(new ContractFileTypeLocalStringConverter()));
// 监听 type map 变化
fileTypeLocalMap
.addListener((MapChangeListener<? super ContractFileType, ? super ContractFileTypeLocal>) change -> {
List<ContractFileTypeLocal> types = fileTypeLocalMap.values().stream().filter(typeLocal -> {
ContractFileType type = typeLocal.getType();
if (type == null) {
return false;
}
if (isCustomer && !type.isSupportCustomer()) {
return false;
}
return !isVendor || type.isSupportVendor();
}).toList();
fileTable_menu_change_type.getItems().setAll(types.stream()
.map(typeLocal -> {
MenuItem item = new MenuItem();
item.setText(typeLocal.getValue());
item.getProperties().put("typeLocal", typeLocal);
item.setOnAction(this::onFileTableContextMenuChangeTypeAndNameAction);
return item;
}).toList());
fileTable_menu_change_type_and_name.getItems().setAll(types.stream()
.filter(typeLocal -> StringUtils.hasText(typeLocal.getSuggestFileName()))
.map(typeLocal -> {
MenuItem item = new MenuItem();
item.setText(typeLocal.getValue());
item.getProperties().put("typeLocal", typeLocal);
item.getProperties().put("rename", true);
item.setOnAction(this::onFileTableContextMenuChangeTypeAndNameAction);
return item;
}).toList());
});
.setCellFactory(ContractFileTypeTableCell.forTableColumn(getCachedBean(ContractFileTypeService.class)));
fileTable_typeColumn.setEditable(false);
/* 文件名编辑器 */
@@ -249,7 +193,6 @@ public class ContractTabSkinFiles
createVendorContractRequestByTemplateUpdateMenuItem(),
createVendorContractApplyByTemplateUpdateMenuItem());
fileTypeLocalMap.putAll(getCachedBean(ContractFileTypeService.class).findAll(getLocale()));
super.initializeTab();
}
@@ -508,7 +451,7 @@ public class ContractTabSkinFiles
file.setApplyDate(LocalDate.now());
String fileName = item.getText();
ContractFileTypeLocal local = fileTypeLocalMap.get(ContractFileType.CostForm);
ContractFileTypeLocalVo local = getCachedBean(ContractFileTypeService.class).findByType(getLocale(), ContractFileType.CostForm);
if (local != null) {
if (StringUtils.hasText(local.getSuggestFileName())) {
fileName = local.getSuggestFileName();

View File

@@ -1,4 +1,54 @@
package com.ecep.contract.controller.table.cell;
public class ContractFileTypeTableCell {
import com.ecep.contract.ContractFileType;
import com.ecep.contract.SpringApp;
import com.ecep.contract.service.ContractFileTypeService;
import com.ecep.contract.vo.ContractFileTypeLocalVo;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.util.Callback;
/**
* 合同文件类型单元格,用于在表格中显示合同文件类型信息
*/
public class ContractFileTypeTableCell<T> extends AsyncUpdateTableCell<T, ContractFileType, ContractFileTypeLocalVo> {
private ContractFileTypeService contractFileTypeService;
/**
* 创建一个用于表格列的单元格工厂
*/
public static <T> Callback<TableColumn<T, ContractFileType>, TableCell<T, ContractFileType>> forTableColumn(
ContractFileTypeService service) {
return param -> new ContractFileTypeTableCell<>(service);
}
public ContractFileTypeTableCell() {
}
public ContractFileTypeTableCell(ContractFileTypeService service) {
setService(service);
}
@Override
protected ContractFileTypeService getServiceBean() {
if (contractFileTypeService == null) {
contractFileTypeService = SpringApp.getBean(ContractFileTypeService.class);
}
return contractFileTypeService;
}
@Override
protected ContractFileTypeLocalVo initialize() {
ContractFileType item = getItem();
ContractFileTypeLocalVo localVo = getServiceBean().findByType(com.ecep.contract.Desktop.instance.getActiveEmployee().localeProperty().get(), item);
return localVo;
}
@Override
public String format(ContractFileTypeLocalVo entity) {
if (entity == null) {
return null;
}
return entity.getValue();
}
}

View File

@@ -5,12 +5,14 @@ import java.util.List;
import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.SpringApp;
import com.ecep.contract.VendorType;
import com.ecep.contract.controller.ComboBoxUtils;
import com.ecep.contract.controller.company.CompanyWindowController;
import com.ecep.contract.controller.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.model.VendorTypeLocal;
import com.ecep.contract.service.CompanyContactService;
import com.ecep.contract.service.CompanyVendorService;
import com.ecep.contract.service.VendorCatalogService;
import com.ecep.contract.service.VendorTypeService;
import com.ecep.contract.util.UITools;
import com.ecep.contract.vm.CompanyVendorViewModel;
@@ -18,7 +20,11 @@ import com.ecep.contract.vm.CompanyViewModel;
import com.ecep.contract.vo.CompanyVendorVo;
import com.ecep.contract.vo.CompanyVo;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Tab;
import javafx.util.converter.LocalDateStringConverter;
import javafx.util.converter.LocalDateTimeStringConverter;
@@ -52,7 +58,9 @@ public class CompanyVendorTabSkinBase
controller.developDateField.setConverter(converter);
controller.developDateField.valueProperty().bindBidirectional(viewModel.getDevelopDate());
ComboBoxUtils.initialComboBox(controller.catalogField, viewModel.getCatalog(), getCachedBean(VendorTypeService.class), true);
ComboBoxUtils.initialComboBox(controller.catalogField, viewModel.getCatalog(), getCachedBean(VendorCatalogService.class), true);
initialTypeComboBox();
controller.protocolProviderField.selectedProperty().bindBidirectional(viewModel.getProtocolProvider());
UITools.autoCompletion(controller.contactField, viewModel.getContact(), getCompanyContactService());
@@ -81,6 +89,17 @@ public class CompanyVendorTabSkinBase
controller.pathAsNameBtn.setOnAction(this::onPathSameAsNameAction);
}
private void initialTypeComboBox() {
VendorTypeService typeService = getCachedBean(VendorTypeService.class);
ObservableList<VendorType> list = FXCollections.observableArrayList();
ComboBox<VendorType> comboBox = controller.typeField;
list.add(null);
list.addAll(VendorType.values());
comboBox.setItems(list);
comboBox.setConverter(typeService.getTypeStringConverter());
comboBox.valueProperty().bindBidirectional(viewModel.getType());
}
public void onCreatePathAction(ActionEvent event) {
CompanyVendorVo companyVendor = getEntity();
if (getCompanyVendorService().makePathAbsent(companyVendor)) {

View File

@@ -2,6 +2,9 @@ package com.ecep.contract.controller.vendor;
import java.io.File;
import com.ecep.contract.VendorType;
import com.ecep.contract.model.VendorCatalog;
import com.ecep.contract.vo.VendorCatalogVo;
import com.ecep.contract.vo.VendorTypeLocalVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -56,7 +59,8 @@ public class CompanyVendorWindowController extends AbstEntityController<CompanyV
public Tab fileTab;
public Tab entityTab;
public ComboBox<VendorTypeLocalVo> catalogField;
public ComboBox<VendorCatalogVo> catalogField;
public ComboBox<VendorType> typeField;
public CheckBox protocolProviderField;
public TextField pathField;
public TextArea descriptionField;

View File

@@ -6,10 +6,12 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import com.ecep.contract.service.VendorFileTypeService;
import com.ecep.contract.util.ProxyUtils;
import com.ecep.contract.vo.CompanyVendorFileVo;
import com.ecep.contract.vo.CompanyVendorVo;
import com.ecep.contract.vo.CompanyVo;
import com.ecep.contract.vo.VendorFileTypeLocalVo;
import org.springframework.util.StringUtils;
import com.ecep.contract.VendorFileType;
@@ -94,8 +96,9 @@ public class VendorTabSkinFile
table.disableProperty().bind(viewModel.getPath().isEmpty());
fileTable_idColumn.setCellValueFactory(param -> param.getValue().getId());
ObservableMap<VendorFileType, VendorFileTypeLocal> observableMapByLocal = FXCollections
.observableMap(companyVendorFileService.getFileTypeLocalMap(getLocale()));
ObservableMap<VendorFileType, VendorFileTypeLocalVo> observableMapByLocal = FXCollections
.observableMap(getCachedBean(VendorFileTypeService.class).findAll(getLocale()));
fileTable_typeColumn.setCellValueFactory(param -> Bindings.valueAt(observableMapByLocal,
param.getValue().getType()).map(BaseEnumEntity::getValue));

View File

@@ -3,6 +3,8 @@ package com.ecep.contract.controller.vendor.group;
import java.util.Arrays;
import java.util.List;
import com.ecep.contract.controller.list.cell.ContractFileTypeListCell;
import com.ecep.contract.vo.ContractFileTypeLocalVo;
import org.controlsfx.control.ListSelectionView;
import com.ecep.contract.ContractFileType;
@@ -32,8 +34,6 @@ public class VendorGroupRequireFilesTabSkin extends AbstVendorGroupBasedTabSkin
private final SimpleBooleanProperty changed = new SimpleBooleanProperty(false);
private ListSelectionView<ContractFileType> fileTypesField;
private final ObservableMap<ContractFileType, ContractFileTypeLocal> fileTypeLocalMap = FXCollections
.observableHashMap();
public VendorGroupRequireFilesTabSkin(VendorGroupWindowController controller) {
super(controller);
@@ -54,7 +54,6 @@ public class VendorGroupRequireFilesTabSkin extends AbstVendorGroupBasedTabSkin
public void initializeTab() {
initializeListView();
loadSelectedRoles();
fileTypeLocalMap.putAll(getContractFileTypeService().findAll(getLocale()));
}
private void loadSelectedRoles() {
@@ -68,23 +67,9 @@ public class VendorGroupRequireFilesTabSkin extends AbstVendorGroupBasedTabSkin
List<ContractFileType> types = Arrays.stream(ContractFileType.values())
.filter(ContractFileType::isSupportVendor).toList();
fileTypesField.getSourceItems().setAll(types);
fileTypesField.setCellFactory(param -> new ListCell<>() {
@Override
protected void updateItem(ContractFileType item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
} else {
ContractFileTypeLocal local = fileTypeLocalMap.get(item);
if (local == null) {
setText(item.name());
} else {
setText(local.getValue());
}
}
}
});
fileTypesField.setCellFactory(ContractFileTypeListCell.forListView(getCachedBean(ContractFileTypeService.class)));
fileTypesField.getTargetItems().addListener((ListChangeListener<ContractFileType>) change -> {
while (change.next()) {

View File

@@ -1,4 +1,23 @@
package com.ecep.contract.converter;
public class VendorCatalogStringConverter {
import com.ecep.contract.service.VendorCatalogService;
import com.ecep.contract.vo.VendorCatalogVo;
import javafx.util.StringConverter;
public class VendorCatalogStringConverter extends StringConverter<VendorCatalogVo> {
private final VendorCatalogService service;
public VendorCatalogStringConverter(VendorCatalogService service) {
this.service = service;
}
@Override
public String toString(VendorCatalogVo object) {
return object.getName();
}
@Override
public VendorCatalogVo fromString(String string) {
return service.findByName(string);
}
}

View File

@@ -6,6 +6,8 @@ import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vo.ContractFileTypeLocalVo;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Pageable;
@@ -17,14 +19,16 @@ import com.ecep.contract.vm.ContractFileTypeLocalViewModel;
@Service
@CacheConfig(cacheNames = "contract-file-type")
public class ContractFileTypeService extends QueryService<ContractFileTypeLocal, ContractFileTypeLocalViewModel> {
public class ContractFileTypeService extends QueryService<ContractFileTypeLocalVo, ContractFileTypeLocalViewModel> {
@Cacheable
public Map<ContractFileType, ContractFileTypeLocal> findAll(Locale locale) {
Map<String, Object> params = new HashMap<>();
params.put("lang", locale.toLanguageTag());
return findAll(params, Pageable.unpaged()).stream()
.collect(Collectors.toMap(ContractFileTypeLocal::getType, Function.identity()));
public Map<ContractFileType, ContractFileTypeLocalVo> findAll(Locale locale) {
return findAll(ParamUtils.builder().equals("lang", locale.toLanguageTag()).build(), Pageable.unpaged()).stream()
.collect(Collectors.toMap(ContractFileTypeLocalVo::getType, Function.identity()));
}
@Cacheable
public ContractFileTypeLocalVo findByType(Locale locale, ContractFileType type) {
return findAll(ParamUtils.builder().equals("lang", locale.toLanguageTag()).equals("type", type).build(), Pageable.ofSize(1)).stream().findFirst().orElse(null);
}
}

View File

@@ -3,6 +3,7 @@ package com.ecep.contract.service;
import java.util.List;
import java.util.Map;
import javafx.util.StringConverter;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -17,4 +18,6 @@ public interface IEntityService<T> {
Page<T> findAll(Map<String, Object> params, Pageable pageable);
StringConverter<T> getStringConverter();
}

View File

@@ -2,10 +2,14 @@ package com.ecep.contract.service;
import java.util.List;
import com.ecep.contract.converter.VendorCatalogStringConverter;
import com.ecep.contract.util.ParamUtils;
import javafx.util.StringConverter;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.ecep.contract.vm.VendorCatalogViewModel;
@@ -14,27 +18,41 @@ import com.ecep.contract.vo.VendorCatalogVo;
@Service
@CacheConfig(cacheNames = "vendor-catalog")
public class VendorCatalogService extends QueryService<VendorCatalogVo, VendorCatalogViewModel> {
private final VendorCatalogStringConverter stringConverter = new VendorCatalogStringConverter(this);
@Override
@Cacheable(key = "#id")
public VendorCatalogVo findById(Integer id) {
return super.findById(id);
}
public VendorCatalogVo findByName(String string) {
return findAll(ParamUtils.builder().equals("name", string).build(), Pageable.ofSize(1)).stream().findFirst().orElse(null);
}
@Override
@Cacheable(key = "all")
@Cacheable(key = "'all'")
public List<VendorCatalogVo> findAll() {
return super.findAll();
}
@Caching(evict = { @CacheEvict(key = "all"), @CacheEvict(key = "#entity.id") })
@Caching(evict = {@CacheEvict(key = "'all'"), @CacheEvict(key = "#entity.id")})
@Override
public VendorCatalogVo save(VendorCatalogVo entity) {
return super.save(entity);
}
@Caching(evict = { @CacheEvict(key = "all"), @CacheEvict(key = "#entity.id") })
@Caching(evict = {@CacheEvict(key = "'all'"), @CacheEvict(key = "#entity.id")})
@Override
public void delete(VendorCatalogVo entity) {
super.delete(entity);
}
@Override
public StringConverter<VendorCatalogVo> getStringConverter() {
return stringConverter;
}
}

View File

@@ -1,39 +1,55 @@
package com.ecep.contract.service;
import com.ecep.contract.CompanyFileType;
import com.ecep.contract.VendorFileType;
import com.ecep.contract.model.VendorFileTypeLocal;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vm.VendorFileTypeLocalViewModel;
import com.ecep.contract.vo.CompanyFileTypeLocalVo;
import com.ecep.contract.vo.VendorFileTypeLocalVo;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
@CacheConfig(cacheNames = "vendor-file-type")
public class VendorFileTypeService extends QueryService<VendorFileTypeLocal, VendorFileTypeLocalViewModel> {
public class VendorFileTypeService extends QueryService<VendorFileTypeLocalVo, VendorFileTypeLocalViewModel> {
@Cacheable(key = "#p0")
@Override
public VendorFileTypeLocal findById(Integer id) {
public VendorFileTypeLocalVo findById(Integer id) {
return super.findById(id);
}
@Cacheable(key = "'all'")
@Override
public List<VendorFileTypeLocal> findAll() {
public List<VendorFileTypeLocalVo> findAll() {
return super.findAll();
}
@Caching(put = {@CachePut(key = "#p0.id"), @CachePut(key = "'all'")})
@Override
public VendorFileTypeLocal save(VendorFileTypeLocal entity) {
public VendorFileTypeLocalVo save(VendorFileTypeLocalVo entity) {
return super.save(entity);
}
@Caching(put = {@CachePut(key = "#p0.id"), @CachePut(key = "'all'")})
@Override
public void delete(VendorFileTypeLocal entity) {
public void delete(VendorFileTypeLocalVo entity) {
super.delete(entity);
}
@Cacheable
public Map<VendorFileType, VendorFileTypeLocalVo> findAll(Locale locale) {
return findAll(ParamUtils.builder().equals("lang", locale.toLanguageTag()).build(), Pageable.unpaged()).stream()
.collect(Collectors.toMap(VendorFileTypeLocalVo::getType, Function.identity()));
}
}

View File

@@ -1,5 +1,6 @@
package com.ecep.contract.service;
import com.ecep.contract.SpringApp;
import com.ecep.contract.VendorType;
import com.ecep.contract.converter.VendorTypeStringConverter;
import com.ecep.contract.util.ParamUtils;
@@ -24,12 +25,17 @@ public class VendorTypeService extends QueryService<VendorTypeLocalVo, VendorTyp
return super.findById(id);
}
@Cacheable(key = "'type-'+#p0.ordinal()")
@Cacheable(key = "'type-'+#p0.ordinal()", condition = "#p0 != null")
public VendorTypeLocalVo findByType(VendorType type) {
return findAll(ParamUtils.builder().equals("type", type).build(), Pageable.ofSize(1)).stream().findFirst()
.orElse(null);
}
public VendorTypeLocalVo findByValue(String string) {
return findAll(ParamUtils.builder().equals("value", string).build(), Pageable.ofSize(1)).stream().findFirst()
.orElse(null);
}
@Cacheable(key = "'all'")
@Override
public List<VendorTypeLocalVo> findAll() {
@@ -57,4 +63,25 @@ public class VendorTypeService extends QueryService<VendorTypeLocalVo, VendorTyp
return findAll(ParamUtils.builder().equals("lang", locale.toLanguageTag()).equals("value", string).build(), Pageable.ofSize(1))
.stream().findFirst().orElse(null);
}
public StringConverter<VendorType> getTypeStringConverter() {
return new StringConverter<>() {
final VendorTypeService service = SpringApp.getBean(VendorTypeService.class);
@Override
public String toString(VendorType object) {
if (object == null) {
return "";
}
VendorTypeLocalVo localVo = service.findByType(object);
return localVo.getValue();
}
@Override
public VendorType fromString(String string) {
VendorTypeLocalVo localVo = service.findByValue(string);
return localVo.getType();
}
};
}
}

View File

@@ -502,16 +502,12 @@ public class ContractVerifyComm {
}
}
ContractFileTypeLocal getFileTypeLocal(ContractFileType type) {
if (fileTypeLocalMap == null) {
fileTypeLocalMap = FXCollections
.observableMap(getContractFileTypeService().findAll(getLocale()));
}
return fileTypeLocalMap.get(type);
ContractFileTypeLocalVo getFileTypeLocal(ContractFileType type) {
return getContractFileTypeService().findByType(getLocale(), type);
}
String getFileTypeLocalValue(ContractFileType type) {
ContractFileTypeLocal fileTypeLocal = getFileTypeLocal(type);
ContractFileTypeLocalVo fileTypeLocal = getFileTypeLocal(type);
if (fileTypeLocal == null) {
return type.name();
}

View File

@@ -5,6 +5,7 @@ import java.util.Objects;
import com.ecep.contract.ContractFileType;
import com.ecep.contract.model.ContractFileTypeLocal;
import com.ecep.contract.vo.ContractFileTypeLocalVo;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
@@ -12,17 +13,17 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractFileTypeLocalViewModel extends EnumViewModel<ContractFileType, ContractFileTypeLocal> {
public class ContractFileTypeLocalViewModel extends EnumViewModel<ContractFileType, ContractFileTypeLocalVo> {
private SimpleStringProperty suggestFileName = new SimpleStringProperty();
@Override
protected void updateFrom(ContractFileTypeLocal v) {
protected void updateFrom(ContractFileTypeLocalVo v) {
super.updateFrom(v);
suggestFileName.set(v.getSuggestFileName());
}
@Override
public boolean copyTo(ContractFileTypeLocal v) {
public boolean copyTo(ContractFileTypeLocalVo v) {
boolean ret = super.copyTo(v);
if (!Objects.equals(suggestFileName.get(), v.getSuggestFileName())) {
v.setSuggestFileName(suggestFileName.get());

View File

@@ -1,11 +1,11 @@
package com.ecep.contract.vm;
import com.ecep.contract.VendorFileType;
import com.ecep.contract.model.VendorFileTypeLocal;
import com.ecep.contract.vo.VendorFileTypeLocalVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class VendorFileTypeLocalViewModel extends EnumViewModel<VendorFileType, VendorFileTypeLocal> {
public class VendorFileTypeLocalViewModel extends EnumViewModel<VendorFileType, VendorFileTypeLocalVo> {
}