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

@@ -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();
}
};
}
}