feat: 更新项目版本至0.0.129-SNAPSHOT并修复多个问题
fix(ProjectIndustryService): 添加getStringConverter方法 fix(AbstContractRepairTasker): 初始化repository修复同步问题 fix(ProjectTabSkinBase): 处理saleTypeField空值情况 refactor(ProjectTypeService): 优化stringConverter初始化 feat(ProjectTypeStringConverter): 修改toString方法显示编码和名称 fix(CustomerCtx): 初始化repository修复客户更新问题 feat(ProjectCostWindowController): 根据版本控制审批标签显示 fix(DeliverySignMethodService): 添加saleType查询条件 feat: 添加DeliverySignMethodStringConverter fix(SalesOrderCtx): 使用getRepository修复查询问题 fix(VendorCtx): 初始化repository修复供应商更新问题 refactor(CompanyTabSkinContract): 优化员工表格单元格创建 feat(DeliverySignMethodService): 添加findByCode和findByName方法 refactor(AbstEntityController): 优化视图模型更新逻辑 style(project.fxml): 调整界面布局和字段显示
This commit is contained in:
@@ -53,33 +53,26 @@ public abstract class AbstEntityController<T extends IdentityEntity, TV extends
|
||||
if (service instanceof QueryService<T, TV> queryService) {
|
||||
setStatus("读取...");
|
||||
loadedFuture = queryService.asyncFindById(viewModel.getId().get());
|
||||
loadedFuture.thenAccept(entity -> {
|
||||
// fixed, bind change if new view model create
|
||||
if (viewModel != null) {
|
||||
viewModel.bindListener();
|
||||
}
|
||||
setStatus();
|
||||
// BaseViewModel.updateInFxApplicationThread(entity, viewModel);
|
||||
});
|
||||
loadedFuture.exceptionally(ex -> {
|
||||
handleException("载入失败,#" + viewModel.getId().get(), ex);
|
||||
return null;
|
||||
});
|
||||
|
||||
} else {
|
||||
loadedFuture = CompletableFuture.supplyAsync(() -> {
|
||||
T entity = getViewModelService().findById(viewModel.getId().get());
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
Platform.runLater(() -> {
|
||||
setStatus();
|
||||
viewModel.update(entity);
|
||||
});
|
||||
viewModel.bindListener();
|
||||
return entity;
|
||||
return getViewModelService().findById(viewModel.getId().get());
|
||||
});
|
||||
}
|
||||
|
||||
loadedFuture.thenAccept(entity -> {
|
||||
// fixed, bind change if new view model create
|
||||
if (viewModel != null) {
|
||||
updateViewModel(entity);
|
||||
viewModel.bindListener();
|
||||
}
|
||||
setStatus();
|
||||
});
|
||||
loadedFuture.exceptionally(ex -> {
|
||||
handleException("载入失败,#" + viewModel.getId().get(), ex);
|
||||
return null;
|
||||
});
|
||||
|
||||
registerTabSkins();
|
||||
if (saveBtn != null) {
|
||||
saveBtn.disableProperty().bind(createTabSkinChangedBindings().not());
|
||||
@@ -89,6 +82,10 @@ public abstract class AbstEntityController<T extends IdentityEntity, TV extends
|
||||
installTabSkins();
|
||||
}
|
||||
|
||||
protected void updateViewModel(T entity) {
|
||||
BaseViewModel.updateInFxApplicationThread(entity, viewModel);
|
||||
}
|
||||
|
||||
public T getEntity() {
|
||||
return getLoadedFuture().join();
|
||||
}
|
||||
@@ -229,10 +226,10 @@ public abstract class AbstEntityController<T extends IdentityEntity, TV extends
|
||||
}
|
||||
|
||||
return CompletableFuture.allOf(list
|
||||
.stream()
|
||||
.map(RefreshableSkin::refresh)
|
||||
.filter(Objects::nonNull)
|
||||
.toArray(CompletableFuture<?>[]::new))
|
||||
.stream()
|
||||
.map(RefreshableSkin::refresh)
|
||||
.filter(Objects::nonNull)
|
||||
.toArray(CompletableFuture<?>[]::new))
|
||||
.whenComplete((v, ex) -> {
|
||||
if (ex != null) {
|
||||
future.completeExceptionally(ex);
|
||||
|
||||
@@ -107,6 +107,9 @@ public class ProjectTabSkinBase extends AbstProjectBasedTabSkin implements TabSk
|
||||
|
||||
controller.saleTypeField.valueProperty().addListener((observable, oldValue, newValue) -> {
|
||||
Predicate<DeliverySignMethodVo> predicate = p -> {
|
||||
if (newValue == null) {
|
||||
return true;
|
||||
}
|
||||
return p == null || Objects.equals(p.getSaleTypeId(), newValue.getId());
|
||||
};
|
||||
|
||||
|
||||
@@ -88,8 +88,23 @@ public class ProjectCostWindowController
|
||||
|
||||
@Override
|
||||
protected void registerTabSkins() {
|
||||
|
||||
registerTabSkin(baseInfoTab, tab -> new ProjectCostTabSkinBase(this));
|
||||
registerTabSkin(itemTab, tab -> new ProjectCostTabSkinItems(this));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateViewModel(ProjectCostVo entity) {
|
||||
super.updateViewModel(entity);
|
||||
var tabPane = baseInfoTab.getTabPane();
|
||||
if (entity.getVersion() > 0) {
|
||||
if (!tabPane.getTabs().contains(approvalTab)) {
|
||||
tabPane.getTabs().add(approvalTab);
|
||||
}
|
||||
} else {
|
||||
tabPane.getTabs().remove(approvalTab);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -164,18 +164,18 @@ public class CompanyTabSkinContract
|
||||
contractTable_startDateColumn.setCellValueFactory(param -> param.getValue().getStartDate());
|
||||
contractTable_endDateColumn.setCellValueFactory(param -> param.getValue().getEndDate());
|
||||
contractTable_setupPersonColumn.setCellValueFactory(param -> param.getValue().getSetupPerson());
|
||||
contractTable_setupPersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
|
||||
contractTable_setupPersonColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService()));
|
||||
|
||||
contractTable_setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate());
|
||||
// contractTable_setupDateColumn.setSortable(true);
|
||||
// contractTable_setupDateColumn.setSortType(TableColumn.SortType.DESCENDING);
|
||||
contractTable_inurePersonColumn.setCellValueFactory(param -> param.getValue().getInurePerson());
|
||||
contractTable_inurePersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
|
||||
contractTable_inurePersonColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService()));
|
||||
|
||||
contractTable_inureDateColumn.setCellValueFactory(param -> param.getValue().getInureDate());
|
||||
|
||||
contractTable_varyPersonColumn.setCellValueFactory(param -> param.getValue().getVaryPerson());
|
||||
contractTable_varyPersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
|
||||
contractTable_varyPersonColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService()));
|
||||
|
||||
contractTable_varyDateColumn.setCellValueFactory(param -> param.getValue().getVaryDate());
|
||||
contractTable_createdColumn.setCellValueFactory(param -> param.getValue().getCreated());
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.ecep.contract.converter;
|
||||
|
||||
import com.ecep.contract.service.DeliverySignMethodService;
|
||||
import com.ecep.contract.vo.DeliverySignMethodVo;
|
||||
import javafx.util.StringConverter;
|
||||
|
||||
/**
|
||||
* DeliverySignMethodVo的StringConverter实现,用于JavaFX控件中的显示和转换
|
||||
*/
|
||||
public class DeliverySignMethodStringConverter extends StringConverter<DeliverySignMethodVo> {
|
||||
private final DeliverySignMethodService service;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
*
|
||||
* @param service DeliverySignMethodService实例
|
||||
*/
|
||||
public DeliverySignMethodStringConverter(DeliverySignMethodService service) {
|
||||
this.service = service;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将DeliverySignMethodVo对象转换为字符串
|
||||
*
|
||||
* @param method DeliverySignMethodVo对象
|
||||
* @return 转换后的字符串
|
||||
*/
|
||||
@Override
|
||||
public String toString(DeliverySignMethodVo method) {
|
||||
return method == null ? "" : method.getCode() + " " + method.getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* 将字符串转换为DeliverySignMethodVo对象
|
||||
*
|
||||
* @param string 字符串
|
||||
* @return 转换后的DeliverySignMethodVo对象
|
||||
*/
|
||||
@Override
|
||||
public DeliverySignMethodVo fromString(String string) {
|
||||
if (string == null || string.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
// 查找所有方法,然后通过名称匹配
|
||||
return service.findByName(string);
|
||||
}
|
||||
}
|
||||
@@ -22,12 +22,12 @@ public class ProjectTypeStringConverter extends StringConverter<ProjectTypeVo> {
|
||||
/**
|
||||
* 将ProjectTypeVo对象转换为字符串
|
||||
*
|
||||
* @param object ProjectTypeVo对象
|
||||
* @param type ProjectTypeVo对象
|
||||
* @return 转换后的字符串
|
||||
*/
|
||||
@Override
|
||||
public String toString(ProjectTypeVo object) {
|
||||
return object == null ? "" : object.getName();
|
||||
public String toString(ProjectTypeVo type) {
|
||||
return type == null ? "" : type.getCode() + " " + type.getName();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.ecep.contract.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
@@ -7,16 +9,18 @@ import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.ecep.contract.converter.DeliverySignMethodStringConverter;
|
||||
import com.ecep.contract.util.ParamUtils;
|
||||
import com.ecep.contract.vm.DeliverySignMethodViewModel;
|
||||
import com.ecep.contract.vo.DeliverySignMethodVo;
|
||||
import com.ecep.contract.vo.ProjectSaleTypeVo;
|
||||
|
||||
import java.util.List;
|
||||
import javafx.util.StringConverter;
|
||||
|
||||
@Service
|
||||
@CacheConfig(cacheNames = "delivery-sign-method")
|
||||
public class DeliverySignMethodService extends QueryService<DeliverySignMethodVo, DeliverySignMethodViewModel> {
|
||||
private final StringConverter<DeliverySignMethodVo> stringConverter = new DeliverySignMethodStringConverter(this);
|
||||
|
||||
@Cacheable(key = "#id")
|
||||
@Override
|
||||
@@ -24,6 +28,14 @@ public class DeliverySignMethodService extends QueryService<DeliverySignMethodVo
|
||||
return super.findById(id);
|
||||
}
|
||||
|
||||
public DeliverySignMethodVo findByCode(String code) {
|
||||
return findOneByProperty("code", code);
|
||||
}
|
||||
|
||||
public DeliverySignMethodVo findByName(String name) {
|
||||
return findOneByProperty("name", name);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据销售类型和编码查询发货方式
|
||||
*
|
||||
@@ -32,15 +44,16 @@ public class DeliverySignMethodService extends QueryService<DeliverySignMethodVo
|
||||
* @return
|
||||
*/
|
||||
public DeliverySignMethodVo findBySaleTypeAndCode(ProjectSaleTypeVo saleType, String code) {
|
||||
Page<DeliverySignMethodVo> page = findAll(ParamUtils.builder()
|
||||
.equals("saleType", saleType.getId()).build(), Pageable.unpaged());
|
||||
var builder = ParamUtils.builder();
|
||||
builder.equals("saleType", saleType.getId());
|
||||
builder.equals("code", code);
|
||||
Page<DeliverySignMethodVo> page = findAll(builder.build(), Pageable.unpaged());
|
||||
if (page.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return page.stream().filter(v -> v.getCode().equals(code)).findFirst().orElse(null);
|
||||
return page.stream().findFirst().orElse(null);
|
||||
}
|
||||
|
||||
|
||||
@Cacheable(key = "'all'")
|
||||
@Override
|
||||
public List<DeliverySignMethodVo> findAll() {
|
||||
@@ -58,4 +71,9 @@ public class DeliverySignMethodService extends QueryService<DeliverySignMethodVo
|
||||
public void delete(DeliverySignMethodVo entity) {
|
||||
super.delete(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringConverter<DeliverySignMethodVo> getStringConverter() {
|
||||
return stringConverter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,5 +50,10 @@ public class ProjectIndustryService extends QueryService<ProjectIndustryVo, Proj
|
||||
public void delete(ProjectIndustryVo entity) {
|
||||
super.delete(entity);
|
||||
}
|
||||
|
||||
|
||||
public StringConverter<ProjectIndustryVo> getStringConverter() {
|
||||
return stringConverter;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,11 +13,7 @@ import javafx.util.StringConverter;
|
||||
@Service
|
||||
@CacheConfig(cacheNames = "project-type")
|
||||
public class ProjectTypeService extends QueryService<ProjectTypeVo, ProjectTypeViewModel> {
|
||||
private final StringConverter<ProjectTypeVo> stringConverter;
|
||||
|
||||
public ProjectTypeService() {
|
||||
this.stringConverter = new ProjectTypeStringConverter(this);
|
||||
}
|
||||
private final StringConverter<ProjectTypeVo> stringConverter = new ProjectTypeStringConverter(this);
|
||||
|
||||
@Cacheable(key = "#p0")
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user