refactor(model): 重构模型类包结构并优化序列化处理

重构模型类包结构,将模型类按功能模块划分到不同的子包中。优化序列化处理,为VO类添加serialVersionUID并实现Serializable接口。移除部分冗余的serialVersionUID字段,简化模型类代码。同时修复UITools中空值处理的问题,并更新pom版本至0.0.100-SNAPSHOT。

- 将模型类按功能模块划分到ds子包中
- 为VO类添加序列化支持
- 移除冗余的serialVersionUID字段
- 修复UITools空值处理问题
- 更新项目版本号
This commit is contained in:
2025-10-09 18:27:48 +08:00
parent 51b8c16798
commit c4eec0a9dd
457 changed files with 8426 additions and 3669 deletions

View File

@@ -120,7 +120,8 @@ public class WebSocketClientService {
if (errorCode == WebSocketConstant.ERROR_CODE_UNAUTHORIZED) {
// 调用所有的 callbacks 和 session 失败并且移除
callbacks.keySet().stream().toList().forEach(key -> callbacks.remove(key).completeExceptionally(new Exception("未授权")));
callbacks.keySet().stream().toList()
.forEach(key -> callbacks.remove(key).completeExceptionally(new Exception("未授权")));
sessions.values().stream().toList().forEach(session -> {
session.updateMessage(java.util.logging.Level.SEVERE, "未授权");
session.close();
@@ -131,11 +132,11 @@ public class WebSocketClientService {
// 处理未授权错误,重新登录
OkHttpLoginController controller = new OkHttpLoginController();
controller.setHttpClient(Desktop.instance.getHttpClient());
controller.setProperties(SpringApp.getBean(MyProperties.class));
controller.tryLogin();
controller.tryLogin().get();
// 需要把窗口顶置
isActive = true;
scheduleReconnect();
initWebSocket();
}
return;
}

View File

@@ -6,6 +6,7 @@ import java.util.Map;
import java.util.UUID;
import java.util.logging.Level;
import javafx.application.Platform;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -120,7 +121,7 @@ public class WebSocketClientSession {
private void handleAsMessage(JsonNode args) {
String level = args.get(0).asText();
String message = args.get(1).asText();
updateMessage(java.util.logging.Level.parse(level), "[R] "+message);
updateMessage(java.util.logging.Level.parse(level), "[R] " + message);
}
public void updateMessage(Level level, String message) {

View File

@@ -61,28 +61,10 @@ public class OkHttpLoginController implements MessageHolder {
private MyProperties properties;
@Setter
private OkHttpClient httpClient;
private WebSocket webSocket;
private SimpleStringProperty serverUrl = new SimpleStringProperty();
private String webSocketUrl;
public OkHttpLoginController() {
this.httpClient = new OkHttpClient().newBuilder().cookieJar(new CookieJar() {
private final List<Cookie> cookies = new java.util.ArrayList<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
// 保存服务器返回的Cookie如JSESSIONID
this.cookies.addAll(cookies);
System.out.println("保存Cookie: " + cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
// 请求时自动携带Cookie
return cookies;
}
}).build();
}
@Override
@@ -375,21 +357,6 @@ public class OkHttpLoginController implements MessageHolder {
});
}
// WebSocket消息发送方法
public void sendMessage(String message) {
if (webSocket != null) {
webSocket.send(message);
}
}
// 关闭WebSocket连接
public void closeWebSocket() {
if (webSocket != null) {
webSocket.close(1000, "正常关闭");
webSocket = null;
}
}
static class MacIP {
String mac;
String ip;

View File

@@ -52,7 +52,7 @@ public class CloudTycManagerSkin
controller.cloudIdColumn.setCellValueFactory(param -> param.getValue().getCloudId());
controller.latestUpdateColumn.setCellValueFactory(param -> param.getValue().getLatest());
controller.latestUpdateColumn.setCellValueFactory(param -> param.getValue().getLatestUpdate());
controller.latestUpdateColumn.setCellFactory(param -> new LocalDateTimeTableCell<>());
controller.cloudLatestColumn.setCellValueFactory(param -> param.getValue().getCloudLatest());

View File

@@ -41,7 +41,7 @@ public class YongYouU8ManagerSkin
controller.cloudIdColumn.setCellValueFactory(param -> param.getValue().getCloudId());
controller.latestUpdateColumn.setCellValueFactory(param -> param.getValue().getLatest());
controller.latestUpdateColumn.setCellValueFactory(param -> param.getValue().getLatestUpdate());
controller.latestUpdateColumn.setCellFactory(param -> new LocalDateTimeTableCell<>());
controller.cloudLatestColumn.setCellValueFactory(param -> param.getValue().getCloudLatest());

View File

@@ -1,32 +1,13 @@
package com.ecep.contract.controller.company;
import java.lang.reflect.InvocationTargetException;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.CompletableFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.ecep.contract.controller.BaseController;
import com.ecep.contract.model.CompanyContact;
import com.ecep.contract.service.CompanyContactService;
import com.ecep.contract.util.FxmlUtils;
import com.ecep.contract.util.UITools;
import com.ecep.contract.vm.CompanyContactViewModel;
import com.ecep.contract.vo.CompanyContactVo;
import javafx.application.Platform;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
@@ -35,6 +16,16 @@ import javafx.stage.WindowEvent;
import javafx.util.converter.LocalDateStringConverter;
import lombok.Getter;
import lombok.Setter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.lang.reflect.InvocationTargetException;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.CompletableFuture;
@Lazy
@Scope("prototype")

View File

@@ -134,9 +134,9 @@ public class ContractTabSkinExtendVendorInfo extends AbstContractBasedTabSkin {
ExtendVendorInfoVo vendorInfo = loadedFuture.join();
if (viewModel.copyTo(vendorInfo)) {
// 注意这里需要根据实际service接口实现调整可能需要调用不同的方法
// ExtendVendorInfoVo saved = getExtendVendorInfoService().saveVo(vendorInfo);
// updateViewModel(saved);
// loadedFuture = CompletableFuture.completedFuture(saved);
ExtendVendorInfoVo saved = getExtendVendorInfoService().save(vendorInfo);
updateViewModel(saved);
loadedFuture = CompletableFuture.completedFuture(saved);
}
}
}

View File

@@ -11,17 +11,12 @@ import java.util.stream.Collectors;
import com.ecep.contract.ContractPayWay;
import com.ecep.contract.controller.tab.TabSkin;
import com.ecep.contract.controller.table.AbstEntityTableTabSkin;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractItem;
import com.ecep.contract.model.HistoryPrice;
import com.ecep.contract.model.Inventory;
import com.ecep.contract.model.InventoryHistoryPrice;
import com.ecep.contract.service.ContractItemService;
import com.ecep.contract.service.ContractService;
import com.ecep.contract.service.InventoryHistoryPriceService;
import com.ecep.contract.util.FxmlPath;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.util.ProxyUtils;
import com.ecep.contract.vm.InventoryHistoryPriceViewModel;
import com.ecep.contract.vm.InventoryViewModel;
import com.ecep.contract.vo.ContractItemVo;

View File

@@ -2,7 +2,6 @@ package com.ecep.contract.controller.project;
import com.ecep.contract.controller.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.controller.tab.TabSkin;
import com.ecep.contract.model.Project;
import com.ecep.contract.service.ProjectService;
import com.ecep.contract.vm.ProjectViewModel;
import com.ecep.contract.vo.ProjectVo;

View File

@@ -12,8 +12,6 @@ import com.ecep.contract.controller.table.EditableEntityTableTabSkin;
import com.ecep.contract.controller.table.cell.EmployeeTableCell;
import com.ecep.contract.converter.CompanyStringConverter;
import com.ecep.contract.converter.EmployeeStringConverter;
import com.ecep.contract.model.CompanyCustomerEvaluationFormFile;
import com.ecep.contract.model.Employee;
import com.ecep.contract.service.CompanyCustomerFileService;
import com.ecep.contract.service.CompanyCustomerService;
import com.ecep.contract.service.CompanyService;
@@ -36,7 +34,7 @@ public class ProjectTabSkinBid
public TableColumn<ProjectBidViewModel, Number> idColumn;
public TableColumn<ProjectBidViewModel, Number> versionColumn;
public TableColumn<ProjectBidViewModel, CompanyCustomerEvaluationFormFile> evaluationFileColumn;
public TableColumn<ProjectBidViewModel, Integer> evaluationFileColumn;
public TableColumn<ProjectBidViewModel, String> descriptionColumn;
public TableColumn<ProjectBidViewModel, Integer> applicantColumn;

View File

@@ -7,7 +7,6 @@ import com.ecep.contract.controller.project.cost.ProjectCostWindowController;
import com.ecep.contract.controller.tab.TabSkin;
import com.ecep.contract.controller.table.cell.EmployeeTableCell;
import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell;
import com.ecep.contract.model.ProjectCostItem;
import com.ecep.contract.service.ContractItemService;
import com.ecep.contract.service.ProjectCostItemService;
import com.ecep.contract.service.ProjectCostService;

View File

@@ -1,25 +1,12 @@
package com.ecep.contract.controller.project;
import org.controlsfx.control.textfield.AutoCompletionBinding;
import org.springframework.util.StringUtils;
import com.ecep.contract.controller.company.CompanyWindowController;
import com.ecep.contract.controller.tab.TabSkin;
import com.ecep.contract.converter.EntityStringConverter;
import com.ecep.contract.model.CompanyContact;
import com.ecep.contract.model.CompanyInvoiceInfo;
import com.ecep.contract.service.BankService;
import com.ecep.contract.service.CompanyBankAccountService;
import com.ecep.contract.service.CompanyContactService;
import com.ecep.contract.service.CompanyInvoiceInfoService;
import com.ecep.contract.service.CompanyService;
import com.ecep.contract.service.*;
import com.ecep.contract.util.FxmlPath;
import com.ecep.contract.util.UITools;
import com.ecep.contract.vo.BankVo;
import com.ecep.contract.vo.CompanyBankAccountVo;
import com.ecep.contract.vo.CompanyContactVo;
import com.ecep.contract.vo.CompanyVo;
import com.ecep.contract.vo.*;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.StringProperty;
import javafx.fxml.FXML;
@@ -27,6 +14,8 @@ import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TextField;
import org.controlsfx.control.textfield.AutoCompletionBinding;
import org.springframework.util.StringUtils;
@FxmlPath("/ui/project/project-tab-customer.fxml")
public class ProjectTabSkinCustomerInfo
@@ -101,7 +90,7 @@ public class ProjectTabSkinCustomerInfo
private void initInvoiceInfoField() {
invoiceInfoAutoCompletion(invoiceInfoField, invoiceInfoLabel, viewModel.getInvoiceInfo())
.setOnAutoCompleted(event -> {
CompanyInvoiceInfo invoiceInfo = event.getCompletion();
CompanyInvoiceInfoVo invoiceInfo = event.getCompletion();
viewModel.getInvoiceInfo().set(invoiceInfo.getId());
});
}
@@ -199,16 +188,16 @@ public class ProjectTabSkinCustomerInfo
return UITools.autoCompletion(textField, property, getBankAccountService());
}
private AutoCompletionBinding<CompanyInvoiceInfo> invoiceInfoAutoCompletion(TextField textField, Label label,
SimpleObjectProperty<Integer> property) {
EntityStringConverter<CompanyInvoiceInfo> converter = new EntityStringConverter<>();
private AutoCompletionBinding<CompanyInvoiceInfoVo> invoiceInfoAutoCompletion(TextField textField, Label label,
SimpleObjectProperty<Integer> property) {
EntityStringConverter<CompanyInvoiceInfoVo> converter = new EntityStringConverter<>();
converter.setInitialized(info -> getInvoiceInfoService().findById(info.getId()));
label.textProperty().bind(property.map(infoId -> {
if (infoId == null) {
return "未选择";
}
CompanyInvoiceInfo info = getInvoiceInfoService().findById(infoId);
CompanyInvoiceInfoVo info = getInvoiceInfoService().findById(infoId);
if (info == null) {
return "#" + infoId;
}

View File

@@ -13,8 +13,6 @@ import com.ecep.contract.ContractPayWay;
import com.ecep.contract.controller.tab.TabSkin;
import com.ecep.contract.controller.table.EditableEntityTableTabSkin;
import com.ecep.contract.controller.table.cell.NumberTableCell;
import com.ecep.contract.model.Project;
import com.ecep.contract.model.ProjectFundPlan;
import com.ecep.contract.service.ContractPayPlanService;
import com.ecep.contract.service.ContractService;
import com.ecep.contract.service.ProjectFundPlanService;

View File

@@ -90,6 +90,8 @@ public class ProjectTabSkinQuotation
@Override
public void initializeTable() {
super.initializeTable();
idColumn.setCellValueFactory(param -> param.getValue().getId());
levelColumn.setCellValueFactory(param -> param.getValue().getLevel());
levelColumn.setCellFactory(param -> new LevelTableCell());
standardPayWayColumn.setCellValueFactory(param -> param.getValue().getStandardPayWay()

View File

@@ -3,7 +3,6 @@ package com.ecep.contract.controller.project;
import java.time.format.DateTimeFormatter;
import com.ecep.contract.service.ProjectSaleTypeService;
import com.ecep.contract.util.ProxyUtils;
import com.ecep.contract.vo.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -12,15 +11,7 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.ecep.contract.SpringApp;
import com.ecep.contract.controller.AbstEntityController;
import com.ecep.contract.model.DeliverySignMethod;
import com.ecep.contract.model.ProductType;
import com.ecep.contract.model.ProductUsage;
import com.ecep.contract.model.Project;
import com.ecep.contract.model.ProjectIndustry;
import com.ecep.contract.model.ProjectSaleType;
import com.ecep.contract.model.ProjectType;
import com.ecep.contract.service.ContractService;
import com.ecep.contract.service.EmployeeService;
import com.ecep.contract.service.ProjectService;

View File

@@ -32,7 +32,6 @@ import org.springframework.util.StringUtils;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.constant.ContractConstant;
import com.ecep.contract.model.ProjectCostItem;
import com.ecep.contract.service.ProductTypeService;
import com.ecep.contract.service.ProjectCostItemService;
import com.ecep.contract.service.ProjectCostService;

View File

@@ -14,7 +14,6 @@ import com.ecep.contract.DesktopUtils;
import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.controller.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.controller.tab.TabSkin;
import com.ecep.contract.model.ContractFile;
import com.ecep.contract.service.ContractFileService;
import com.ecep.contract.service.ContractService;
import com.ecep.contract.service.ProjectService;

View File

@@ -1,16 +1,12 @@
package com.ecep.contract.controller.project.cost;
import com.ecep.contract.util.ProxyUtils;
import com.ecep.contract.vo.ProjectCostVo;
import com.ecep.contract.vo.ProjectVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.ecep.contract.controller.AbstEntityController;
import com.ecep.contract.model.Project;
import com.ecep.contract.model.ProjectCost;
import com.ecep.contract.service.ProjectCostService;
import com.ecep.contract.service.ProjectService;
import com.ecep.contract.util.FxmlPath;

View File

@@ -6,7 +6,6 @@ import com.ecep.contract.BlackReasonType;
import com.ecep.contract.controller.company.AbstCompanyTableTabSkin;
import com.ecep.contract.controller.company.CompanyWindowController;
import com.ecep.contract.controller.table.EditableEntityTableTabSkin;
import com.ecep.contract.model.CompanyBlackReason;
import com.ecep.contract.service.CloudRkService;
import com.ecep.contract.service.CompanyBlackReasonService;
import com.ecep.contract.util.FxmlPath;

View File

@@ -6,7 +6,6 @@ import com.ecep.contract.controller.company.AbstCompanyTableTabSkin;
import com.ecep.contract.controller.company.CompanyContactWindowController;
import com.ecep.contract.controller.company.CompanyWindowController;
import com.ecep.contract.controller.table.EditableEntityTableTabSkin;
import com.ecep.contract.model.CompanyContact;
import com.ecep.contract.service.CompanyContactService;
import com.ecep.contract.util.FxmlPath;
import com.ecep.contract.vm.CompanyContactViewModel;

View File

@@ -5,7 +5,6 @@ import java.io.IOException;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -14,16 +13,15 @@ import org.springframework.util.StringUtils;
import org.w3c.dom.html.HTMLDocument;
import com.ecep.contract.DesktopUtils;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.constant.CloudServiceConstant;
import com.ecep.contract.controller.company.AbstCompanyBasedTabSkin;
import com.ecep.contract.controller.company.CompanyWindowController;
import com.ecep.contract.model.Company;
import com.ecep.contract.service.CloudRkService;
import com.ecep.contract.service.CloudTycService;
import com.ecep.contract.service.CompanyExtendInfoService;
import com.ecep.contract.service.YongYouU8Service;
import com.ecep.contract.task.CompanyRkUpdateTasker;
import com.ecep.contract.util.DelayOnceExecutor;
import com.ecep.contract.util.FxmlPath;
import com.ecep.contract.util.UITools;
@@ -234,22 +232,18 @@ public class CompanyTabSkinOther
* @see #onCloudRkUpdateButtonClickedAction(ActionEvent)
*/
private void onCloudRkUpdateButtonClicked(ActionEvent actionEvent) throws IOException {
Button button = (Button) actionEvent.getSource();
CompanyVo company = getEntity();
MessageHolder holder = (level, message) -> {
setStatus(message);
if (level == Level.WARNING) {
logger.warn("{} {}", getEntity().getName(), message);
}
if (level == Level.SEVERE) {
logger.error("{} {}", getEntity().getName(), message);
}
};
CloudRkVo cloudRk = getCloudRkService().updateCloudRk(company, holder);
CompanyRkUpdateTasker task = new CompanyRkUpdateTasker();
task.setCompany(getEntity());
Platform.runLater(() -> {
UITools.showTaskDialogAndWait("更新企业信息", task, null);
CloudRkVo cloudRk = getCloudRkService().findByCompany(company);
rkCloudInfoViewModel.update(cloudRk);
});
}
private CloudRkService.EntInfo showEnterpriseChooser(List<CloudRkService.EntInfo> entInfos) {
@@ -384,7 +378,7 @@ public class CompanyTabSkinOther
cloudTycIdField.textProperty().bind(tycCloudInfoViewModel.getId().asString());
// 平台编号
cloudTycCloudIdField.textProperty().bindBidirectional(tycCloudInfoViewModel.getCloudId());
cloudTycLatestField.textProperty().bind(tycCloudInfoViewModel.getLatest().map(MyDateTimeUtils::format));
cloudTycLatestField.textProperty().bind(tycCloudInfoViewModel.getLatestUpdate().map(MyDateTimeUtils::format));
cloudTycVersionLabel.textProperty().bind(tycCloudInfoViewModel.getVersion().asString("Ver:%s"));
TextField cloudIdField = cloudTycCloudIdField;
@@ -424,7 +418,7 @@ public class CompanyTabSkinOther
cloudYuIdField.textProperty().bind(yuCloudInfoViewModel.getId().asString());
cloudYuCloudIdField.textProperty().bindBidirectional(yuCloudInfoViewModel.getCloudId());
cloudYuLatestField.textProperty().bind(yuCloudInfoViewModel.getLatest().map(MyDateTimeUtils::format));
cloudYuLatestField.textProperty().bind(yuCloudInfoViewModel.getLatestUpdate().map(MyDateTimeUtils::format));
cloudYuVersionLabel.textProperty().bind(yuCloudInfoViewModel.getVersion().asString("Ver:%s"));
Button button = yuCloudPaneSaveButton;

View File

@@ -10,7 +10,6 @@ import com.ecep.contract.controller.table.cell.EmployeeTableCell;
import com.ecep.contract.controller.table.cell.InvoiceTableCell;
import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell;
import com.ecep.contract.converter.EmployeeStringConverter;
import com.ecep.contract.model.Invoice;
import com.ecep.contract.service.InvoiceService;
import com.ecep.contract.service.PurchaseBillVoucherService;
import com.ecep.contract.service.YongYouU8Service;
@@ -23,7 +22,6 @@ import javafx.scene.control.MenuItem;
import javafx.scene.control.Tab;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.input.KeyCode;
import lombok.Setter;

View File

@@ -12,7 +12,6 @@ import com.ecep.contract.controller.table.EditableEntityTableTabSkin;
import com.ecep.contract.controller.table.cell.EmployeeTableCell;
import com.ecep.contract.controller.table.cell.InventoryTableCell;
import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell;
import com.ecep.contract.model.Contract;
import com.ecep.contract.service.ContractItemService;
import com.ecep.contract.service.InventoryService;
import com.ecep.contract.util.FxmlPath;
@@ -169,33 +168,6 @@ public class ContractTabSkinItemsV2
return inventoryService;
}
private void sum(ContractItemComposeViewModel model, Contract contract,
HashMap<String, ContractItemComposeViewModel> map) {
double inQuantity = map.values().stream().map(ContractItemComposeViewModel::getIn)
.mapToDouble(v -> v.getQuantity().get()).sum();
Platform.runLater(() -> model.getIn().getQuantity().set(inQuantity));
double inTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn)
.mapToDouble(v -> v.getTaxAmount().get()).sum();
Platform.runLater(() -> model.getIn().getTaxAmount().set(inTaxAmount));
double inExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn)
.mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum();
Platform.runLater(() -> model.getIn().getExclusiveTaxAmount().set(inExclusiveTaxAmount));
double outQuantity = map.values().stream().map(ContractItemComposeViewModel::getOut)
.mapToDouble(v -> v.getQuantity().get()).sum();
Platform.runLater(() -> model.getOut().getQuantity().set(outQuantity));
double outTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut)
.mapToDouble(v -> v.getTaxAmount().get()).sum();
Platform.runLater(() -> model.getOut().getTaxAmount().set(outTaxAmount));
double outExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut)
.mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum();
Platform.runLater(() -> model.getOut().getExclusiveTaxAmount().set(outExclusiveTaxAmount));
}
@Override
protected void createContextMenu(ContextMenu contextMenu) {
super.createContextMenu(contextMenu);

View File

@@ -1,19 +1,12 @@
package com.ecep.contract.controller.tab;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import com.ecep.contract.controller.contract.AbstContractTableTabSkin;
import com.ecep.contract.controller.contract.ContractWindowController;
import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell;
import com.ecep.contract.model.ContractPayPlan;
import com.ecep.contract.service.ContractPayPlanService;
import com.ecep.contract.service.ViewModelService;
import com.ecep.contract.util.FxmlPath;
import com.ecep.contract.vm.ContractPayPlanViewModel;
import com.ecep.contract.vo.ContractPayPlanVo;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Tab;
import javafx.scene.control.TableColumn;
@@ -21,6 +14,10 @@ import javafx.scene.control.cell.TextFieldTableCell;
import javafx.util.converter.CurrencyStringConverter;
import javafx.util.converter.NumberStringConverter;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
@FxmlPath("/ui/contract/contract-tab-pay-plan.fxml")
public class ContractTabSkinPayPlan extends AbstContractTableTabSkin<ContractPayPlanVo, ContractPayPlanViewModel> {

View File

@@ -12,8 +12,6 @@ import com.ecep.contract.controller.table.cell.LocalDateFieldTableCell;
import com.ecep.contract.converter.EmployeeStringConverter;
import com.ecep.contract.service.SaleOrdersService;
import com.ecep.contract.vm.SalesOrderViewModel;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.SalesOrder;
import com.ecep.contract.vo.SalesOrderVo;
import javafx.scene.control.Button;
@@ -21,7 +19,6 @@ import javafx.scene.control.MenuItem;
import javafx.scene.control.Tab;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.input.KeyCode;
import lombok.Setter;

View File

@@ -2,6 +2,7 @@ package com.ecep.contract.controller.tab;
import java.util.List;
import com.ecep.contract.service.ContractFileService;
import org.controlsfx.control.textfield.TextFields;
import com.ecep.contract.ContractPayWay;
@@ -85,7 +86,7 @@ public class ContractTabSkinVendorBid
bidVendorTable_companyColumn.setCellValueFactory(param -> param.getValue().getCompanyId());
bidVendorTable_companyColumn.setCellFactory(CompanyTableCell.forTableColumn(getCompanyService()));
bidVendorTable_quotationSheetColumn.setCellValueFactory(param -> param.getValue().getQuotationSheetFileId());
bidVendorTable_quotationSheetColumn.setCellFactory(ContractFileTableCell.forTableColumn(getContractService()));
bidVendorTable_quotationSheetColumn.setCellFactory(ContractFileTableCell.forTableColumn(SpringApp.getBean(ContractFileService.class)));
super.initializeTab();
}

View File

@@ -6,8 +6,6 @@ import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.SpringApp;
import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowController;
import com.ecep.contract.converter.EmployeeStringConverter;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.SalesOrder;
import com.ecep.contract.service.CompanyService;
import com.ecep.contract.service.ContractFileService;
import com.ecep.contract.util.UITools;

View File

@@ -5,33 +5,26 @@ import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowControll
import com.ecep.contract.controller.table.AbstEntityTableTabSkin;
import com.ecep.contract.controller.table.cell.EmployeeTableCell;
import com.ecep.contract.converter.EmployeeStringConverter;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractItem;
import com.ecep.contract.service.ContractService;
import com.ecep.contract.service.SaleOrdersService;
import com.ecep.contract.service.SalesBillVoucherService;
import com.ecep.contract.util.FxmlPath;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.util.ProxyUtils;
import com.ecep.contract.vm.ContractItemComposeViewModel;
import com.ecep.contract.vm.SalesBillVoucherViewModel;
import com.ecep.contract.vm.SalesOrderViewModel;
import com.ecep.contract.vo.ContractItemVo;
import com.ecep.contract.vo.ContractVo;
import com.ecep.contract.vo.SalesBillVoucherVo;
import com.ecep.contract.vo.SalesOrderVo;
import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.control.*;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.util.Callback;
import javafx.util.Duration;
import lombok.Setter;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -129,37 +122,6 @@ public class SalesOrderTabSkinBillVoucher
return getCachedBean(EmployeeStringConverter.class);
}
private void sum(ContractItemComposeViewModel model, Contract contract,
HashMap<String, ContractItemComposeViewModel> map) {
double inQuantity = map.values().stream().map(ContractItemComposeViewModel::getIn)
.mapToDouble(v -> v.getQuantity().get()).sum();
Platform.runLater(() -> model.getIn().getQuantity().set(inQuantity));
double inTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn)
.mapToDouble(v -> v.getTaxAmount().get()).sum();
Platform.runLater(() -> model.getIn().getTaxAmount().set(inTaxAmount));
double inExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn)
.mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum();
Platform.runLater(() -> model.getIn().getExclusiveTaxAmount().set(inExclusiveTaxAmount));
double outQuantity = map.values().stream().map(ContractItemComposeViewModel::getOut)
.mapToDouble(v -> v.getQuantity().get()).sum();
Platform.runLater(() -> model.getOut().getQuantity().set(outQuantity));
double outTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut)
.mapToDouble(v -> v.getTaxAmount().get()).sum();
Platform.runLater(() -> model.getOut().getTaxAmount().set(outTaxAmount));
double outExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut)
.mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum();
Platform.runLater(() -> model.getOut().getExclusiveTaxAmount().set(outExclusiveTaxAmount));
}
String makeKey(ContractItem item) {
return item.getTitle() + "-" + item.getSpecification();
}
static class NumberTableCell extends TableCell<SalesBillVoucherViewModel, Double> {
// "%.1f"
private final String format;

View File

@@ -11,7 +11,6 @@ import org.springframework.util.StringUtils;
import com.ecep.contract.SpringApp;
import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowController;
import com.ecep.contract.controller.table.AbstEntityTableTabSkin;
import com.ecep.contract.model.Contract;
import com.ecep.contract.service.ContractService;
import com.ecep.contract.service.SaleOrdersService;
import com.ecep.contract.service.SalesOrderItemService;
@@ -193,33 +192,6 @@ public class SalesOrderTabSkinItems
contextMenu.getItems().addAll(item2, item3);
}
private void sum(ContractItemComposeViewModel model, Contract contract,
HashMap<String, ContractItemComposeViewModel> map) {
double inQuantity = map.values().stream().map(ContractItemComposeViewModel::getIn)
.mapToDouble(v -> v.getQuantity().get()).sum();
Platform.runLater(() -> model.getIn().getQuantity().set(inQuantity));
double inTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn)
.mapToDouble(v -> v.getTaxAmount().get()).sum();
Platform.runLater(() -> model.getIn().getTaxAmount().set(inTaxAmount));
double inExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getIn)
.mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum();
Platform.runLater(() -> model.getIn().getExclusiveTaxAmount().set(inExclusiveTaxAmount));
double outQuantity = map.values().stream().map(ContractItemComposeViewModel::getOut)
.mapToDouble(v -> v.getQuantity().get()).sum();
Platform.runLater(() -> model.getOut().getQuantity().set(outQuantity));
double outTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut)
.mapToDouble(v -> v.getTaxAmount().get()).sum();
Platform.runLater(() -> model.getOut().getTaxAmount().set(outTaxAmount));
double outExclusiveTaxAmount = map.values().stream().map(ContractItemComposeViewModel::getOut)
.mapToDouble(v -> v.getExclusiveTaxAmount().get()).sum();
Platform.runLater(() -> model.getOut().getExclusiveTaxAmount().set(outExclusiveTaxAmount));
}
String makeKey(ContractItemVo item) {
return item.getTitle() + "-" + item.getSpecification();
}

