feat: 添加合约文件类型服务及错误处理改进
refactor: 重构合约文件类型相关代码,优化错误处理逻辑 fix: 修复WebSocket会话未绑定用户时的错误处理 style: 调整代码格式,提高可读性 docs: 更新部分代码注释 test: 添加合约文件类型服务的测试用例 chore: 移除无用代码,清理项目结构
This commit is contained in:
@@ -98,6 +98,11 @@ public class WebSocketService {
|
||||
} else {
|
||||
logger.error("未找到对应的回调future: {}", messageId);
|
||||
}
|
||||
} else if (node.has("errorCode")) {
|
||||
int errorCode = node.get("errorCode").asInt();
|
||||
String errorMsg = node.get("errorMsg").asText();
|
||||
// TODO 需要重新登录
|
||||
logger.error("收到错误消息: 错误码={}, 错误信息={}", errorCode, errorMsg);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("处理WebSocket消息失败: {}", e.getMessage(), e);
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.ecep.contract.controller.tab.TabSkin;
|
||||
import com.ecep.contract.model.ContractFileTypeLocal;
|
||||
import com.ecep.contract.model.ProjectSaleTypeRequireFileType;
|
||||
import com.ecep.contract.service.ContractFileService;
|
||||
import com.ecep.contract.service.ContractFileTypeService;
|
||||
import com.ecep.contract.service.ProjectSaleTypeRequireFileTypeService;
|
||||
|
||||
import impl.org.controlsfx.skin.ListSelectionViewSkin;
|
||||
@@ -35,7 +36,8 @@ public class ProjectSaleTypeRequireFilesTabSkin extends AbstProjectSaleTypeBased
|
||||
|
||||
private final SimpleBooleanProperty changed = new SimpleBooleanProperty(false);
|
||||
private ListSelectionView<ContractFileType> fileTypesField;
|
||||
private final ObservableMap<ContractFileType, ContractFileTypeLocal> fileTypeLocalMap = FXCollections.observableHashMap();
|
||||
private final ObservableMap<ContractFileType, ContractFileTypeLocal> fileTypeLocalMap = FXCollections
|
||||
.observableHashMap();
|
||||
|
||||
@Setter
|
||||
private ProjectSaleTypeRequireFileTypeService requireFileTypeService;
|
||||
@@ -61,18 +63,21 @@ public class ProjectSaleTypeRequireFilesTabSkin extends AbstProjectSaleTypeBased
|
||||
public void initializeTab() {
|
||||
initializeListView();
|
||||
loadSelectedRoles();
|
||||
fileTypeLocalMap.putAll(getContractFileService().findAllFileTypes(getLocale().toLanguageTag()));
|
||||
fileTypeLocalMap.putAll(getCachedBean(ContractFileTypeService.class).findAll(getLocale()));
|
||||
}
|
||||
|
||||
private void loadSelectedRoles() {
|
||||
List<ProjectSaleTypeRequireFileType> list = getRequireFileTypeService().findBySaleTypeId(viewModel.getId().get());
|
||||
List<ProjectSaleTypeRequireFileType> list = getRequireFileTypeService()
|
||||
.findBySaleTypeId(viewModel.getId().get());
|
||||
List<ContractFileType> types = list.stream().map(ProjectSaleTypeRequireFileType::getFileType).toList();
|
||||
fileTypesField.getTargetItems().setAll(types);
|
||||
changed.set(false);
|
||||
}
|
||||
|
||||
private void initializeListView() {
|
||||
|
||||
List<ContractFileType> types = Arrays.stream(ContractFileType.values()).filter(ContractFileType::isSupportCustomer).toList();
|
||||
List<ContractFileType> types = Arrays.stream(ContractFileType.values())
|
||||
.filter(ContractFileType::isSupportCustomer).toList();
|
||||
fileTypesField.getSourceItems().setAll(types);
|
||||
fileTypesField.setCellFactory(param -> new ListCell<>() {
|
||||
@Override
|
||||
@@ -111,7 +116,8 @@ public class ProjectSaleTypeRequireFilesTabSkin extends AbstProjectSaleTypeBased
|
||||
ListView<?> targetListView = viewSkin.getTargetListView();
|
||||
targetListView.setOnMouseClicked(event -> {
|
||||
if (event.getClickCount() == 2) {
|
||||
ContractFileType selectedItem = (ContractFileType) targetListView.getSelectionModel().getSelectedItem();
|
||||
ContractFileType selectedItem = (ContractFileType) targetListView.getSelectionModel()
|
||||
.getSelectedItem();
|
||||
if (selectedItem != null) {
|
||||
// saveRoles(selectedItem);
|
||||
setStatus("selected " + selectedItem);
|
||||
@@ -128,11 +134,13 @@ public class ProjectSaleTypeRequireFilesTabSkin extends AbstProjectSaleTypeBased
|
||||
}
|
||||
|
||||
private void saveRequireFileTypes(ActionEvent event) {
|
||||
List<ProjectSaleTypeRequireFileType> list = getRequireFileTypeService().findBySaleTypeId(viewModel.getId().get());
|
||||
List<ProjectSaleTypeRequireFileType> list = getRequireFileTypeService()
|
||||
.findBySaleTypeId(viewModel.getId().get());
|
||||
ObservableList<ContractFileType> types = fileTypesField.getTargetItems();
|
||||
// 保存 types ,list 中是已经存储的,如果types 中没有则删除,如果 types 中有则新增保存
|
||||
for (ContractFileType type : types) {
|
||||
ProjectSaleTypeRequireFileType entity = list.stream().filter(v -> v.getFileType() == type).findFirst().orElse(null);
|
||||
ProjectSaleTypeRequireFileType entity = list.stream().filter(v -> v.getFileType() == type).findFirst()
|
||||
.orElse(null);
|
||||
if (entity == null) {
|
||||
entity = new ProjectSaleTypeRequireFileType();
|
||||
entity.setSaleType(getEntity());
|
||||
|
||||
@@ -40,6 +40,7 @@ import com.ecep.contract.model.ContractFile;
|
||||
import com.ecep.contract.model.ContractFileTypeLocal;
|
||||
import com.ecep.contract.model.ContractType;
|
||||
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;
|
||||
@@ -248,7 +249,7 @@ public class ContractTabSkinFiles
|
||||
createVendorContractRequestByTemplateUpdateMenuItem(),
|
||||
createVendorContractApplyByTemplateUpdateMenuItem());
|
||||
|
||||
fileTypeLocalMap.putAll(getContractFileService().findAllFileTypes(getLocale().toLanguageTag()));
|
||||
fileTypeLocalMap.putAll(getCachedBean(ContractFileTypeService.class).findAll(getLocale()));
|
||||
super.initializeTab();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.ecep.contract.controller.tab;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.ecep.contract.ContractPayWay;
|
||||
@@ -62,6 +63,9 @@ public class ContractTabSkinSubContract
|
||||
@Override
|
||||
public Map<String, Object> getSpecification(Contract parent) {
|
||||
Map<String, Object> params = getSpecification();
|
||||
if (params == null) {
|
||||
params = new HashMap<>();
|
||||
}
|
||||
params.put("parentCode", parent.getCode());
|
||||
return params;
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.ecep.contract.controller.tab.TabSkin;
|
||||
import com.ecep.contract.model.ContractFileTypeLocal;
|
||||
import com.ecep.contract.model.VendorGroupRequireFileType;
|
||||
import com.ecep.contract.service.ContractFileService;
|
||||
import com.ecep.contract.service.ContractFileTypeService;
|
||||
import com.ecep.contract.service.VendorGroupRequireFileTypeService;
|
||||
|
||||
import impl.org.controlsfx.skin.ListSelectionViewSkin;
|
||||
@@ -26,18 +27,13 @@ import javafx.scene.control.ListCell;
|
||||
import javafx.scene.control.ListView;
|
||||
import javafx.scene.control.Skin;
|
||||
import javafx.scene.control.Tab;
|
||||
import lombok.Setter;
|
||||
|
||||
public class VendorGroupRequireFilesTabSkin extends AbstVendorGroupBasedTabSkin implements TabSkin {
|
||||
|
||||
private final SimpleBooleanProperty changed = new SimpleBooleanProperty(false);
|
||||
private ListSelectionView<ContractFileType> fileTypesField;
|
||||
private final ObservableMap<ContractFileType, ContractFileTypeLocal> fileTypeLocalMap = FXCollections.observableHashMap();
|
||||
|
||||
@Setter
|
||||
private VendorGroupRequireFileTypeService requireFileTypeService;
|
||||
@Setter
|
||||
private ContractFileService contractFileService;
|
||||
private final ObservableMap<ContractFileType, ContractFileTypeLocal> fileTypeLocalMap = FXCollections
|
||||
.observableHashMap();
|
||||
|
||||
public VendorGroupRequireFilesTabSkin(VendorGroupWindowController controller) {
|
||||
super(controller);
|
||||
@@ -58,7 +54,7 @@ public class VendorGroupRequireFilesTabSkin extends AbstVendorGroupBasedTabSkin
|
||||
public void initializeTab() {
|
||||
initializeListView();
|
||||
loadSelectedRoles();
|
||||
fileTypeLocalMap.putAll(getContractFileService().findAllFileTypes(getLocale().toLanguageTag()));
|
||||
fileTypeLocalMap.putAll(getContractFileTypeService().findAll(getLocale()));
|
||||
}
|
||||
|
||||
private void loadSelectedRoles() {
|
||||
@@ -68,10 +64,10 @@ public class VendorGroupRequireFilesTabSkin extends AbstVendorGroupBasedTabSkin
|
||||
changed.set(false);
|
||||
}
|
||||
|
||||
|
||||
private void initializeListView() {
|
||||
|
||||
List<ContractFileType> types = Arrays.stream(ContractFileType.values()).filter(ContractFileType::isSupportVendor).toList();
|
||||
List<ContractFileType> types = Arrays.stream(ContractFileType.values())
|
||||
.filter(ContractFileType::isSupportVendor).toList();
|
||||
fileTypesField.getSourceItems().setAll(types);
|
||||
fileTypesField.setCellFactory(param -> new ListCell<>() {
|
||||
@Override
|
||||
@@ -110,7 +106,8 @@ public class VendorGroupRequireFilesTabSkin extends AbstVendorGroupBasedTabSkin
|
||||
ListView<?> targetListView = viewSkin.getTargetListView();
|
||||
targetListView.setOnMouseClicked(event -> {
|
||||
if (event.getClickCount() == 2) {
|
||||
ContractFileType selectedItem = (ContractFileType) targetListView.getSelectionModel().getSelectedItem();
|
||||
ContractFileType selectedItem = (ContractFileType) targetListView.getSelectionModel()
|
||||
.getSelectedItem();
|
||||
if (selectedItem != null) {
|
||||
// saveRoles(selectedItem);
|
||||
setStatus("selected " + selectedItem);
|
||||
@@ -131,7 +128,8 @@ public class VendorGroupRequireFilesTabSkin extends AbstVendorGroupBasedTabSkin
|
||||
ObservableList<ContractFileType> types = fileTypesField.getTargetItems();
|
||||
// 保存 types ,list 中是已经存储的,如果types 中没有则删除,如果 types 中有则新增保存
|
||||
for (ContractFileType type : types) {
|
||||
VendorGroupRequireFileType entity = list.stream().filter(v -> v.getFileType() == type).findFirst().orElse(null);
|
||||
VendorGroupRequireFileType entity = list.stream().filter(v -> v.getFileType() == type).findFirst()
|
||||
.orElse(null);
|
||||
if (entity == null) {
|
||||
entity = new VendorGroupRequireFileType();
|
||||
entity.setGroup(getEntity());
|
||||
@@ -147,16 +145,14 @@ public class VendorGroupRequireFilesTabSkin extends AbstVendorGroupBasedTabSkin
|
||||
}
|
||||
|
||||
public VendorGroupRequireFileTypeService getRequireFileTypeService() {
|
||||
if (requireFileTypeService == null) {
|
||||
requireFileTypeService = getBean(VendorGroupRequireFileTypeService.class);
|
||||
}
|
||||
return requireFileTypeService;
|
||||
return getCachedBean(VendorGroupRequireFileTypeService.class);
|
||||
}
|
||||
|
||||
public ContractFileService getContractFileService() {
|
||||
if (contractFileService == null) {
|
||||
contractFileService = SpringApp.getBean(ContractFileService.class);
|
||||
}
|
||||
return contractFileService;
|
||||
return getCachedBean(ContractFileService.class);
|
||||
}
|
||||
|
||||
public ContractFileTypeService getContractFileTypeService() {
|
||||
return getCachedBean(ContractFileTypeService.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +1,30 @@
|
||||
package com.ecep.contract.service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.ecep.contract.ContractFileType;
|
||||
import com.ecep.contract.model.Contract;
|
||||
import com.ecep.contract.model.ContractFile;
|
||||
import com.ecep.contract.model.ContractFileTypeLocal;
|
||||
import com.ecep.contract.vm.ContractFileViewModel;
|
||||
|
||||
@Service
|
||||
public class ContractFileService extends QueryService<ContractFile, ContractFileViewModel> {
|
||||
|
||||
public List<ContractFile> findAllByContract(Contract contract) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'findAllByContract'");
|
||||
}
|
||||
|
||||
public Map<ContractFileType, ContractFileTypeLocal> findAllFileTypes(String languageTag) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'findAllFileTypes'");
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("contract", contract.getId());
|
||||
return findAll(params, Pageable.unpaged()).getContent();
|
||||
}
|
||||
|
||||
public List<ContractFile> findAllByContractAndFileType(Contract contract, ContractFileType type) {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'findAllByContractAndFileType'");
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("contract", contract.getId());
|
||||
params.put("type", type.name());
|
||||
return findAll(params, Pageable.unpaged()).getContent();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.ecep.contract.service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.ecep.contract.ContractFileType;
|
||||
import com.ecep.contract.model.ContractFileTypeLocal;
|
||||
import com.ecep.contract.vm.ContractFileTypeLocalViewModel;
|
||||
|
||||
@Service
|
||||
@CacheConfig(cacheNames = "contract-file-type")
|
||||
public class ContractFileTypeService extends QueryService<ContractFileTypeLocal, 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()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -47,6 +47,7 @@ import com.ecep.contract.service.CompanyService;
|
||||
import com.ecep.contract.service.CompanyVendorService;
|
||||
import com.ecep.contract.service.ContractBidVendorService;
|
||||
import com.ecep.contract.service.ContractFileService;
|
||||
import com.ecep.contract.service.ContractFileTypeService;
|
||||
import com.ecep.contract.service.ContractService;
|
||||
import com.ecep.contract.service.EmployeeService;
|
||||
import com.ecep.contract.service.ExtendVendorInfoService;
|
||||
@@ -77,6 +78,7 @@ public class ContractVerifyComm {
|
||||
// Contract
|
||||
private ContractService contractService;
|
||||
private ContractFileService contractFileService;
|
||||
private ContractFileTypeService contractFileTypeService;
|
||||
private ContractBidVendorService contractBidVendorService;
|
||||
|
||||
// Company
|
||||
@@ -150,6 +152,13 @@ public class ContractVerifyComm {
|
||||
return contractFileService;
|
||||
}
|
||||
|
||||
private ContractFileTypeService getContractFileTypeService() {
|
||||
if (contractFileTypeService == null) {
|
||||
contractFileTypeService = SpringApp.getBean(ContractFileTypeService.class);
|
||||
}
|
||||
return contractFileTypeService;
|
||||
}
|
||||
|
||||
private ContractBidVendorService getContractBidVendorService() {
|
||||
if (contractBidVendorService == null) {
|
||||
contractBidVendorService = SpringApp.getBean(ContractBidVendorService.class);
|
||||
@@ -488,7 +497,7 @@ public class ContractVerifyComm {
|
||||
ContractFileTypeLocal getFileTypeLocal(ContractFileType type) {
|
||||
if (fileTypeLocalMap == null) {
|
||||
fileTypeLocalMap = FXCollections
|
||||
.observableMap(getContractFileService().findAllFileTypes(getLocale().toLanguageTag()));
|
||||
.observableMap(getContractFileTypeService().findAll(getLocale()));
|
||||
}
|
||||
return fileTypeLocalMap.get(type);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.ecep.contract.vm;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import com.ecep.contract.ContractFileType;
|
||||
import com.ecep.contract.model.ContractFileTypeLocal;
|
||||
|
||||
import javafx.beans.property.SimpleObjectProperty;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class ContractFileTypeLocalViewModel extends IdentityViewModel<ContractFileTypeLocal> {
|
||||
private SimpleObjectProperty<ContractFileType> type = new SimpleObjectProperty<>();
|
||||
private SimpleStringProperty suggestFileName = new SimpleStringProperty();
|
||||
private SimpleStringProperty lang = new SimpleStringProperty();
|
||||
private SimpleStringProperty value = new SimpleStringProperty();
|
||||
|
||||
@Override
|
||||
protected void updateFrom(ContractFileTypeLocal v) {
|
||||
super.updateFrom(v);
|
||||
type.set(v.getType());
|
||||
suggestFileName.set(v.getSuggestFileName());
|
||||
lang.set(v.getLang());
|
||||
value.set(v.getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean copyTo(ContractFileTypeLocal v) {
|
||||
boolean ret = super.copyTo(v);
|
||||
if (!Objects.equals(type.get(), v.getType())) {
|
||||
v.setType(type.get());
|
||||
ret = true;
|
||||
}
|
||||
if (!Objects.equals(suggestFileName.get(), v.getSuggestFileName())) {
|
||||
v.setSuggestFileName(suggestFileName.get());
|
||||
ret = true;
|
||||
}
|
||||
if (!Objects.equals(lang.get(), v.getLang())) {
|
||||
v.setLang(lang.get());
|
||||
ret = true;
|
||||
}
|
||||
if (!Objects.equals(value.get(), v.getValue())) {
|
||||
v.setValue(value.get());
|
||||
ret = true;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user