View File

@@ -2,7 +2,9 @@ package com.ecep.contract.controller.table.cell;
import static com.ecep.contract.SpringApp.getBean;
import com.ecep.contract.service.ContractFileService;
import com.ecep.contract.service.ContractService;
import com.ecep.contract.vo.ContractFileVo;
import com.ecep.contract.vo.ContractVo;
import javafx.scene.control.TableCell;
@@ -11,56 +13,56 @@ import javafx.util.Callback;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class ContractFileTableCell<V> extends AsyncUpdateTableCell<V, Integer, ContractVo> {
public class ContractFileTableCell<V> extends AsyncUpdateTableCell<V, Integer, ContractFileVo> {
/**
* 创建一个ContractFileTableCell的TableCell工厂自动获取ContractService实例
*
*
* @param <S> 表格行类型
* @return TableCell工厂回调
*/
public static <S> Callback<TableColumn<S, Integer>, TableCell<S, Integer>> forTableColumn() {
return forTableColumn(getBean(ContractService.class));
return forTableColumn(getBean(ContractFileService.class));
}
/**
* 创建一个ContractFileTableCell的TableCell工厂使用提供的ContractService实例
*
* 创建一个ContractFileTableCell的TableCell工厂使用提供的ContractFileService实例
*
* @param <S> 表格行类型
* @param service ContractService实例
* @return TableCell工厂回调
*/
public static <S> Callback<TableColumn<S, Integer>, TableCell<S, Integer>> forTableColumn(ContractService service) {
public static <S> Callback<TableColumn<S, Integer>, TableCell<S, Integer>> forTableColumn(ContractFileService service) {
return param -> new ContractFileTableCell<S>(service);
}
/**
* 使用指定的ContractService创建ContractFileTableCell实例
*
* 使用指定的ContractFileService创建ContractFileTableCell实例
*
* @param contractService ContractService实例
*/
public ContractFileTableCell(ContractService contractService) {
public ContractFileTableCell(ContractFileService contractService) {
setService(contractService);
}
/**
* 获取ContractService实例
*
*
* @return ContractService实例
*/
@Override
protected ContractService getServiceBean() {
return getBean(ContractService.class);
protected ContractFileService getServiceBean() {
return getBean(ContractFileService.class);
}
/**
* 格式化ContractVo对象为显示文本
*
*
* @param entity ContractVo对象
* @return 格式化后的文本
*/
@Override
public String format(ContractVo entity) {
return entity.getCode() + " " + entity.getName();
public String format(ContractFileVo entity) {
return entity.getFileName();
}
}

View File

@@ -94,7 +94,7 @@ public class VendorTabSkinFile
.observableMap(getCachedBean(VendorFileTypeService.class).findAll(getLocale()));
fileTable_typeColumn.setCellValueFactory(param -> Bindings.valueAt(observableMapByLocal,
param.getValue().getType()).map(BaseEnumEntity::getValue));
param.getValue().getType()).map(VendorFileTypeLocalVo::getValue));
fileTable_filePathColumn.setCellValueFactory(param -> param.getValue().getFilePath());
fileTable_filePathColumn.setCellFactory(param -> new FileTableFilePathTableCell());

View File

@@ -20,7 +20,6 @@ import org.springframework.util.StringUtils;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.VendorFileType;
import com.ecep.contract.VendorType;
import com.ecep.contract.model.Vendor;
import com.ecep.contract.service.VendorService;
import com.ecep.contract.task.Tasker;
import com.ecep.contract.util.ParamUtils;
@@ -408,7 +407,6 @@ public class VendorApprovedListVendorImportTask extends Tasker<Object> {
* @param item 供方名录中供应商的条目
* @param holder 消息输出器
* @return true if qualified
* @see #findAllEvaluationFormFiles(Vendor, LocalDate)
*/
private boolean checkAsQualifiedVendorByEvaluationFormFiles(
VendorVo vendor, VendorApprovedItemVo item, MessageHolder holder) {

View File

@@ -13,8 +13,8 @@ public class BankStringConverter extends StringConverter<BankVo> {
}
@Override
public String toString(BankVo object) {
return object == null ? "" : object.getCode() + " " + object.getName();
public String toString(BankVo bank) {
return bank == null ? "" : bank.getCode() + " " + bank.getName();
}
@Override

View File

@@ -8,7 +8,6 @@ import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.ecep.contract.Desktop;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.task.CloudRkSyncTask;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vm.CloudRkViewModel;
@@ -48,11 +47,6 @@ public class CloudRkService extends QueryService<CloudRkVo, CloudRkViewModel> {
}, 1, TimeUnit.MINUTES);
}
public CloudRkVo updateCloudRk(CompanyVo company, MessageHolder holder) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'updateCloudRk'");
}
public CloudRkVo getOrCreateCloudRk(CompanyVo company) {
CloudRkVo cloudRk = findByCompany(company);
if (cloudRk == null) {

View File

@@ -4,14 +4,14 @@ import java.util.List;
import org.springframework.stereotype.Service;
import com.ecep.contract.model.Company;
import com.ecep.contract.vm.CompanyBankAccountViewModel;
import com.ecep.contract.vo.CompanyBankAccountVo;
import com.ecep.contract.vo.CompanyVo;
@Service
public class CompanyBankAccountService extends QueryService<CompanyBankAccountVo, CompanyBankAccountViewModel> {
public List<CompanyBankAccountVo> searchByCompany(Company company, String searchText) {
public List<CompanyBankAccountVo> searchByCompany(CompanyVo company, String searchText) {
throw new UnsupportedOperationException("未实现");
}
}

View File

@@ -6,7 +6,6 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.ecep.contract.model.Company;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.util.ParamUtils.Builder;
import com.ecep.contract.vm.CompanyContactViewModel;
@@ -16,7 +15,7 @@ import com.ecep.contract.vo.CompanyVo;
@Service
public class CompanyContactService extends QueryService<CompanyContactVo, CompanyContactViewModel> {
public List<CompanyContactVo> searchByCompany(Company company, String searchText) {
public List<CompanyContactVo> searchByCompany(CompanyVo company, String searchText) {
Builder params = getSpecification(searchText);
params.equals("company", company);
List<CompanyContactVo> list = findAll(params.build(), Pageable.ofSize(10)).getContent();

View File

@@ -16,8 +16,6 @@ import com.ecep.contract.CustomerFileType;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.SpringApp;
import com.ecep.contract.constant.CompanyCustomerConstant;
import com.ecep.contract.model.CompanyCustomer;
import com.ecep.contract.model.CompanyCustomerEvaluationFormFile;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vm.CompanyCustomerFileViewModel;
import com.ecep.contract.vo.CompanyCustomerFileVo;

View File

@@ -1,32 +1,17 @@
package com.ecep.contract.service;
import java.io.File;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.ecep.contract.vo.CompanyOldNameVo;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import com.ecep.contract.CompanyFileType;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.SpringApp;
import com.ecep.contract.constant.CloudServiceConstant;
import com.ecep.contract.constant.CompanyConstant;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyFile;
import com.ecep.contract.model.CompanyOldName;
import com.ecep.contract.util.FileUtils;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vm.CompanyFileViewModel;
import com.ecep.contract.vo.CompanyFileVo;

View File

@@ -6,10 +6,7 @@ import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vm.CompanyFileTypeLocalViewModel;
import com.ecep.contract.vo.CompanyFileTypeLocalVo;
import javafx.util.StringConverter;
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.cache.annotation.*;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@@ -36,13 +33,21 @@ public class CompanyFileTypeService extends QueryService<CompanyFileTypeLocalVo,
return super.findAll();
}
@Caching(put = { @CachePut(key = "#p0.id"), @CachePut(key = "'all'") })
@Caching(put = {@CachePut(key = "#p0.id")},
evict = {
@CacheEvict(key = "'type-'+#p0.lang+'-'+#p0.type.name()"),
@CacheEvict(key = "'all'")
})
@Override
public CompanyFileTypeLocalVo save(CompanyFileTypeLocalVo entity) {
return super.save(entity);
}
@Caching(put = { @CachePut(key = "#p0.id"), @CachePut(key = "'all'") })
@Caching(evict = {
@CacheEvict(key = "#p0.id"),
@CacheEvict(key = "'type-'+#p0.lang+'-'+#p0.type.name()"),
@CacheEvict(key = "'all'")
})
@Override
public void delete(CompanyFileTypeLocalVo entity) {
super.delete(entity);
@@ -61,7 +66,7 @@ public class CompanyFileTypeService extends QueryService<CompanyFileTypeLocalVo,
/**
* 根据语言标签和参数查找单个 CompanyFileTypeLocalVo 对象
*
*
* @param locale 语言区域
* @param key 参数键
* @param value 参数值
@@ -77,6 +82,7 @@ public class CompanyFileTypeService extends QueryService<CompanyFileTypeLocalVo,
return findOneByLang(locale, "value", string);
}
@Cacheable(key = "'type-'+#p0.toLanguageTag()+'-'+#p1.name()")
public CompanyFileTypeLocalVo findByLocaleAndType(Locale locale, CompanyFileType type) {
return findOneByLang(locale, "type", type);
}

View File

@@ -1,8 +1,8 @@
package com.ecep.contract.service;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyInvoiceInfo;
import com.ecep.contract.vm.CompanyInvoiceInfoViewModel;
import com.ecep.contract.vo.CompanyInvoiceInfoVo;
import com.ecep.contract.vo.CompanyVo;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@@ -12,9 +12,9 @@ import java.util.Map;
@Service
public class CompanyInvoiceInfoService extends QueryService<CompanyInvoiceInfo, CompanyInvoiceInfoViewModel> {
public class CompanyInvoiceInfoService extends QueryService<CompanyInvoiceInfoVo, CompanyInvoiceInfoViewModel> {
public List<CompanyInvoiceInfo> searchByCompany(Company company, String searchText) {
public List<CompanyInvoiceInfoVo> searchByCompany(CompanyVo company, String searchText) {
Map<String, Object> params = new HashMap<>();
params.put("company", company);
params.put("searchText", searchText);

View File

@@ -5,7 +5,6 @@ import java.util.List;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.ecep.contract.model.Contract;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vm.ContractPayPlanViewModel;
import com.ecep.contract.vo.ContractPayPlanVo;
@@ -14,11 +13,7 @@ import com.ecep.contract.vo.ContractVo;
@Service
public class ContractPayPlanService extends QueryService<ContractPayPlanVo, ContractPayPlanViewModel> {
public List<ContractPayPlanVo> findAllByContract(Contract contract) {
return findAll(ParamUtils.builder()
.equals("contract", contract.getId())
.build(), Pageable.unpaged()).getContent();
}
public List<ContractPayPlanVo> findAllByContract(ContractVo contract) {
return findAll(ParamUtils.builder()

View File

@@ -21,7 +21,7 @@ public class ExtendVendorInfoService extends QueryService<ExtendVendorInfoVo, Ex
public ExtendVendorInfoVo findByContract(ContractVo contract) {
Page<ExtendVendorInfoVo> page = findAll(ParamUtils.builder()
.equals("contract", contract).build(),
.equals("contract", contract).build(),
Pageable.ofSize(1));
if (page.isEmpty()) {
return null;

View File

@@ -10,7 +10,6 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.ecep.contract.model.ProductType;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vm.ProductTypeViewModel;
import com.ecep.contract.vo.ProductTypeVo;

View File

@@ -1,6 +1,7 @@
package com.ecep.contract.service;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@@ -13,6 +14,12 @@ import com.ecep.contract.vo.ProjectTypeVo;
@CacheConfig(cacheNames = "project-type")
public class ProjectTypeService extends QueryService<ProjectTypeVo, ProjectTypeViewModel> {
@Cacheable(key = "#p0")
@Override
public ProjectTypeVo findById(Integer id) {
return super.findById(id);
}
public ProjectTypeVo findByName(String name) {
Page<ProjectTypeVo> page = findAll(ParamUtils.builder().equals("name", name).build(), Pageable.ofSize(1));
if (page.isEmpty()) {

View File

@@ -3,7 +3,6 @@ package com.ecep.contract.service;
import com.ecep.contract.vo.SalesOrderVo;
import org.springframework.stereotype.Service;
import com.ecep.contract.model.SalesOrder;
import com.ecep.contract.vm.SalesOrderViewModel;
@Service

View File

@@ -47,6 +47,6 @@ public class VendorEntityService extends QueryService<VendorEntityVo, CompanyVen
@Override
public String getBeanName() {
// 确保返回正确的服务名称
return "companyVendorEntityService";
return "vendorEntityService";
}
}

View File

@@ -13,7 +13,6 @@ import org.springframework.stereotype.Service;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.VendorFileType;
import com.ecep.contract.model.Vendor;
import com.ecep.contract.model.VendorFileTypeLocal;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vm.CompanyVendorFileViewModel;
@@ -27,11 +26,6 @@ public class VendorFileService extends QueryService<VendorFileVo, CompanyVendorF
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'getNextSignDate'");
}
public LocalDate getNextSignDate(Vendor vendor, Consumer<String> state) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'getNextSignDate'");
}
public Map<VendorFileType, VendorFileTypeLocal> getFileTypeLocalMap(Locale locale) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'getFileTypeLocalMap'");

View File

@@ -17,7 +17,6 @@ import com.ecep.contract.MessageHolder;
import com.ecep.contract.SpringApp;
import com.ecep.contract.VendorType;
import com.ecep.contract.constant.CompanyVendorConstant;
import com.ecep.contract.model.Vendor;
import com.ecep.contract.model.VendorCatalog;
import com.ecep.contract.util.CompanyUtils;
import com.ecep.contract.util.FileUtils;
@@ -71,11 +70,6 @@ public class VendorService extends QueryService<VendorVo, CompanyVendorViewModel
throw new UnsupportedOperationException("Unimplemented method 'reBuildingFiles'");
}
public boolean reBuildingFiles(Vendor vendor, MessageHolder messageHolder) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'reBuildingFiles'");
}
public void verify(ContractVo contract, MessageHolder holder) {
CompanyVo company = companyService.findById(contract.getCompanyId());
if (company == null) {

View File

@@ -4,18 +4,38 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.WebSocketClientTasker;
import com.ecep.contract.vo.CompanyVo;
import lombok.Setter;
/**
* 集团相关方平台同步任务
* <p>
* 定时任务每30分钟同步一次集团相关方平台的相关方信息
* <p>
* 任务执行时会调用集团相关方平台的API获取相关方信息并更新到数据库中。
*/
public class CloudRkSyncTask extends Tasker<Object> {
public class CloudRkSyncTask extends Tasker<Object> implements WebSocketClientTasker {
private static final Logger logger = LoggerFactory.getLogger(CloudRkSyncTask.class);
@Setter
private CompanyVo company;
@Override
protected Object execute(MessageHolder holder) throws Exception {
updateTitle("集团相关方平台");
updateProgress(1, 1);
return null;
updateTitle(String.format("集团相关方平台同步任务[%s]", company.getName()));
return callRemoteTask(holder, getLocale(), company.getId());
}
@Override
public void updateProgress(long workDone, long max) {
super.updateProgress(workDone, max);
}
@Override
public String getTaskName() {
return "CloudRkSyncTask";
}
}

View File

@@ -0,0 +1,30 @@
package com.ecep.contract.task;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.WebSocketClientTasker;
import com.ecep.contract.vo.CompanyVo;
import lombok.Setter;
public class CompanyRkUpdateTasker extends Tasker<Object> implements WebSocketClientTasker {
@Setter
CompanyVo company;
@Override
public String getTaskName() {
return "CompanyRkUpdateTasker";
}
@Override
public void updateProgress(long workDone, long max) {
super.updateProgress(workDone, max);
}
@Override
protected Object execute(MessageHolder holder) throws Exception {
updateTitle("合并更新 " + company.getName());
return callRemoteTask(holder, getLocale(), company.getId());
}
}

View File

@@ -1,38 +1,24 @@
package com.ecep.contract.task;
import com.ecep.contract.*;
import com.ecep.contract.controller.project.cost.ProjectCostImportItemsFromContractsTasker;
import com.ecep.contract.model.ContractFileTypeLocal;
import com.ecep.contract.service.*;
import com.ecep.contract.vo.*;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.collections.ObservableMap;
import javafx.util.converter.NumberStringConverter;
import lombok.Data;
import org.springframework.util.StringUtils;
import java.io.File;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.DoubleSummaryStatistics;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
import com.ecep.contract.service.*;
import com.ecep.contract.vo.*;
import org.springframework.util.StringUtils;
import com.ecep.contract.CustomerFileType;
import com.ecep.contract.ContractFileType;
import com.ecep.contract.ContractPayWay;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.SpringApp;
import com.ecep.contract.controller.project.cost.ProjectCostImportItemsFromContractsTasker;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractFileTypeLocal;
import com.ecep.contract.service.VendorService;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.collections.ObservableMap;
import javafx.util.converter.NumberStringConverter;
import lombok.Data;
@Data
public class ContractVerifyComm {
// Project
@@ -208,7 +194,6 @@ public class ContractVerifyComm {
*/
private ObservableMap<ContractFileType, ContractFileTypeLocal> fileTypeLocalMap = null;
private Locale locale = Locale.getDefault();
private Contract contract;
/**
* 是否验证企业存储目录
@@ -380,17 +365,15 @@ public class ContractVerifyComm {
vendorInfo = getExtendVendorInfoService().save(info);
holder.info("创建供应商信息 #" + vendorInfo.getId());
}
Integer groupId = vendorInfo.getGroupId();
VendorGroupVo group = vendorGroupService.findById(groupId);
VendorGroupVo group = null;
if (vendorInfo.getGroupId() != null) {
group = getVendorGroupService().findById(vendorInfo.getGroupId());
}
boolean assignedProvider = vendorInfo.isAssignedProvider();
if (assignedProvider) {
holder.debug("采购信息中设定为指定供应商");
}
if (group != null) {
group = getVendorGroupService().findById(groupId);
vendorInfo.setGroupId(group.getId());
}
if (verifyCustomerSubContractDate.get()) {
// 检查子合同日期是否在销售合同之后
if (!vendorInfo.isPrePurchase()) {
@@ -424,7 +407,7 @@ public class ContractVerifyComm {
ContractFileService fileService = getContractFileService();
List<ContractFileVo> files = fileService.findAllByContract(contract);
List<VendorGroupRequireFileTypeVo> list = getVendorGroupRequireFileTypeService().findByGroupId(group.getId());
if (list != null && !list.isEmpty()) {
if (list != null) {
for (VendorGroupRequireFileTypeVo item : list) {
ContractFileType fileType = item.getFileType();
if (fileType == null) {
@@ -453,26 +436,42 @@ public class ContractVerifyComm {
holder.error("未上报供应商比价");
} else {
for (ContractBidVendorVo bidVendor : bidVendors) {
if (bidVendor.getCompanyId() == null) {
holder.warn("供应商比价:#" + bidVendor.getId() + " 未关联供应商");
continue;
}
CompanyVo company = getCompanyService().findById(bidVendor.getCompanyId());
ContractFileVo contractFile = fileService.findById(bidVendor.getQuotationSheetFileId());
// 报价表文件不存在
if (contractFile == null) {
if (requireQuotation && bidVendor.getCompanyId().equals(contract.getCompanyId())) {
holder.debug("供应商类型启用了允许选中供应商不必须要有报价表");
} else {
CompanyVo company = getCompanyService().findById(bidVendor.getCompanyId());
holder.error("供应商比价:" + company.getName() + " 未上传/关联报价表");
loseFile = true;
}
} else {
contractFile = fileService.findById(contractFile.getId());
ContractFileType type = contractFile.getType();
if (type == null) {
continue;
}
if (type != ContractFileType.QuotationSheet) {
holder.error("供应商比价:" + contractFile.getFileName() + " 报价表记录异常,类型错误");
}
File file = new File(contract.getPath(), contractFile.getFileName());
if (!file.exists()) {
holder.error("供应商比价:" + file.getName() + " 报价表记录异常,文件不存在");
loseFile = true;
} else {
if (StringUtils.hasText(contractFile.getFileName())) {
File file = new File(contract.getPath(), contractFile.getFileName());
if (!file.exists()) {
holder.error("供应商比价:" + file.getName() + " 报价表记录异常,文件不存在");
loseFile = true;
}
} else {
holder.error("供应商比价:" + company.getName() + " 报价表记录异常");
loseFile = true;
}
}
}
}
}

View File

@@ -260,6 +260,10 @@ public class UITools {
// 监听 property 变化
idProperty.addListener((observable, oldValue, newValue) -> {
if (newValue == null) {
textField.textProperty().set(null);
return;
}
T newEntity = queryService.findById(newValue);
textField.textProperty().set(converter.toString(newEntity));
});

View File

@@ -1,6 +1,7 @@
package com.ecep.contract.vm;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.vo.CloudRkVo;
@@ -95,7 +96,7 @@ public class CloudRkViewModel extends IdentityViewModel<CloudRkVo> {
vm.updateFrom(v);
return vm;
}
@Override
protected void updateFrom(CloudRkVo v) {
super.updateFrom(v);
@@ -122,24 +123,78 @@ public class CloudRkViewModel extends IdentityViewModel<CloudRkVo> {
@Override
public boolean copyTo(CloudRkVo v) {
boolean result = super.copyTo(v);
v.setCloudId(cloudId.get());
v.setUpdateDays(updateDays.get());
v.setAutoUpdate(autoUpdate.get());
v.setDescription(description.get());
v.setRank(rank.get());
v.setRankDescription(rankDescription.get());
v.setCustomerGrade(customerGrade.get());
v.setCustomerDescription(customerDescription.get());
v.setCustomerScore(customerScore.get());
v.setVendorGrade(vendorGrade.get());
v.setVendorDescription(vendorDescription.get());
v.setVendorScore(vendorScore.get());
v.setCompanyId(company.get());
v.setLatestUpdate(latestUpdate.get());
v.setCloudEntUpdate(cloudEntUpdate.get());
v.setCloudBlackListUpdated(cloudBlackListUpdated.get());
v.setCloudLatest(cloudLatest.get());
v.setVersion(version.get());
if (!Objects.equals(v.getCloudId(), cloudId.get())) {
v.setCloudId(cloudId.get());
result = true;
}
if (!Objects.equals(v.getUpdateDays(), updateDays.get())) {
v.setUpdateDays(updateDays.get());
result = true;
}
if (!Objects.equals(v.isAutoUpdate(), autoUpdate.get())) {
v.setAutoUpdate(autoUpdate.get());
result = true;
}
if (!Objects.equals(v.getDescription(), description.get())) {
v.setDescription(description.get());
result = true;
}
if (!Objects.equals(v.getRank(), rank.get())) {
v.setRank(rank.get());
result = true;
}
if (!Objects.equals(v.getRankDescription(), rankDescription.get())) {
v.setRankDescription(rankDescription.get());
result = true;
}
if (!Objects.equals(v.getCustomerGrade(), customerGrade.get())) {
v.setCustomerGrade(customerGrade.get());
result = true;
}
if (!Objects.equals(v.getCustomerDescription(), customerDescription.get())) {
v.setCustomerDescription(customerDescription.get());
result = true;
}
if (!Objects.equals(v.getCustomerScore(), customerScore.get())) {
v.setCustomerScore(customerScore.get());
result = true;
}
if (!Objects.equals(v.getVendorGrade(), vendorGrade.get())) {
v.setVendorGrade(vendorGrade.get());
result = true;
}
if (!Objects.equals(v.getVendorDescription(), vendorDescription.get())) {
v.setVendorDescription(vendorDescription.get());
result = true;
}
if (!Objects.equals(v.getVendorScore(), vendorScore.get())) {
v.setVendorScore(vendorScore.get());
result = true;
}
if (!Objects.equals(v.getCompanyId(), company.get())) {
v.setCompanyId(company.get());
result = true;
}
if (!Objects.equals(v.getLatestUpdate(), latestUpdate.get())) {
v.setLatestUpdate(latestUpdate.get());
result = true;
}
if (!Objects.equals(v.getCloudEntUpdate(), cloudEntUpdate.get())) {
v.setCloudEntUpdate(cloudEntUpdate.get());
result = true;
}
if (!Objects.equals(v.getCloudBlackListUpdated(), cloudBlackListUpdated.get())) {
v.setCloudBlackListUpdated(cloudBlackListUpdated.get());
result = true;
}
if (!Objects.equals(v.getCloudLatest(), cloudLatest.get())) {
v.setCloudLatest(cloudLatest.get());
result = true;
}
if (!Objects.equals(v.getVersion(), version.get())) {
v.setVersion(version.get());
result = true;
}
return result;
}
}

View File

@@ -16,57 +16,52 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CloudTycInfoViewModel extends IdentityViewModel<CloudTycVo> {
/**
* 云端Id
*/
private SimpleStringProperty cloudId = new SimpleStringProperty();
/**
* 公司, Company
*/
private SimpleObjectProperty<Integer> company = new SimpleObjectProperty<>();
/**
* 云端Id
*/
private SimpleStringProperty cloudId = new SimpleStringProperty();
/**
* 天眼查得分
*/
private SimpleIntegerProperty score = new SimpleIntegerProperty();
private SimpleObjectProperty<LocalDateTime> cloudLatest = new SimpleObjectProperty<>();
/**
* 最后更新日期
*/
private SimpleObjectProperty<LocalDateTime> latest = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDateTime> latestUpdate = new SimpleObjectProperty<>();
/**
* Version
*/
private SimpleIntegerProperty version = new SimpleIntegerProperty();
private SimpleIntegerProperty score = new SimpleIntegerProperty();
private SimpleObjectProperty<LocalDateTime> cloudLatest = new SimpleObjectProperty<>();
@Override
protected void updateFrom(CloudTycVo info) {
super.updateFrom(info);
update_((CloudTycVo) info);
}
private void update_(CloudTycVo info) {
score.set(info.getScore());
cloudId.set(info.getCloudId());
company.set(info.getCompanyId());
if (info.getCloudLatest() != null) {
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = info.getCloudLatest().atZone(zone);
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
cloudLatest.set(localDateTime);
cloudLatest.set(info.getCloudLatest());
} else {
cloudLatest.set(null);
}
latestUpdate.set(info.getLatestUpdate());
version.set(info.getVersion());
}
@Override
public boolean copyTo(CloudTycVo info) {
boolean modified = super.copyTo(info);
if (copyTo_((CloudTycVo) info)) {
if (!Objects.equals(info.getCompanyId(), getCompany().get())) {
info.setCompanyId(getCompany().get());
modified = true;
}
return modified;
}
private boolean copyTo_(CloudTycVo info) {
boolean modified = super.copyTo(info);
if (!Objects.equals(info.getId(), getId().get())) {
info.setId(getId().get());
if (!Objects.equals(info.getCloudId(), cloudId.get())) {
info.setCloudId(cloudId.get());
modified = true;
}
@@ -79,6 +74,14 @@ public class CloudTycInfoViewModel extends IdentityViewModel<CloudTycVo> {
info.setCloudLatest(cloudLatest.get());
modified = true;
}
if (!Objects.equals(info.getLatestUpdate(), latestUpdate.get())) {
info.setLatestUpdate(latestUpdate.get());
modified = true;
}
if (!Objects.equals(info.getVersion(), version.get())) {
info.setVersion(version.get());
modified = true;
}
return modified;
}

View File

@@ -26,11 +26,8 @@ public class CloudYuInfoViewModel extends IdentityViewModel<CloudYuVo> {
/**
* 最后更新日期
*/
private SimpleObjectProperty<LocalDateTime> latest = new SimpleObjectProperty<>();
/**
* Version
*/
private SimpleIntegerProperty version = new SimpleIntegerProperty();
private SimpleObjectProperty<LocalDateTime> latestUpdate = new SimpleObjectProperty<>();
private SimpleStringProperty vendorCode = new SimpleStringProperty();
private SimpleStringProperty vendorClassCode = new SimpleStringProperty();
private SimpleObjectProperty<LocalDate> vendorDevelopDate = new SimpleObjectProperty<>();
@@ -41,17 +38,20 @@ public class CloudYuInfoViewModel extends IdentityViewModel<CloudYuVo> {
private SimpleObjectProperty<LocalDateTime> cloudLatest = new SimpleObjectProperty<>();
/**
* Version
*/
private SimpleIntegerProperty version = new SimpleIntegerProperty();
@Override
protected void updateFrom(CloudYuVo info) {
super.updateFrom(info);
update_((CloudYuVo) info);
}
private void update_(CloudYuVo info) {
vendorCode.set(info.getExceptionMessage());
vendorDevelopDate.set(info.getVendorUpdateDate());
customerDevelopDate.set(info.getCustomerUpdateDate());
cloudLatest.set(info.getCloudLatest());
latestUpdate.set(info.getLatestUpdate());
version.set(info.getVersion());
}
@Override
@@ -82,6 +82,14 @@ public class CloudYuInfoViewModel extends IdentityViewModel<CloudYuVo> {
info.setCloudLatest(cloudLatest.get());
modified = true;
}
if (!Objects.equals(info.getLatestUpdate(), latestUpdate.get())) {
info.setLatestUpdate(latestUpdate.get());
modified = true;
}
if (!Objects.equals(info.getVersion(), version.get())) {
info.setVersion(version.get());
modified = true;
}
return modified;
}

View File

@@ -1,17 +1,15 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.CompanyContact;
import com.ecep.contract.vo.CompanyContactVo;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDate;
import java.util.Objects;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyContactViewModel extends IdentityViewModel<CompanyContactVo> {

View File

@@ -1,13 +1,45 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.CustomerFileType;
import com.ecep.contract.vo.CustomerFileTypeLocalVo;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class CompanyCustomerFileTypeLocalViewModel extends EnumViewModel<CustomerFileType, CustomerFileTypeLocalVo> {
public class CompanyCustomerFileTypeLocalViewModel extends IdentityViewModel<CustomerFileTypeLocalVo> {
private SimpleObjectProperty<CustomerFileType> type = new SimpleObjectProperty<>();
private SimpleStringProperty lang = new SimpleStringProperty();
private SimpleStringProperty value = new SimpleStringProperty();
@Override
protected void updateFrom(CustomerFileTypeLocalVo v) {
super.updateFrom(v);
type.set(v.getType());
lang.set(v.getLang());
value.set(v.getValue());
}
@Override
public boolean copyTo(CustomerFileTypeLocalVo v) {
boolean ret = super.copyTo(v);
if (!Objects.equals(v.getType(), type.get())) {
v.setType(type.get());
ret = true;
}
if (!Objects.equals(v.getLang(), lang.get())) {
v.setLang(lang.get());
ret = true;
}
if (!Objects.equals(v.getValue(), value.get())) {
v.setValue(value.get());
ret = true;
}
return ret;
}
}

View File

@@ -1,17 +1,14 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.CompanyExtendInfo;
import com.ecep.contract.vo.CompanyExtendInfoVo;
import com.ecep.contract.vo.CompanyVo;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Objects;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyExtendInfoViewModel extends IdentityViewModel<CompanyExtendInfoVo> {

View File

@@ -1,19 +1,17 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.CompanyFileType;
import com.ecep.contract.model.CompanyFile;
import com.ecep.contract.vo.CompanyFileVo;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDate;
import java.util.Objects;
/**
* View Model for {@link CompanyFile}
* View Model for {@link CompanyFileVo}
*/
@Data
@EqualsAndHashCode(callSuper = false)

View File

@@ -1,16 +1,15 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.model.CompanyInvoiceInfo;
import com.ecep.contract.vo.CompanyInvoiceInfoVo;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Objects;
@Data
@EqualsAndHashCode(callSuper = false)
public class CompanyInvoiceInfoViewModel extends IdentityViewModel<CompanyInvoiceInfo> {
public class CompanyInvoiceInfoViewModel extends IdentityViewModel<CompanyInvoiceInfoVo> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty taxId = new SimpleStringProperty();
private SimpleStringProperty address = new SimpleStringProperty();
@@ -19,7 +18,7 @@ public class CompanyInvoiceInfoViewModel extends IdentityViewModel<CompanyInvoic
private SimpleStringProperty bankAccount = new SimpleStringProperty();
@Override
protected void updateFrom(CompanyInvoiceInfo v) {
protected void updateFrom(CompanyInvoiceInfoVo v) {
super.updateFrom(v);
name.set(v.getName());
taxId.set(v.getTaxId());
@@ -30,7 +29,7 @@ public class CompanyInvoiceInfoViewModel extends IdentityViewModel<CompanyInvoic
}
@Override
public boolean copyTo(CompanyInvoiceInfo v) {
public boolean copyTo(CompanyInvoiceInfoVo v) {
boolean ret = super.copyTo(v);
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());

View File

@@ -33,7 +33,6 @@ public class ContractBidVendorViewModel extends IdentityViewModel<ContractBidVen
getContractId().set(v.getContractId() != null ? v.getContractId() : 0);
getCompanyId().set(v.getCompanyId() != null ? v.getCompanyId() : 0);
getQuotationSheetFileId().set(v.getQuotationSheetFileId() != null ? v.getQuotationSheetFileId() : 0);
getQuotationSheetFileName().set(v.getQuotationSheetFileName());
}
@Override
@@ -51,10 +50,6 @@ public class ContractBidVendorViewModel extends IdentityViewModel<ContractBidVen
v.setQuotationSheetFileId(getQuotationSheetFileId().get() != 0 ? getQuotationSheetFileId().get() : null);
modified = true;
}
if (!Objects.equals(getQuotationSheetFileName().get(), v.getQuotationSheetFileName())) {
v.setQuotationSheetFileName(getQuotationSheetFileName().get());
modified = true;
}
return modified;
}
}

View File

@@ -3,9 +3,8 @@ package com.ecep.contract.vm;
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;
@@ -13,18 +12,36 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ContractFileTypeLocalViewModel extends EnumViewModel<ContractFileType, ContractFileTypeLocalVo> {
public class ContractFileTypeLocalViewModel extends IdentityViewModel<ContractFileTypeLocalVo> {
private SimpleObjectProperty<ContractFileType> type = new SimpleObjectProperty<>();
private SimpleStringProperty lang = new SimpleStringProperty();
private SimpleStringProperty value = new SimpleStringProperty();
private SimpleStringProperty suggestFileName = new SimpleStringProperty();
@Override
protected void updateFrom(ContractFileTypeLocalVo v) {
super.updateFrom(v);
type.set(v.getType());
lang.set(v.getLang());
value.set(v.getValue());
suggestFileName.set(v.getSuggestFileName());
}
@Override
public boolean copyTo(ContractFileTypeLocalVo v) {
boolean ret = super.copyTo(v);
if (!Objects.equals(type.get(), v.getType())) {
v.setType(type.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;
}
if (!Objects.equals(suggestFileName.get(), v.getSuggestFileName())) {
v.setSuggestFileName(suggestFileName.get());
ret = true;

View File

@@ -1,8 +1,6 @@
package com.ecep.contract.vm;
import com.ecep.contract.model.ContractItem;
import com.ecep.contract.vo.ContractItemVo;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleListProperty;

View File

@@ -4,8 +4,6 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.ContractPayPlan;
import com.ecep.contract.vo.ContractPayPlanVo;
import javafx.beans.property.SimpleDoubleProperty;

View File

@@ -1,11 +1,45 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.CustomerFileType;
import com.ecep.contract.vo.CustomerFileTypeLocalVo;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class CustomerFileTypeLocalViewModel extends EnumViewModel<CustomerFileType, CustomerFileTypeLocalVo> {
public class CustomerFileTypeLocalViewModel extends IdentityViewModel<CustomerFileTypeLocalVo> {
private SimpleObjectProperty<CustomerFileType> type = new SimpleObjectProperty<>();
private SimpleStringProperty lang = new SimpleStringProperty();
private SimpleStringProperty value = new SimpleStringProperty();
@Override
protected void updateFrom(CustomerFileTypeLocalVo v) {
super.updateFrom(v);
type.set(v.getType());
lang.set(v.getLang());
value.set(v.getValue());
}
@Override
public boolean copyTo(CustomerFileTypeLocalVo v) {
boolean ret = super.copyTo(v);
if (!Objects.equals(v.getType(), type.get())) {
v.setType(type.get());
ret = true;
}
if (!Objects.equals(v.getLang(), lang.get())) {
v.setLang(lang.get());
ret = true;
}
if (!Objects.equals(v.getValue(), value.get())) {
v.setValue(value.get());
ret = true;
}
return ret;
}
}

View File

@@ -11,6 +11,7 @@ import com.ecep.contract.model.Price;
import com.ecep.contract.model.VolumeSize;
import com.ecep.contract.vo.InventoryVo;
import com.ecep.contract.vo.VolumeSizeVo;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleFloatProperty;
@@ -102,13 +103,13 @@ public class InventoryViewModel extends IdentityViewModel<InventoryVo> {
getWeight().set(v.getWeight());
getPackagedWeight().set(v.getPackagedWeight());
VolumeSize volumeSize = v.getVolumeSize();
VolumeSizeVo volumeSize = v.getVolumeSize();
getSizeLength().set(volumeSize.getLength());
getSizeWidth().set(volumeSize.getWidth());
getSizeHeight().set(volumeSize.getHeight());
getVolume().set(volumeSize.getVolume());
VolumeSize packagedVolumeSize = v.getPackagedVolumeSize();
VolumeSizeVo packagedVolumeSize = v.getPackagedVolumeSize();
getPackagedSizeLength().set(packagedVolumeSize.getLength());
getPackagedSizeWidth().set(packagedVolumeSize.getWidth());
getPackagedSizeHeight().set(packagedVolumeSize.getHeight());
@@ -208,7 +209,7 @@ public class InventoryViewModel extends IdentityViewModel<InventoryVo> {
modified = true;
}
VolumeSize volumeSize = v.getVolumeSize();
VolumeSizeVo volumeSize = v.getVolumeSize();
if (!Objects.equals(getSizeLength().get(), volumeSize.getLength())) {
volumeSize.setLength(getSizeLength().get());
modified = true;
@@ -226,7 +227,7 @@ public class InventoryViewModel extends IdentityViewModel<InventoryVo> {
modified = true;
}
VolumeSize packagedVolumeSize = v.getPackagedVolumeSize();
VolumeSizeVo packagedVolumeSize = v.getPackagedVolumeSize();
if (!Objects.equals(getPackagedSizeHeight().get(), packagedVolumeSize.getHeight())) {
packagedVolumeSize.setHeight(getPackagedSizeHeight().get());
modified = true;

View File

@@ -1,12 +1,45 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.ProjectFileType;
import com.ecep.contract.vo.ProjectFileTypeLocalVo;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class ProjectFileTypeLocalViewModel extends EnumViewModel<ProjectFileType, ProjectFileTypeLocalVo> {
public class ProjectFileTypeLocalViewModel extends IdentityViewModel<ProjectFileTypeLocalVo> {
private SimpleObjectProperty<ProjectFileType> type = new SimpleObjectProperty<>();
private SimpleStringProperty lang = new SimpleStringProperty();
private SimpleStringProperty value = new SimpleStringProperty();
@Override
protected void updateFrom(ProjectFileTypeLocalVo v) {
super.updateFrom(v);
type.set(v.getType());
lang.set(v.getLang());
value.set(v.getValue());
}
@Override
public boolean copyTo(ProjectFileTypeLocalVo v) {
boolean ret = super.copyTo(v);
if (!Objects.equals(v.getType(), type.get())) {
v.setType(type.get());
ret = true;
}
if (!Objects.equals(v.getLang(), lang.get())) {
v.setLang(lang.get());
ret = true;
}
if (!Objects.equals(v.getValue(), value.get())) {
v.setValue(value.get());
ret = true;
}
return ret;
}
}

View File

@@ -3,9 +3,6 @@ package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.Contract;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.SalesOrder;
import com.ecep.contract.vo.SalesOrderVo;
import javafx.beans.property.SimpleIntegerProperty;

View File

@@ -1,38 +1,34 @@
package com.ecep.contract.vm;
import java.time.LocalDate;
import java.util.Objects;
import com.ecep.contract.model.Vendor;
import com.ecep.contract.model.VendorEntity;
import com.ecep.contract.model.Employee;
import com.ecep.contract.model.VendorCatalog;
import com.ecep.contract.vo.VendorEntityVo;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDate;
import java.util.Objects;
@Data
@EqualsAndHashCode(callSuper = false)
public class VendorEntityViewModel extends IdentityViewModel<VendorEntity> {
public class VendorEntityViewModel extends IdentityViewModel<VendorEntityVo> {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleStringProperty abbName = new SimpleStringProperty();
private SimpleStringProperty code = new SimpleStringProperty();
/**
* 分组
*/
private SimpleObjectProperty<VendorCatalog> catalog = new SimpleObjectProperty<>();
private SimpleObjectProperty<Integer> catalog = new SimpleObjectProperty<>();
/**
* 关联的企业
*/
private SimpleObjectProperty<Vendor> vendor = new SimpleObjectProperty<>();
private SimpleObjectProperty<Integer> vendor = new SimpleObjectProperty<>();
/**
* 发展日期
*/
private SimpleObjectProperty<LocalDate> developDate = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> creator = new SimpleObjectProperty<>();
private SimpleObjectProperty<Employee> modifier = new SimpleObjectProperty<>();
private SimpleObjectProperty<Integer> creator = new SimpleObjectProperty<>();
private SimpleObjectProperty<Integer> modifier = new SimpleObjectProperty<>();
private SimpleObjectProperty<LocalDate> modifyDate = new SimpleObjectProperty<>();
/**
* 从U8系统同步时间
@@ -40,30 +36,29 @@ public class VendorEntityViewModel extends IdentityViewModel<VendorEntity> {
private SimpleObjectProperty<LocalDate> updatedDate = new SimpleObjectProperty<>();
public static VendorEntityViewModel from(VendorEntity cc) {
public static VendorEntityViewModel from(VendorEntityVo cc) {
VendorEntityViewModel model = new VendorEntityViewModel();
model.update(cc);
return model;
}
@Override
protected void updateFrom(VendorEntity v) {
protected void updateFrom(VendorEntityVo v) {
super.updateFrom(v);
getName().set(v.getName());
getAbbName().set(v.getAbbName());
getCode().set(v.getCode());
getCatalog().set(v.getCatalog());
getVendor().set(v.getVendor());
getCatalog().set(v.getCatalogId());
getVendor().set(v.getVendorId());
getDevelopDate().set(v.getDevelopDate());
getCreator().set(v.getCreator());
getModifier().set(v.getModifier());
getCreator().set(v.getCreatorId());
getModifier().set(v.getModifierId());
getModifyDate().set(v.getModifyDate());
getUpdatedDate().set(v.getUpdatedDate());
}
@Override
public boolean copyTo(VendorEntity v) {
public boolean copyTo(VendorEntityVo v) {
boolean modified = super.copyTo(v);
if (!Objects.equals(name.get(), v.getName())) {
v.setName(name.get());
@@ -77,24 +72,24 @@ public class VendorEntityViewModel extends IdentityViewModel<VendorEntity> {
v.setCode(code.get());
modified = true;
}
if (!Objects.equals(catalog.get(), v.getCatalog())) {
v.setCatalog(catalog.get());
if (!Objects.equals(catalog.get(), v.getCatalogId())) {
v.setCatalogId(catalog.get());
modified = true;
}
if (!Objects.equals(vendor.get(), v.getVendor())) {
v.setVendor(vendor.get());
if (!Objects.equals(vendor.get(), v.getVendorId())) {
v.setVendorId(vendor.get());
modified = true;
}
if (!Objects.equals(developDate.get(), v.getDevelopDate())) {
v.setDevelopDate(developDate.get());
modified = true;
}
if (!Objects.equals(creator.get(), v.getCreator())) {
v.setCreator(creator.get());
if (!Objects.equals(creator.get(), v.getCreatorId())) {
v.setCreatorId(creator.get());
modified = true;
}
if (!Objects.equals(modifier.get(), v.getModifier())) {
v.setModifier(modifier.get());
if (!Objects.equals(modifier.get(), v.getModifierId())) {
v.setModifierId(modifier.get());
modified = true;
}
if (!Objects.equals(modifyDate.get(), v.getModifyDate())) {

View File

@@ -1,11 +1,45 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.VendorFileType;
import com.ecep.contract.vo.VendorFileTypeLocalVo;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class VendorFileTypeLocalViewModel extends EnumViewModel<VendorFileType, VendorFileTypeLocalVo> {
public class VendorFileTypeLocalViewModel extends IdentityViewModel<VendorFileTypeLocalVo> {
private SimpleObjectProperty<VendorFileType> type = new SimpleObjectProperty<>();
private SimpleStringProperty lang = new SimpleStringProperty();
private SimpleStringProperty value = new SimpleStringProperty();
@Override
protected void updateFrom(VendorFileTypeLocalVo v) {
super.updateFrom(v);
type.set(v.getType());
lang.set(v.getLang());
value.set(v.getValue());
}
@Override
public boolean copyTo(VendorFileTypeLocalVo v) {
boolean ret = super.copyTo(v);
if (!Objects.equals(v.getType(), type.get())) {
v.setType(type.get());
ret = true;
}
if (!Objects.equals(v.getLang(), lang.get())) {
v.setLang(lang.get());
ret = true;
}
if (!Objects.equals(v.getValue(), value.get())) {
v.setValue(value.get());
ret = true;
}
return ret;
}
}

View File

@@ -1,11 +1,45 @@
package com.ecep.contract.vm;
import java.util.Objects;
import com.ecep.contract.VendorType;
import com.ecep.contract.vo.VendorTypeLocalVo;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class VendorTypeLocalViewModel extends EnumViewModel<VendorType, VendorTypeLocalVo> {
public class VendorTypeLocalViewModel extends IdentityViewModel<VendorTypeLocalVo> {
private SimpleObjectProperty<VendorType> type = new SimpleObjectProperty<>();
private SimpleStringProperty lang = new SimpleStringProperty();
private SimpleStringProperty value = new SimpleStringProperty();
@Override
protected void updateFrom(VendorTypeLocalVo v) {
super.updateFrom(v);
type.set(v.getType());
lang.set(v.getLang());
value.set(v.getValue());
}
@Override
public boolean copyTo(VendorTypeLocalVo v) {
boolean ret = super.copyTo(v);
if (!Objects.equals(v.getType(), type.get())) {
v.setType(type.get());
ret = true;
}
if (!Objects.equals(v.getLang(), lang.get())) {
v.setLang(lang.get());
ret = true;
}
if (!Objects.equals(v.getValue(), value.get())) {
v.setValue(value.get());
ret = true;
}
return ret;
}
}

View File

@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
@@ -29,7 +30,7 @@
<Menu mnemonicParsing="false" text="用友U8">
<items>
<MenuItem mnemonicParsing="false" onAction="#createNewU8ContractSyncTaskAction"
text="同步合同"/>
text="同步合同"/>
<MenuItem mnemonicParsing="false" onAction="#openYongYouResourceWindow" text="用友U8…"/>
</items>
</Menu>
@@ -49,10 +50,9 @@
</Menu>
<Menu text="帮助(_H)">
<items>
<MenuItem mnemonicParsing="false" onAction="#openInBrowse" text="国家企业信用信息公示系统"
userData="https://www.gsxt.gov.cn/"/>
<MenuItem mnemonicParsing="false" onAction="#openInBrowse" text="天眼查-商业查询平台"
userData="https://www.tianyancha.com/"/>
<MenuItem mnemonicParsing="false" onAction="#openInBrowse" text="信用中国" userData="https://www.creditchina.gov.cn/"/>
<MenuItem mnemonicParsing="false" onAction="#openInBrowse" text="国家企业信用信息公示系统" userData="https://www.gsxt.gov.cn/"/>
<MenuItem mnemonicParsing="false" onAction="#openInBrowse" text="天眼查-商业查询平台" userData="https://www.tianyancha.com/"/>
<MenuItem mnemonicParsing="false" text="关于"/>
</items>
</Menu>
@@ -61,7 +61,7 @@
<ToolBar prefHeight="40.0" prefWidth="200.0">
<items>
<Button fx:id="openCompanyManagerWindow" mnemonicParsing="false" style="-fx-padding: 6px;"
userData="com.ecep.contract.manager.ds.company.controller.CompanyManagerWindowController">
userData="com.ecep.contract.manager.ds.company.controller.CompanyManagerWindowController">
<graphic>
<VBox alignment="CENTER">
<children>
@@ -141,7 +141,7 @@
</Button>
<!-- 客户 -->
<Button fx:id="openCustomManagerWindow" layoutX="138.0" layoutY="10.0" mnemonicParsing="false"
style="-fx-padding: 6px;">
style="-fx-padding: 6px;">
<graphic>
<VBox alignment="CENTER">
<children>
@@ -175,7 +175,7 @@
<Label fx:id="leftStatusLabel" text="Label" wrapText="true"/>
<Pane prefHeight="12.0" prefWidth="12.0" HBox.hgrow="ALWAYS"/>
<Label fx:id="rightStatusLabel" layoutX="10.0" layoutY="10.0" text="-" wrapText="true"
HBox.hgrow="SOMETIMES">
HBox.hgrow="SOMETIMES">
<HBox.margin>
<Insets left="6.0"/>
</HBox.margin>
@@ -184,7 +184,7 @@
<Label fx:id="webSocketMonitorLabel" text="WebSocket"/>
<Label fx:id="taskMonitorLabel" text="任务监控"/>
<Label fx:id="employeeStatusLabel" layoutX="711.0" layoutY="10.0" text="管理员" wrapText="true"
HBox.hgrow="SOMETIMES">
HBox.hgrow="SOMETIMES">
<HBox.margin>
<Insets left="6.0"/>
</HBox.margin>