Compare commits

...

10 Commits

Author SHA1 Message Date
7b57cb0f01 删除 null 2025-08-24 22:24:14 +08:00
danyz
5575f0c17d feat(权限管理): 为角色和功能添加启用状态字段
- 在EMPLOYEE_ROLE表中添加IS_ACTIVE字段,默认值为TRUE
- 在EmployeeRole和Function实体类中添加active字段
- 在角色和功能管理界面添加启用状态列和控件
- 实现TaskMonitorCenter与状态栏标签的绑定
- 更新相关ViewModel以支持启用状态
- 配置Maven仓库地址
2025-08-24 22:23:24 +08:00
danyz
fa1d63413f fix(ui): 修复供应商表格单元格初始化问题并优化代码结构
修复供应商表格单元格在显示供应商名称时的初始化问题,优化异步加载逻辑
重构CompanyVendorTableCell及相关代码,提高可维护性
调整.gitignore中config.properties的路径格式
清理配置文件中注释掉的数据库连接信息
更新FXML布局文件中的控件属性
2025-08-24 16:53:38 +08:00
32624f336b refactor(ui): 重构表格单元格渲染逻辑
- 新增 BankTableCell、DepartmentTableCell 等通用表格单元格类
- 优化 CompanyTableCell 结构,提高可复用性
- 在 CompanyTabSkinBankAccount 和 CompanyTabSkinContract 中使用新的表格单元格类
- 更新 EmployeeManagerSkin 中的部门列渲染方式
2025-08-24 00:09:31 +08:00
524fccc4ed refactor(ui): 重构用户界面组件和架构
- 将 AbstEntityBasedTabSkin 和 AbstEntityTableTabSkin 移到 ui.tab 包
- 创建新的 AsyncUpdateTableCell 类用于异步加载数据
- 重构 CompanyTableCell 以使用新的 AsyncUpdateTableCell
- 更新多个控制器以使用新的 tab 包和 cell 类
- 调整导入路径和包结构以适应重构
2025-08-23 22:53:09 +08:00
danyz
8135acf16a feat: 添加功能模块相关字段和界面优化
- 在FUNC表中添加CONTROLLER、ICON和DESCRIPTION字段
- 重构角色管理相关类名和路径
- 优化公司表格单元格显示逻辑
- 添加功能权限管理界面
- 优化日志配置和FXML文件引用
- 移除冗余代码和注释
2025-08-23 18:39:05 +08:00
danyz
6cbe3f37ee style(ui): 统一调整多个管理窗口的高度为680像素
调整了公司、库存、部门、功能、项目、客户、员工、银行、角色等多个管理窗口的预设高度,从不同高度统一为680像素,保持界面一致性。同时优化了部分导入语句的格式。
2025-08-23 11:06:07 +08:00
danyz
c6b3b35997 refactor: 将Desktop功能重构到DesktopUtils类中
重构Desktop类的浏览器和文件资源管理器功能到新的DesktopUtils工具类,提高代码可维护性
修改多处调用点使用新的工具类方法
更新数据库连接默认主机地址
为CurrentEmployee类添加@ToString注解
2025-08-23 10:33:35 +08:00
danyz
2b013feaf1 feat: 添加CurrentEmployeeInitialedEvent并重构初始化逻辑
添加CurrentEmployeeInitialedEvent事件类,用于在员工初始化完成后发布事件
重构HomeWindowController中的初始化逻辑,使用事件监听方式处理管理员任务调度
更新Unit类实现IdentityEntity和NamedEntity接口
移除SysConf类中多余的注释
在.gitignore中添加config.properties忽略规则
2025-08-23 01:30:50 +08:00
d736f2d3e1 refactor(task): 重构任务监控界面和任务调度逻辑
- 将任务监控界面改为TabPane布局,优化UI结构
- 重构任务调度逻辑,使用统一的ExecutorService
- 修改TaskStatus枚举,将UN_SCHEDULED改为DELAYED
- 优化MonitoredTask实现,改进任务状态管理
- 移除冗余代码,清理无用导入
- 添加调试日志配置
2025-08-22 22:00:03 +08:00
226 changed files with 2713 additions and 2011 deletions

2
.gitignore vendored
View File

@@ -34,3 +34,5 @@ build/
### VS Code ### ### VS Code ###
.vscode/ .vscode/
/config.properties

View File

@@ -1,9 +1,9 @@
#Updated config.properties #Updated config.properties
#Wed Mar 26 16:33:45 CST 2025 #Wed Mar 26 16:33:45 CST 2025
cloud.u8.enabled=true cloud.u8.enabled=true
db.server.database=supplier_ms #db.server.database=supplier_ms
db.server.host=db-server1.ecctrl.com #db.server.host=10.84.209.8
db.server.password=ecep.62335656 #db.server.password=ecep.62335656
db.server.port=3306 #db.server.port=3306
db.server.username=ecep #db.server.username=ecep
username_password.remember=true username_password.remember=true

View File

@@ -0,0 +1,4 @@
-- 添加CONTROLLER、ICON和DESCRIPTION字段到FUNC表
ALTER TABLE supplier_ms.FUNC
ADD COLUMN DESCRIPTION VARCHAR(255);

2
docs/structs.sql Normal file
View File

@@ -0,0 +1,2 @@
ALTER TABLE supplier_ms.EMPLOYEE_ROLE
ADD COLUMN IS_ACTIVE BOOLEAN DEFAULT TRUE;

17
pom.xml
View File

@@ -163,7 +163,22 @@
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
</dependencies> </dependencies>
<repositories>
<repository>
<id>gitea</id>
<url>http://10.84.210.110/api/packages/songqq/maven</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>gitea</id>
<url>http://10.84.210.110/api/packages/songqq/maven</url>
</repository>
<snapshotRepository>
<id>gitea</id>
<url>http://10.84.210.110/api/packages/songqq/maven</url>
</snapshotRepository>
</distributionManagement>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>

View File

@@ -25,7 +25,7 @@ public class AppV2 {
System.out.println("AppV2.done"); System.out.println("AppV2.done");
} }
public static final String DEFAULT_DB_HOST = "10.84.209.145"; // "db-server1.ecctrl.com" public static final String DEFAULT_DB_HOST = "10.84.209.154"; // "db-server1.ecctrl.com"
public static final String DEFAULT_DB_PORT = "3306"; public static final String DEFAULT_DB_PORT = "3306";
public static final String DEFAULT_DB_USERNAME = "supplier_ms"; public static final String DEFAULT_DB_USERNAME = "supplier_ms";
public static final String DEFAULT_DB_PASSWORD = "[TPdseO!JKMmlrpf"; public static final String DEFAULT_DB_PASSWORD = "[TPdseO!JKMmlrpf";

View File

@@ -1,25 +1,29 @@
package com.ecep.contract.manager; package com.ecep.contract.manager;
import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ds.other.model.EmployeeRole;
import com.ecep.contract.manager.ds.other.service.EmployeeService;
import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel;
import javafx.application.Platform;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ds.other.model.EmployeeRole;
import com.ecep.contract.manager.ds.other.service.EmployeeService;
import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel;
import javafx.application.Platform;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import lombok.ToString;
/** /**
* 当前登录用户 * 当前登录用户
*/ */
@ToString(of = {"id", "name", "email", "phone", "roles"})
public class CurrentEmployee extends EmployeeViewModel { public class CurrentEmployee extends EmployeeViewModel {
private static final Logger logger = LoggerFactory.getLogger(CurrentEmployee.class); private static final Logger logger = LoggerFactory.getLogger(CurrentEmployee.class);
/** /**
@@ -69,6 +73,8 @@ public class CurrentEmployee extends EmployeeViewModel {
Platform.runLater(() -> { Platform.runLater(() -> {
update(employee); update(employee);
rolesProperty().setAll(roles); rolesProperty().setAll(roles);
// 发布事件
SpringApp.context.publishEvent(new CurrentEmployeeInitialedEvent(this));
future.complete(null); future.complete(null);
}); });
}); });

View File

@@ -0,0 +1,19 @@
package com.ecep.contract.manager;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
@Getter
public class CurrentEmployeeInitialedEvent extends ApplicationEvent {
private final CurrentEmployee employee;
public CurrentEmployeeInitialedEvent(CurrentEmployee employee) {
super(employee);
this.employee = employee;
}
@Override
public CurrentEmployee getSource() {
return employee;
}
}

View File

@@ -22,7 +22,6 @@ import lombok.Getter;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.util.StringUtils;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
@@ -31,7 +30,6 @@ import java.net.URL;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.function.Consumer;
import java.util.logging.Level; import java.util.logging.Level;
/** /**
@@ -41,74 +39,9 @@ import java.util.logging.Level;
* Created by ecep on 2017/05/08. * Created by ecep on 2017/05/08.
*/ */
public class Desktop extends Application { public class Desktop extends Application {
private static final Logger logger = LoggerFactory.getLogger(Desktop.class); public static final Logger logger = LoggerFactory.getLogger(Desktop.class);
public static Desktop instance; public static Desktop instance;
/**
* 在默认浏览器中打开指定的URL。
* <p>
* 该函数使用JavaFX的HostServices类来调用系统默认的浏览器并打开传入的URL。
*
* @param url 要在浏览器中打开的URL字符串。该参数不能为空且应为有效的URL格式。
*/
public static void showInBrowse(String url) {
instance.getHostServices().showDocument(url);
}
/**
* 在系统的文件资源管理器中打开指定的文件夹。
* <p>
* 该方法首先尝试使用 java.awt.Desktop API 打开文件夹。如果该 API 不支持,
* 则在 Windows 系统中使用 explorer.exe 打开文件夹。
*
* @param dir 要打开的文件夹对象。如果为 null 或无效路径,可能会抛出异常。
* @throws RuntimeException 如果使用 java.awt.Desktop 打开文件夹时发生 IOException
* 则将其包装为 RuntimeException 抛出。
*/
public static void showInExplorer(File dir) {
if (java.awt.Desktop.isDesktopSupported()) {
try {
java.awt.Desktop.getDesktop().open(dir);
} catch (IOException e) {
throw new RuntimeException(e);
}
} else {
try {
// 在Windows中使用explorer.exe打开文件夹路径用双引号括起来
Process process = Runtime.getRuntime().exec(
new String[] { "explorer.exe", "\"" + dir.getAbsolutePath() + "\"" }, null, new File("."));
// process.waitFor();
} catch (IOException e) {
if (logger.isDebugEnabled()) {
logger.debug("Unable open {}", dir.getAbsolutePath(), e);
}
}
}
}
public static void checkAndShowInExplorer(String path, Consumer<String> consumer) {
if (!StringUtils.hasText(path)) {
consumer.accept("文件/目录为空,无法打开");
return;
}
File file = new File(path);
if (!file.exists()) {
if (file.isFile()) {
consumer.accept("文件 " + file.getAbsolutePath() + " 不存在,请确认");
} else {
consumer.accept("目录 " + file.getAbsolutePath() + " 不存在,请确认");
}
return;
}
try {
Desktop.showInExplorer(file);
consumer.accept("打开文件/目录 " + path);
} catch (Exception e) {
consumer.accept("打开文件错误:" + e.getMessage());
}
}
public static void shutdown() { public static void shutdown() {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.debug("shutdown"); logger.debug("shutdown");
@@ -249,7 +182,6 @@ public class Desktop extends Application {
beanFactory.registerSingleton("scheduledExecutorService", getExecutorService()); beanFactory.registerSingleton("scheduledExecutorService", getExecutorService());
beanFactory.registerSingleton("taskMonitorCenter", taskMonitorCenter); beanFactory.registerSingleton("taskMonitorCenter", taskMonitorCenter);
}); });
try { try {

View File

@@ -1,17 +1,26 @@
package com.ecep.contract.manager; package com.ecep.contract.manager;
import com.fasterxml.jackson.core.type.TypeReference; import java.io.BufferedReader;
import com.fasterxml.jackson.databind.JsonNode; import java.io.BufferedWriter;
import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File;
import com.fasterxml.jackson.databind.node.ArrayNode; import java.io.FileReader;
import com.fasterxml.jackson.databind.node.ObjectNode; import java.io.FileWriter;
import java.io.IOException;
import java.io.*;
import java.net.CookieStore; import java.net.CookieStore;
import java.net.HttpCookie; import java.net.HttpCookie;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.*; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class MyPersistentCookieStore implements CookieStore { public class MyPersistentCookieStore implements CookieStore {

View File

@@ -1,18 +1,16 @@
package com.ecep.contract.manager; package com.ecep.contract.manager;
import com.ecep.contract.manager.cloud.CloudRepositoriesConfig; import java.time.Duration;
import com.ecep.contract.manager.ds.DsRepositoriesConfig; import java.time.Instant;
import com.ecep.contract.manager.ui.MessageHolder; import java.time.LocalDate;
import com.ecep.contract.manager.util.MyDateTimeUtils; import java.time.LocalDateTime;
import com.ecep.contract.manager.util.UITools; import java.time.LocalTime;
import com.fasterxml.jackson.databind.ObjectMapper; import java.time.format.DateTimeFormatter;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import java.util.Locale;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import java.util.Properties;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import java.util.concurrent.CompletableFuture;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; import java.util.concurrent.ScheduledExecutorService;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
@@ -38,17 +36,21 @@ import org.springframework.core.metrics.StartupStep;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import java.time.*; import com.ecep.contract.manager.cloud.CloudRepositoriesConfig;
import java.time.format.DateTimeFormatter; import com.ecep.contract.manager.ds.DsRepositoriesConfig;
import java.util.List; import com.ecep.contract.manager.ui.MessageHolder;
import java.util.Locale; import com.ecep.contract.manager.util.MyDateTimeUtils;
import java.util.Properties; import com.ecep.contract.manager.util.UITools;
import java.util.concurrent.CompletableFuture; import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.concurrent.Executors; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.util.concurrent.FutureTask; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import java.util.concurrent.ScheduledExecutorService; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
@SpringBootApplication @SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration.class })
@EnableScheduling @EnableScheduling
@EnableAsync @EnableAsync
@EnableCaching @EnableCaching
@@ -97,7 +99,6 @@ public class SpringApp {
} }
}); });
startup.start(""); startup.start("");
context = application.run(); context = application.run();
logger.debug("SpringApp.launch application.run()."); logger.debug("SpringApp.launch application.run().");
@@ -178,7 +179,8 @@ public class SpringApp {
} }
@Override @Override
public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) { public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext,
ConfigurableEnvironment environment) {
logger.debug("Desktop.environmentPrepared"); logger.debug("Desktop.environmentPrepared");
debug("初始化 Environment 中,请稍后..."); debug("初始化 Environment 中,请稍后...");
} }
@@ -195,7 +197,6 @@ public class SpringApp {
debug("Spring Application Context 初始化完毕,请稍后..."); debug("Spring Application Context 初始化完毕,请稍后...");
} }
@Override @Override
public void started(ConfigurableApplicationContext context, Duration timeTaken) { public void started(ConfigurableApplicationContext context, Duration timeTaken) {
logger.debug("Desktop.started"); logger.debug("Desktop.started");
@@ -231,7 +232,7 @@ public class SpringApp {
@Bean @Bean
public CacheManager cacheManager() { public CacheManager cacheManager() {
// return new ConcurrentMapCacheManager("myCache"); // return new ConcurrentMapCacheManager("myCache");
CaffeineCacheManager cacheManager = new CaffeineCacheManager(); CaffeineCacheManager cacheManager = new CaffeineCacheManager();
cacheManager.setAsyncCacheMode(true); cacheManager.setAsyncCacheMode(true);
return cacheManager; return cacheManager;
@@ -242,10 +243,12 @@ public class SpringApp {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule(); JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE)); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE));
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN))); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(
DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN)));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE)); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE));
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(
DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN)));
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ISO_LOCAL_TIME)); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ISO_LOCAL_TIME));
objectMapper.registerModule(javaTimeModule); objectMapper.registerModule(javaTimeModule);
return objectMapper; return objectMapper;
@@ -253,7 +256,7 @@ public class SpringApp {
@Bean @Bean
public ScheduledExecutorService scheduledExecutorService() { public ScheduledExecutorService scheduledExecutorService() {
return Executors.newScheduledThreadPool(3); return Desktop.instance.getExecutorService();
} }
} }

View File

@@ -1,5 +1,6 @@
package com.ecep.contract.manager.cloud.old; package com.ecep.contract.manager.cloud.old;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.cloud.rk.CloudRk; import com.ecep.contract.manager.cloud.rk.CloudRk;
import com.ecep.contract.manager.cloud.rk.CloudRkService; import com.ecep.contract.manager.cloud.rk.CloudRkService;
@@ -81,8 +82,6 @@ public class OldVersionService {
@Autowired @Autowired
private CloudTycService cloudTycService; private CloudTycService cloudTycService;
@Autowired @Autowired
private ScheduledExecutorService scheduledExecutorService;
@Autowired
private CompanyContactRepository companyContactRepository; private CompanyContactRepository companyContactRepository;
@Autowired @Autowired
private CompanyCustomerRepository companyCustomerRepository; private CompanyCustomerRepository companyCustomerRepository;
@@ -210,7 +209,8 @@ public class OldVersionService {
*/ */
public void scheduledTasks(TaskProgressView<Task<?>> taskProgressView) { public void scheduledTasks(TaskProgressView<Task<?>> taskProgressView) {
// 15分钟运行一次合同合同任务 // 15分钟运行一次合同合同任务
scheduledExecutorService.scheduleAtFixedRate(() -> { ScheduledExecutorService executorService = Desktop.instance.getExecutorService();
executorService.scheduleAtFixedRate(() -> {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.debug("createSyncTask"); logger.debug("createSyncTask");
} }
@@ -220,16 +220,9 @@ public class OldVersionService {
return; return;
} }
Task<Object> vendorTask = new OldVersionSyncVendorTask(); Desktop.instance.getTaskMonitorCenter().registerTask(new OldVersionSyncVendorTask()).schedule(5, TimeUnit.SECONDS);
Task<Object> customerTask = new OldVersionSyncCustomerTask(); Desktop.instance.getTaskMonitorCenter().registerTask(new OldVersionSyncCustomerTask()).schedule(5, TimeUnit.SECONDS);
scheduledExecutorService.schedule(() -> {
vendorTask.run();
customerTask.run();
}, 5, TimeUnit.SECONDS);
Platform.runLater(() -> {
taskProgressView.getTasks().addAll(vendorTask, customerTask);
});
}, 3, TimeUnit.DAYS.toSeconds(1), TimeUnit.SECONDS); }, 3, TimeUnit.DAYS.toSeconds(1), TimeUnit.SECONDS);
} }

View File

@@ -1,13 +1,5 @@
package com.ecep.contract.manager.cloud.old; package com.ecep.contract.manager.cloud.old;
import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.contract.model.Contract;
import javafx.concurrent.Task;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -16,10 +8,20 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ui.MessageHolder;
import com.ecep.contract.manager.ui.Tasker;
/** /**
* *
*/ */
public class OldVersionSyncCustomerTask extends Task<Object> { public class OldVersionSyncCustomerTask extends Tasker<Object> {
private static final Logger logger = LoggerFactory.getLogger(OldVersionSyncCustomerTask.class); private static final Logger logger = LoggerFactory.getLogger(OldVersionSyncCustomerTask.class);
private final OldVersionService service = SpringApp.getBean(OldVersionService.class); private final OldVersionService service = SpringApp.getBean(OldVersionService.class);
@@ -40,7 +42,7 @@ public class OldVersionSyncCustomerTask extends Task<Object> {
} }
@Override @Override
protected Object call() throws Exception { protected Object execute(MessageHolder holder) throws Exception {
updateTitle("老版本-同步客户数据"); updateTitle("老版本-同步客户数据");
basePath = companyService.getCustomerBasePath(); basePath = companyService.getCustomerBasePath();
List<Runnable> runnable = Arrays.asList(this::loadOldNames, this::loadContacts, this::syncCustomers, this::syncContracts); List<Runnable> runnable = Arrays.asList(this::loadOldNames, this::loadContacts, this::syncCustomers, this::syncContracts);
@@ -122,4 +124,5 @@ public class OldVersionSyncCustomerTask extends Task<Object> {
} }
} }
} }

View File

@@ -1,13 +1,5 @@
package com.ecep.contract.manager.cloud.old; package com.ecep.contract.manager.cloud.old;
import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.contract.model.Contract;
import javafx.concurrent.Task;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -16,7 +8,17 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
public class OldVersionSyncVendorTask extends Task<Object> { import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ui.MessageHolder;
import com.ecep.contract.manager.ui.Tasker;
public class OldVersionSyncVendorTask extends Tasker<Object> {
private static final Logger logger = LoggerFactory.getLogger(OldVersionSyncVendorTask.class); private static final Logger logger = LoggerFactory.getLogger(OldVersionSyncVendorTask.class);
private final OldVersionService service = SpringApp.getBean(OldVersionService.class); private final OldVersionService service = SpringApp.getBean(OldVersionService.class);
@@ -35,12 +37,11 @@ public class OldVersionSyncVendorTask extends Task<Object> {
super.updateTitle(titlePrefix + title); super.updateTitle(titlePrefix + title);
} }
@Override @Override
protected Object call() throws Exception { protected Object execute(MessageHolder holder) throws Exception {
basePath = companyService.getVendorBasePath(); basePath = companyService.getVendorBasePath();
List<Runnable> runnable = Arrays.asList(this::loadOldNames, this::loadContacts, this::syncVendors,
List<Runnable> runnable = Arrays.asList(this::loadOldNames, this::loadContacts, this::syncVendors, this::syncContracts); this::syncContracts);
for (int i = 0; i < runnable.size(); i++) { for (int i = 0; i < runnable.size(); i++) {
titlePrefix = "老版本-同步供应商数据-" + (i + 1) + "/" + runnable.size() + "-"; titlePrefix = "老版本-同步供应商数据-" + (i + 1) + "/" + runnable.size() + "-";
try { try {
@@ -116,4 +117,5 @@ public class OldVersionSyncVendorTask extends Task<Object> {
}); });
} }
} }
} }

View File

@@ -3,12 +3,12 @@ package com.ecep.contract.manager.cloud.rk;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.company.controller.CompanyTableCell; import com.ecep.contract.manager.ui.table.cell.CompanyTableCell;
import com.ecep.contract.manager.ds.company.controller.CompanyWindowController; import com.ecep.contract.manager.ds.company.controller.CompanyWindowController;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.AbstEntityManagerSkin;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;

View File

@@ -1,25 +1,19 @@
package com.ecep.contract.manager.cloud.rk; package com.ecep.contract.manager.cloud.rk;
import com.ecep.contract.manager.ds.company.model.Company;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.ecep.contract.manager.ds.MyRepository;
import com.ecep.contract.manager.ds.company.model.Company;
@Repository @Repository
public interface CloudRkRepository public interface CloudRkRepository extends MyRepository<CloudRk, Integer> {
// curd
extends CrudRepository<CloudRk, Integer>, PagingAndSortingRepository<CloudRk, Integer>,
// JPA interfaces
JpaRepository<CloudRk, Integer>, JpaSpecificationExecutor<CloudRk> {
Stream<CloudRk> findByCloudLatestAfter(Instant timestamp); Stream<CloudRk> findByCloudLatestAfter(Instant timestamp);

View File

@@ -1,6 +1,6 @@
package com.ecep.contract.manager.cloud.rk; package com.ecep.contract.manager.cloud.rk;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.cloud.CloudInfo; import com.ecep.contract.manager.cloud.CloudInfo;
import com.ecep.contract.manager.ds.company.BlackReasonType; import com.ecep.contract.manager.ds.company.BlackReasonType;
import com.ecep.contract.manager.ds.company.CompanyFileUtils; import com.ecep.contract.manager.ds.company.CompanyFileUtils;
@@ -88,7 +88,6 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
return MyStringUtils.toLong(string, DEFAULT_SYNC_ELAPSE); return MyStringUtils.toLong(string, DEFAULT_SYNC_ELAPSE);
} }
@Data @Data
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
public static class EntInfo { public static class EntInfo {
@@ -110,8 +109,6 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
private CompanyOldNameRepository companyOldNameRepository; private CompanyOldNameRepository companyOldNameRepository;
@Autowired @Autowired
private CompanyBlackReasonRepository companyBlackReasonRepository; private CompanyBlackReasonRepository companyBlackReasonRepository;
@Autowired
private ScheduledExecutorService scheduledExecutorService;
@Cacheable(key = "#p0") @Cacheable(key = "#p0")
public CloudRk findById(Integer id) { public CloudRk findById(Integer id) {
@@ -133,8 +130,7 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
builder.like(company.get("name"), "%" + searchText + "%"), builder.like(company.get("name"), "%" + searchText + "%"),
builder.like(company.get("shortName"), "%" + searchText + "%"), builder.like(company.get("shortName"), "%" + searchText + "%"),
builder.like(root.get("cloudId"), "%" + searchText + "%"), builder.like(root.get("cloudId"), "%" + searchText + "%"),
builder.like(root.get("description"), "%" + searchText + "%") builder.like(root.get("description"), "%" + searchText + "%"));
);
}; };
} }
@@ -142,8 +138,7 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
* 更新黑名单列表 * 更新黑名单列表
*/ */
public void updateBlackList( public void updateBlackList(
Company company, CloudRk cloudRk, BlackListUpdateContext context Company company, CloudRk cloudRk, BlackListUpdateContext context) throws IOException {
) throws IOException {
List<String> companyNames = new ArrayList<>(); List<String> companyNames = new ArrayList<>();
companyNames.add(company.getName()); companyNames.add(company.getName());
// fixed 平台API使用企业名称可能记录的是曾用名 // fixed 平台API使用企业名称可能记录的是曾用名
@@ -172,12 +167,14 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
try { try {
if (data.has("blackReason")) { if (data.has("blackReason")) {
for (JsonNode reason : data.get("blackReason")) { for (JsonNode reason : data.get("blackReason")) {
toCompanyBlackReasonList(company, BlackReasonType.BLACK, reason, dbReasons, reasonList, context.getObjectMapper()); toCompanyBlackReasonList(company, BlackReasonType.BLACK, reason, dbReasons,
reasonList, context.getObjectMapper());
} }
} }
if (data.has("greyReason")) { if (data.has("greyReason")) {
for (JsonNode reason : data.get("greyReason")) { for (JsonNode reason : data.get("greyReason")) {
toCompanyBlackReasonList(company, BlackReasonType.GRAY, reason, dbReasons, reasonList, context.getObjectMapper()); toCompanyBlackReasonList(company, BlackReasonType.GRAY, reason, dbReasons,
reasonList, context.getObjectMapper());
} }
} }
} catch (Exception ex) { } catch (Exception ex) {
@@ -214,11 +211,11 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
private void toCompanyBlackReasonList( private void toCompanyBlackReasonList(
Company company, BlackReasonType type, Company company, BlackReasonType type,
JsonNode reason, List<CompanyBlackReason> dbReasons, JsonNode reason, List<CompanyBlackReason> dbReasons,
List<CompanyBlackReason> reasonList, ObjectMapper objectMapper List<CompanyBlackReason> reasonList, ObjectMapper objectMapper) throws JsonMappingException {
) throws JsonMappingException {
ObjectNode object = (ObjectNode) reason; ObjectNode object = (ObjectNode) reason;
String key = "rk-" + object.remove("id").asText(); String key = "rk-" + object.remove("id").asText();
CompanyBlackReason cbr = dbReasons.stream().filter(r -> r.getKey().equals(key)).findAny().orElseGet(CompanyBlackReason::new); CompanyBlackReason cbr = dbReasons.stream().filter(r -> r.getKey().equals(key)).findAny()
.orElseGet(CompanyBlackReason::new);
objectMapper.updateValue(cbr, reason); objectMapper.updateValue(cbr, reason);
cbr.setCompany(company); cbr.setCompany(company);
cbr.setType(type); cbr.setType(type);
@@ -241,8 +238,7 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
* @return true * @return true
*/ */
public boolean checkBlackListUpdateElapse( public boolean checkBlackListUpdateElapse(
Company company, CloudRk cloudRk, BlackListUpdateContext context Company company, CloudRk cloudRk, BlackListUpdateContext context) {
) {
Instant start = cloudRk.getCloudBlackListUpdated(); Instant start = cloudRk.getCloudBlackListUpdated();
if (start == null) { if (start == null) {
return true; return true;
@@ -280,7 +276,8 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
} }
// 查询有 CloudId 的记录 // 查询有 CloudId 的记录
List<CloudRk> hasCouldIdList = list.stream().filter(v -> StringUtils.hasText(v.getCloudId())).collect(Collectors.toList()); List<CloudRk> hasCouldIdList = list.stream().filter(v -> StringUtils.hasText(v.getCloudId()))
.collect(Collectors.toList());
// 没有匹配到一条时 // 没有匹配到一条时
if (hasCouldIdList.isEmpty()) { if (hasCouldIdList.isEmpty()) {
// 保留第一条,其他删除 // 保留第一条,其他删除
@@ -299,7 +296,8 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
} }
// 查询有 CloudLatest 的记录 // 查询有 CloudLatest 的记录
List<CloudRk> hasLatestList = hasCouldIdList.stream().filter(v -> v.getCloudLatest() != null).collect(Collectors.toList()); List<CloudRk> hasLatestList = hasCouldIdList.stream().filter(v -> v.getCloudLatest() != null)
.collect(Collectors.toList());
// 没有匹配到一条时 // 没有匹配到一条时
if (hasLatestList.isEmpty()) { if (hasLatestList.isEmpty()) {
// 保留第一条,其他删除 // 保留第一条,其他删除
@@ -338,7 +336,6 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
cloudRKRepository.delete(entity); cloudRKRepository.delete(entity);
} }
/** /**
* 返回 在 {@link #getSyncElapse()} 毫秒前,更新的 * 返回 在 {@link #getSyncElapse()} 毫秒前,更新的
* *
@@ -354,7 +351,7 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
/** /**
* 返回距离上次更新超过 SysConfigcloud.rk.black_list.elapse 秒的公司 * 返回距离上次更新超过 SysConfigcloud.rk.black_list.elapse 秒的公司
*/ */
// @Transactional // @Transactional
public List<CloudRk> findNeedUpdate() { public List<CloudRk> findNeedUpdate() {
Instant now = Instant.now(); Instant now = Instant.now();
long elapse = getSyncElapse(); long elapse = getSyncElapse();
@@ -368,26 +365,14 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
* @param taskProgressView 任务视图 * @param taskProgressView 任务视图
*/ */
public void scheduledTasks(TaskProgressView<Task<?>> taskProgressView) { public void scheduledTasks(TaskProgressView<Task<?>> taskProgressView) {
AtomicReference<Runnable> reference = new AtomicReference<>(); ScheduledExecutorService executorService = Desktop.instance.getExecutorService();
Runnable runnable = () -> { // 第一次延时1分钟启动
CloudRkSyncTask task = new CloudRkSyncTask(); executorService.schedule(() -> {
Platform.runLater(() -> taskProgressView.getTasks().add(task)); // 定时 30分钟 运行一次
// 延迟10秒 executorService.scheduleAtFixedRate(() -> {
task.delay(10, CompletableFuture.delayedExecutor(1, TimeUnit.SECONDS, scheduledExecutorService)) Desktop.instance.getTaskMonitorCenter().registerTask(new CloudRkSyncTask()).submit();
.thenRun(() -> { }, 0, 30, TimeUnit.MINUTES);
try { }, 1, TimeUnit.MINUTES);
task.run();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
// 30 分钟后再次运行
scheduledExecutorService.schedule(reference.get(), 30, TimeUnit.MINUTES);
}
);
};
reference.set(runnable);
// 第一次延时启动
scheduledExecutorService.schedule(runnable, 1, TimeUnit.MINUTES);
} }
@CacheEvict @CacheEvict
@@ -401,12 +386,10 @@ public class CloudRkService implements ViewModelService<CloudRk, CloudRkInfoView
} }
// TODO 这个可以无法更新缓存 // TODO 这个可以无法更新缓存
@Caching( @Caching(evict = {
evict = {
@CacheEvict(key = "#p0.id"), @CacheEvict(key = "#p0.id"),
@CacheEvict(key = "#p1.id"), @CacheEvict(key = "#p1.id"),
} })
)
public void resetTo(Company from, Company to) { public void resetTo(Company from, Company to) {
List<CloudRk> list = cloudRKRepository.findAllByCompanyId(from.getId()); List<CloudRk> list = cloudRKRepository.findAllByCompanyId(from.getId());
for (CloudRk item : list) { for (CloudRk item : list) {

View File

@@ -6,7 +6,6 @@ import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.model.CompanyContact; import com.ecep.contract.manager.ds.company.model.CompanyContact;
import com.ecep.contract.manager.ds.company.model.CompanyOldName; import com.ecep.contract.manager.ds.company.model.CompanyOldName;
import com.ecep.contract.manager.ds.company.repository.CompanyContactRepository; import com.ecep.contract.manager.ds.company.repository.CompanyContactRepository;
import com.ecep.contract.manager.ds.company.repository.CompanyOldNameRepository;
import com.ecep.contract.manager.ds.company.service.CompanyOldNameService; import com.ecep.contract.manager.ds.company.service.CompanyOldNameService;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;

View File

@@ -1,29 +1,30 @@
package com.ecep.contract.manager.cloud.tyc; package com.ecep.contract.manager.cloud.tyc;
import java.util.List;
import org.hibernate.Hibernate;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.company.controller.CompanyTableCell; import com.ecep.contract.manager.ui.table.cell.CompanyTableCell;
import com.ecep.contract.manager.ds.company.controller.CompanyWindowController; import com.ecep.contract.manager.ds.company.controller.CompanyWindowController;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.AbstEntityManagerSkin;
import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell;
import jakarta.persistence.criteria.Path; import jakarta.persistence.criteria.Path;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.ContextMenu; import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem; import javafx.scene.control.MenuItem;
import lombok.Setter; import lombok.Setter;
import org.hibernate.Hibernate;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
import java.util.List;
public class CloudTycManagerSkin public class CloudTycManagerSkin
extends AbstEntityManagerSkin<CloudTyc, CloudTycInfoViewModel, CloudTycManagerSkin, CloudTycManagerWindowController> extends
implements ManagerSkin { AbstEntityManagerSkin<CloudTyc, CloudTycInfoViewModel, CloudTycManagerSkin, CloudTycManagerWindowController> {
@Setter @Setter
private CloudTycService cloudTycService; private CloudTycService cloudTycService;
@@ -58,8 +59,7 @@ public class CloudTycManagerSkin
Path<Object> company = root.get("company"); Path<Object> company = root.get("company");
return builder.or( return builder.or(
builder.like(company.get("name"), "%" + searchText + "%"), builder.like(company.get("name"), "%" + searchText + "%"),
builder.like(company.get("shortName"), "%" + searchText + "%") builder.like(company.get("shortName"), "%" + searchText + "%"));
);
}; };
Specification<CloudTyc> cloudIdSpec = (root, query, builder) -> { Specification<CloudTyc> cloudIdSpec = (root, query, builder) -> {

View File

@@ -1,40 +1,26 @@
package com.ecep.contract.manager.cloud.tyc; package com.ecep.contract.manager.cloud.tyc;
import java.time.LocalDateTime;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
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.manager.SpringApp; import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.cloud.CloudBaseInfo; import com.ecep.contract.manager.cloud.CloudBaseInfo;
import com.ecep.contract.manager.cloud.CloudInfo; import com.ecep.contract.manager.cloud.CloudInfo;
import com.ecep.contract.manager.ds.company.controller.CompanyWindowController;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ui.AbstManagerWindowController; import com.ecep.contract.manager.ui.AbstManagerWindowController;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.ViewModelService;
import com.ecep.contract.manager.ui.util.DelayOnceExecutor;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell;
import com.ecep.contract.manager.util.TableViewUtils;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import org.hibernate.Hibernate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import static com.ecep.contract.manager.util.TableViewUtils.getTableViewVisibleRows;
/** /**
* 天眼查信息管理窗口控制器 * 天眼查信息管理窗口控制器
@@ -56,23 +42,28 @@ public class CloudTycManagerWindowController
@Autowired @Autowired
private CompanyService companyService; private CompanyService companyService;
@FXML
public TableColumn<CloudTycInfoViewModel, Number> idColumn; public TableColumn<CloudTycInfoViewModel, Number> idColumn;
@FXML
public TableColumn<CloudTycInfoViewModel, LocalDateTime> latestUpdateColumn; public TableColumn<CloudTycInfoViewModel, LocalDateTime> latestUpdateColumn;
@FXML
public TableColumn<CloudTycInfoViewModel, Company> companyColumn; public TableColumn<CloudTycInfoViewModel, Company> companyColumn;
@FXML
public TableColumn<CloudTycInfoViewModel, String> cloudIdColumn; public TableColumn<CloudTycInfoViewModel, String> cloudIdColumn;
@FXML
public TableColumn<CloudTycInfoViewModel, LocalDateTime> cloudLatestColumn; public TableColumn<CloudTycInfoViewModel, LocalDateTime> cloudLatestColumn;
@FXML
public TableColumn<CloudTycInfoViewModel, Number> scoreColumn; public TableColumn<CloudTycInfoViewModel, Number> scoreColumn;
@FXML
public TableColumn<CloudTycInfoViewModel, String> descriptionColumn; public TableColumn<CloudTycInfoViewModel, String> descriptionColumn;
@Override @Override
public CloudTycService getViewModelService() { public CloudTycService getViewModelService() {
return cloudTycService; return cloudTycService;
} }
@Override @Override
protected CloudTycManagerSkin createDefaultSkin() { protected CloudTycManagerSkin createDefaultSkin() {
return new CloudTycManagerSkin(this); return new CloudTycManagerSkin(this);
@@ -80,7 +71,8 @@ public class CloudTycManagerWindowController
@Override @Override
public void show(Stage stage) { public void show(Stage stage) {
super.show(stage);getTitle().set("数据源:天眼查"); super.show(stage);
getTitle().set("数据源:天眼查");
} }
/** /**
@@ -88,7 +80,8 @@ public class CloudTycManagerWindowController
*/ */
public void onDateTransferAction(ActionEvent event) { public void onDateTransferAction(ActionEvent event) {
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
com.ecep.contract.manager.cloud.CloudInfoRepository cloudInfoRepository = SpringApp.getBean(com.ecep.contract.manager.cloud.CloudInfoRepository.class); com.ecep.contract.manager.cloud.CloudInfoRepository cloudInfoRepository = SpringApp
.getBean(com.ecep.contract.manager.cloud.CloudInfoRepository.class);
cloudInfoRepository.findAll().forEach(v -> { cloudInfoRepository.findAll().forEach(v -> {
try { try {
CloudTyc cloudTyc = cloudTycService.getOrCreateCloudTyc(v); CloudTyc cloudTyc = cloudTycService.getOrCreateCloudTyc(v);

View File

@@ -1,23 +1,17 @@
package com.ecep.contract.manager.cloud.tyc; package com.ecep.contract.manager.cloud.tyc;
import com.ecep.contract.manager.ds.company.model.Company;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.ecep.contract.manager.ds.MyRepository;
import com.ecep.contract.manager.ds.company.model.Company;
@Repository @Repository
public interface CloudTycRepository public interface CloudTycRepository extends MyRepository<CloudTyc, Integer> {
// curd
extends CrudRepository<CloudTyc, Integer>, PagingAndSortingRepository<CloudTyc, Integer>,
// JPA interfaces
JpaRepository<CloudTyc, Integer>, JpaSpecificationExecutor<CloudTyc> {
List<CloudTyc> findAllByCompanyId(Integer companyId); List<CloudTyc> findAllByCompanyId(Integer companyId);
@@ -27,5 +21,4 @@ public interface CloudTycRepository
@Transactional @Transactional
int deleteAllByCompany(Company company); int deleteAllByCompany(Company company);
} }

View File

@@ -156,7 +156,7 @@ public class CloudTycService implements ViewModelService<CloudTyc, CloudTycInfoV
String url = baseUrl + cloudId; String url = baseUrl + cloudId;
com.ecep.contract.manager.Desktop.showInBrowse(url); com.ecep.contract.manager.util.DesktopUtils.showInBrowse(url);
// UITools.showExceptionAndWait("使用浏览器打开网址出现异常", e); // UITools.showExceptionAndWait("使用浏览器打开网址出现异常", e);

View File

@@ -1,16 +1,14 @@
package com.ecep.contract.manager.cloud.u8; package com.ecep.contract.manager.cloud.u8;
import com.ecep.contract.manager.ds.contract.model.Contract; import java.util.Map;
import com.ecep.contract.manager.ds.contract.service.ContractService; import java.util.concurrent.atomic.AtomicInteger;
import com.ecep.contract.manager.ds.contract.tasker.AbstContractRepairTasker; import java.util.stream.Stream;
import com.ecep.contract.manager.ui.MessageHolder;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Map; import com.ecep.contract.manager.ds.contract.tasker.AbstContractRepairTasker;
import java.util.Objects; import com.ecep.contract.manager.ui.MessageHolder;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;
/** /**
* 用友U8系统-同步全量合同 * 用友U8系统-同步全量合同

View File

@@ -1,13 +1,13 @@
package com.ecep.contract.manager.cloud.u8; package com.ecep.contract.manager.cloud.u8;
import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.company.controller.CompanyTableCell; import com.ecep.contract.manager.ui.table.cell.CompanyTableCell;
import com.ecep.contract.manager.ds.company.controller.CompanyWindowController; import com.ecep.contract.manager.ds.company.controller.CompanyWindowController;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.AbstEntityManagerSkin;
import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.ui.ManagerSkin;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import jakarta.persistence.criteria.Path; import jakarta.persistence.criteria.Path;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;

View File

@@ -118,20 +118,20 @@ public class YongYouU8Service implements ViewModelService<CloudYu, CloudYuInfoVi
executorService.scheduleAtFixedRate(() -> { executorService.scheduleAtFixedRate(() -> {
ContractSyncTask task = new ContractSyncTask(); ContractSyncTask task = new ContractSyncTask();
MonitoredTask<Object> registerTask = Desktop.instance.getTaskMonitorCenter().registerTask(task); MonitoredTask<Object> registerTask = Desktop.instance.getTaskMonitorCenter().registerTask(task);
executorService.schedule(registerTask, 5, TimeUnit.SECONDS); registerTask.schedule(5, TimeUnit.SECONDS);
}, 3, TimeUnit.MINUTES.toSeconds(15), TimeUnit.SECONDS); }, 3, TimeUnit.MINUTES.toSeconds(15), TimeUnit.SECONDS);
executorService.scheduleAtFixedRate(() -> { executorService.scheduleAtFixedRate(() -> {
// 1小时运行一次同步供应商任务 // 1小时运行一次同步供应商任务
VendorSyncTask vendorTask = new VendorSyncTask(); VendorSyncTask vendorTask = new VendorSyncTask();
MonitoredTask<Object> registerVendorTask = Desktop.instance.getTaskMonitorCenter().registerTask(vendorTask); MonitoredTask<Object> registerVendorTask = Desktop.instance.getTaskMonitorCenter().registerTask(vendorTask);
executorService.schedule(registerVendorTask, 60, TimeUnit.SECONDS); registerVendorTask.schedule(60, TimeUnit.SECONDS);
// 1小时运行一次同步客户任务 // 1小时运行一次同步客户任务
CustomerSyncTask customerTask = new CustomerSyncTask(); CustomerSyncTask customerTask = new CustomerSyncTask();
MonitoredTask<Object> registerCustomerTask = Desktop.instance.getTaskMonitorCenter() MonitoredTask<Object> registerCustomerTask = Desktop.instance.getTaskMonitorCenter()
.registerTask(customerTask); .registerTask(customerTask);
executorService.schedule(registerCustomerTask, 60, TimeUnit.SECONDS); registerCustomerTask.schedule(60, TimeUnit.SECONDS);
}, 3, TimeUnit.HOURS.toSeconds(1), TimeUnit.SECONDS); }, 3, TimeUnit.HOURS.toSeconds(1), TimeUnit.SECONDS);

View File

@@ -17,6 +17,8 @@ import javax.sql.DataSource;
import static com.ecep.contract.manager.AppV2.*; import static com.ecep.contract.manager.AppV2.*;
import java.util.Map;
@Configuration @Configuration
@EnableJpaRepositories(bootstrapMode = BootstrapMode.LAZY) @EnableJpaRepositories(bootstrapMode = BootstrapMode.LAZY)
public class DsRepositoriesConfig { public class DsRepositoriesConfig {
@@ -41,7 +43,6 @@ public class DsRepositoriesConfig {
logger.debug("db server url:{},user:{}", url, username); logger.debug("db server url:{},user:{}", url, username);
} }
return DataSourceBuilder.create() return DataSourceBuilder.create()
.type(HikariDataSource.class) .type(HikariDataSource.class)
.url(url) .url(url)

View File

@@ -3,9 +3,8 @@ package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.company.vo.CompanyViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyViewModel;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import lombok.Setter;
public abstract class AbstCompanyBasedTabSkin public abstract class AbstCompanyBasedTabSkin
extends AbstEntityBasedTabSkin<CompanyWindowController, Company, CompanyViewModel> extends AbstEntityBasedTabSkin<CompanyWindowController, Company, CompanyViewModel>

View File

@@ -6,9 +6,9 @@ import com.ecep.contract.manager.ds.company.vo.CompanyBasedViewModel;
import com.ecep.contract.manager.ds.company.vo.CompanyViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyViewModel;
import com.ecep.contract.manager.ds.other.model.IdentityEntity; import com.ecep.contract.manager.ds.other.model.IdentityEntity;
import com.ecep.contract.manager.ds.other.vo.IdentityViewModel; import com.ecep.contract.manager.ds.other.vo.IdentityViewModel;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.TableOfTabSkin; import com.ecep.contract.manager.ui.table.TableOfTabSkin;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import lombok.Setter; import lombok.Setter;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;

View File

@@ -16,8 +16,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
public class CompanyManagerSkin public class CompanyManagerSkin
extends AbstEntityManagerSkin<Company, CompanyViewModel, CompanyManagerSkin, CompanyManagerWindowController> extends AbstEntityManagerSkin<Company, CompanyViewModel, CompanyManagerSkin, CompanyManagerWindowController> {
implements ManagerSkin {
@Setter @Setter
private CompanyOldNameService companyOldNameService; private CompanyOldNameService companyOldNameService;

View File

@@ -1,23 +1,24 @@
package com.ecep.contract.manager.ds.company.controller; package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.ds.company.model.Company; import java.time.LocalDate;
import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.company.tasker.CompanyFilesRebuildTasker;
import com.ecep.contract.manager.ds.company.vo.CompanyViewModel;
import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ui.AbstManagerWindowController;
import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.ViewModelService;
import com.ecep.contract.manager.util.UITools;
import javafx.event.ActionEvent;
import javafx.scene.control.TableColumn;
import javafx.stage.Stage;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.LocalDate; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.company.tasker.CompanyFilesRebuildTasker;
import com.ecep.contract.manager.ds.company.vo.CompanyViewModel;
import com.ecep.contract.manager.ui.AbstManagerWindowController;
import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.util.UITools;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.stage.Stage;
@Lazy @Lazy
@Scope("prototype") @Scope("prototype")
@@ -27,11 +28,17 @@ public class CompanyManagerWindowController
extends AbstManagerWindowController<Company, CompanyViewModel, CompanyManagerSkin> { extends AbstManagerWindowController<Company, CompanyViewModel, CompanyManagerSkin> {
// columns // columns
@FXML
public TableColumn<CompanyViewModel, Number> idColumn; public TableColumn<CompanyViewModel, Number> idColumn;
@FXML
public TableColumn<CompanyViewModel, String> nameColumn; public TableColumn<CompanyViewModel, String> nameColumn;
@FXML
public TableColumn<CompanyViewModel, String> uniscidColumn; public TableColumn<CompanyViewModel, String> uniscidColumn;
@FXML
public TableColumn<CompanyViewModel, String> entStatusColumn; public TableColumn<CompanyViewModel, String> entStatusColumn;
@FXML
public TableColumn<CompanyViewModel, LocalDate> createdColumn; public TableColumn<CompanyViewModel, LocalDate> createdColumn;
@FXML
public TableColumn<CompanyViewModel, String> memoColumn; public TableColumn<CompanyViewModel, String> memoColumn;
@Autowired @Autowired

View File

@@ -1,23 +1,19 @@
package com.ecep.contract.manager.ds.company.controller; package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.ds.company.controller.bank_account.BankAccountWindowController; import com.ecep.contract.manager.ds.company.controller.bank_account.BankAccountWindowController;
import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.model.CompanyBankAccount; import com.ecep.contract.manager.ds.company.model.CompanyBankAccount;
import com.ecep.contract.manager.ds.company.service.CompanyBankAccountService; import com.ecep.contract.manager.ds.company.service.CompanyBankAccountService;
import com.ecep.contract.manager.ds.company.vo.CompanyBankAccountViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyBankAccountViewModel;
import com.ecep.contract.manager.ds.other.model.Bank; import com.ecep.contract.manager.ds.other.model.Bank;
import com.ecep.contract.manager.ds.other.service.BankService; import com.ecep.contract.manager.ds.other.service.BankService;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.table.cell.BankTableCell;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import lombok.Setter; import lombok.Setter;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
import java.util.List;
/** /**
* 子合同 * 子合同
@@ -63,21 +59,7 @@ public class CompanyTabSkinBankAccount
bankAccountTable_idColumn.setCellValueFactory(param -> param.getValue().getId()); bankAccountTable_idColumn.setCellValueFactory(param -> param.getValue().getId());
bankAccountTable_bankColumn.setCellValueFactory(param -> param.getValue().getBank()); bankAccountTable_bankColumn.setCellValueFactory(param -> param.getValue().getBank());
bankAccountTable_bankColumn.setCellFactory(param -> new TableCell<>() { bankAccountTable_bankColumn.setCellFactory(param -> new BankTableCell<>(getBankService()));
@Override
protected void updateItem(Bank item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
return;
}
if (!Hibernate.isInitialized(item)) {
item = getBankService().findById(item.getId());
setItem(item);
}
setText(item.getName());
}
});
bankAccountTable_openingBankColumn.setCellValueFactory(param -> param.getValue().getOpeningBank()); bankAccountTable_openingBankColumn.setCellValueFactory(param -> param.getValue().getOpeningBank());
bankAccountTable_accountColumn.setCellValueFactory(param -> param.getValue().getAccount()); bankAccountTable_accountColumn.setCellValueFactory(param -> param.getValue().getAccount());

View File

@@ -3,7 +3,7 @@ package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.model.CompanyOldName; import com.ecep.contract.manager.ds.company.model.CompanyOldName;
import com.ecep.contract.manager.ds.company.service.CompanyOldNameService; import com.ecep.contract.manager.ds.company.service.CompanyOldNameService;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.scene.control.*; import javafx.scene.control.*;

View File

@@ -8,19 +8,16 @@ import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.model.CompanyBlackReason; import com.ecep.contract.manager.ds.company.model.CompanyBlackReason;
import com.ecep.contract.manager.ds.company.service.CompanyBlackReasonService; import com.ecep.contract.manager.ds.company.service.CompanyBlackReasonService;
import com.ecep.contract.manager.ds.company.vo.CompanyBlackReasonViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyBlackReasonViewModel;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import lombok.Setter; import lombok.Setter;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List;
/** /**
* 子合同 * 子合同

View File

@@ -1,23 +1,18 @@
package com.ecep.contract.manager.ds.company.controller; package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.ds.company.controller.contact.CompanyContactWindowController; import com.ecep.contract.manager.ds.company.controller.contact.CompanyContactWindowController;
import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.model.CompanyContact; import com.ecep.contract.manager.ds.company.model.CompanyContact;
import com.ecep.contract.manager.ds.company.service.CompanyContactService; import com.ecep.contract.manager.ds.company.service.CompanyContactService;
import com.ecep.contract.manager.ds.company.vo.CompanyContactViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyContactViewModel;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.ViewModelService;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import lombok.Setter; import lombok.Setter;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List;
/** /**
* 子合同 * 子合同

View File

@@ -1,26 +1,26 @@
package com.ecep.contract.manager.ds.company.controller; package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.cloud.u8.YongYouU8Service; import com.ecep.contract.manager.cloud.u8.YongYouU8Service;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.contract.controller.ContractGroupTableCell;
import com.ecep.contract.manager.ds.contract.controller.ContractKindTableCell;
import com.ecep.contract.manager.ds.contract.controller.ContractTypeTableCell;
import com.ecep.contract.manager.ds.contract.controller.ContractWindowController; import com.ecep.contract.manager.ds.contract.controller.ContractWindowController;
import com.ecep.contract.manager.ds.contract.model.Contract; import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.model.ContractGroup; import com.ecep.contract.manager.ds.contract.model.ContractGroup;
import com.ecep.contract.manager.ds.contract.model.ContractKind; import com.ecep.contract.manager.ds.contract.model.ContractKind;
import com.ecep.contract.manager.ds.contract.model.ContractType; import com.ecep.contract.manager.ds.contract.model.ContractType;
import com.ecep.contract.manager.ds.contract.service.ContractGroupService;
import com.ecep.contract.manager.ds.contract.service.ContractKindService;
import com.ecep.contract.manager.ds.contract.service.ContractService; import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.service.ContractTypeService;
import com.ecep.contract.manager.ds.contract.tasker.ContractRepairByCompanyTask; import com.ecep.contract.manager.ds.contract.tasker.ContractRepairByCompanyTask;
import com.ecep.contract.manager.ds.contract.vo.ContractViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.table.cell.*;
import com.ecep.contract.manager.ui.util.ContractGroupStringConverter; import com.ecep.contract.manager.ui.util.ContractGroupStringConverter;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
@@ -80,6 +80,12 @@ public class CompanyTabSkinContract
@Setter @Setter
private ContractService contractService; private ContractService contractService;
@Setter @Setter
private ContractGroupService contractGroupService;
@Setter
private ContractKindService contractKindService;
@Setter
private ContractTypeService contractTypeService;
@Setter
private YongYouU8Service u8Service; private YongYouU8Service u8Service;
@Setter @Setter
private EmployeeStringConverter employeeStringConverter; private EmployeeStringConverter employeeStringConverter;
@@ -126,7 +132,7 @@ public class CompanyTabSkinContract
ObservableList<ContractGroup> contractGroups = FXCollections.observableArrayList(); ObservableList<ContractGroup> contractGroups = FXCollections.observableArrayList();
contractGroups.add(null); contractGroups.add(null);
contractGroups.addAll(contractService.findAllGroups()); contractGroups.addAll(getViewModelService().findAllGroups());
contractGroupSelector.setItems(contractGroups); contractGroupSelector.setItems(contractGroups);
contractGroupSelector.setConverter(new ContractGroupStringConverter(contractGroups)); contractGroupSelector.setConverter(new ContractGroupStringConverter(contractGroups));
contractSearchKeyField.setOnKeyReleased(event -> { contractSearchKeyField.setOnKeyReleased(event -> {
@@ -139,13 +145,13 @@ public class CompanyTabSkinContract
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
// 计算主合同编号 // 计算主合同编号
for (ContractViewModel model : dataSet) { for (ContractViewModel model : dataSet) {
Contract contract = contractService.findById(model.getId().get()); Contract contract = getViewModelService().findById(model.getId().get());
if (contract == null) { if (contract == null) {
continue; continue;
} }
try { try {
if (contractService.updateParentCode(contract)) { if (getViewModelService().updateParentCode(contract)) {
Contract updated = contractService.save(contract); Contract updated = getViewModelService().save(contract);
model.update(updated); model.update(updated);
} }
} catch (NoSuchElementException e) { } catch (NoSuchElementException e) {
@@ -160,13 +166,13 @@ public class CompanyTabSkinContract
contractTable_nameColumn.setCellValueFactory(param -> param.getValue().getName()); contractTable_nameColumn.setCellValueFactory(param -> param.getValue().getName());
contractTable_stateColumn.setCellValueFactory(param -> param.getValue().getState()); contractTable_stateColumn.setCellValueFactory(param -> param.getValue().getState());
contractTable_groupColumn.setCellValueFactory(param -> param.getValue().getGroup()); contractTable_groupColumn.setCellValueFactory(param -> param.getValue().getGroup());
contractTable_groupColumn.setCellFactory(param -> new ContractGroupTableCell(getViewModelService())); contractTable_groupColumn.setCellFactory(param -> new ContractGroupTableCell<>(getContractGroupService()));
contractTable_typeColumn.setCellValueFactory(param -> param.getValue().getType()); contractTable_typeColumn.setCellValueFactory(param -> param.getValue().getType());
contractTable_typeColumn.setCellFactory(param -> new ContractTypeTableCell(getViewModelService())); contractTable_typeColumn.setCellFactory(param -> new ContractTypeTableCell<>(getContractTypeService()));
contractTable_kindColumn.setCellValueFactory(param -> param.getValue().getKind()); contractTable_kindColumn.setCellValueFactory(param -> param.getValue().getKind());
contractTable_kindColumn.setCellFactory(param -> new ContractKindTableCell(getViewModelService())); contractTable_kindColumn.setCellFactory(param -> new ContractKindTableCell<>(getContractKindService()));
contractTable_parentCodeColumn.setCellValueFactory(param -> param.getValue().getParentCode()); contractTable_parentCodeColumn.setCellValueFactory(param -> param.getValue().getParentCode());
@@ -174,18 +180,18 @@ public class CompanyTabSkinContract
contractTable_startDateColumn.setCellValueFactory(param -> param.getValue().getStartDate()); contractTable_startDateColumn.setCellValueFactory(param -> param.getValue().getStartDate());
contractTable_endDateColumn.setCellValueFactory(param -> param.getValue().getEndDate()); contractTable_endDateColumn.setCellValueFactory(param -> param.getValue().getEndDate());
contractTable_setupPersonColumn.setCellValueFactory(param -> param.getValue().getSetupPerson()); contractTable_setupPersonColumn.setCellValueFactory(param -> param.getValue().getSetupPerson());
contractTable_setupPersonColumn.setCellFactory(TextFieldTableCell.forTableColumn(getEmployeeStringConverter())); contractTable_setupPersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
contractTable_setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate()); contractTable_setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate());
// contractTable_setupDateColumn.setSortable(true); // contractTable_setupDateColumn.setSortable(true);
// contractTable_setupDateColumn.setSortType(TableColumn.SortType.DESCENDING); // contractTable_setupDateColumn.setSortType(TableColumn.SortType.DESCENDING);
contractTable_inurePersonColumn.setCellValueFactory(param -> param.getValue().getInurePerson()); contractTable_inurePersonColumn.setCellValueFactory(param -> param.getValue().getInurePerson());
contractTable_inurePersonColumn.setCellFactory(TextFieldTableCell.forTableColumn(getEmployeeStringConverter())); contractTable_inurePersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
contractTable_inureDateColumn.setCellValueFactory(param -> param.getValue().getInureDate()); contractTable_inureDateColumn.setCellValueFactory(param -> param.getValue().getInureDate());
contractTable_varyPersonColumn.setCellValueFactory(param -> param.getValue().getVaryPerson()); contractTable_varyPersonColumn.setCellValueFactory(param -> param.getValue().getVaryPerson());
contractTable_varyPersonColumn.setCellFactory(TextFieldTableCell.forTableColumn(getEmployeeStringConverter())); contractTable_varyPersonColumn.setCellFactory(param->new EmployeeTableCell<>(getEmployeeService()));
contractTable_varyDateColumn.setCellValueFactory(param -> param.getValue().getVaryDate()); contractTable_varyDateColumn.setCellValueFactory(param -> param.getValue().getVaryDate());
contractTable_createdColumn.setCellValueFactory(param -> param.getValue().getCreated()); contractTable_createdColumn.setCellValueFactory(param -> param.getValue().getCreated());
@@ -205,7 +211,7 @@ public class CompanyTabSkinContract
private void onTableUpdateAction(ActionEvent event) { private void onTableUpdateAction(ActionEvent event) {
ContractRepairByCompanyTask task = new ContractRepairByCompanyTask(); ContractRepairByCompanyTask task = new ContractRepairByCompanyTask();
task.setContractService(contractService); task.setContractService(getViewModelService());
task.setCompany(getParent()); task.setCompany(getParent());
UITools.showTaskDialogAndWait("同步合同", task, null); UITools.showTaskDialogAndWait("同步合同", task, null);
if (task.isRepaired()) { if (task.isRepaired()) {
@@ -236,7 +242,7 @@ public class CompanyTabSkinContract
} }
try { try {
Desktop.showInExplorer(file); DesktopUtils.showInExplorer(file);
setStatus("打开文件/目录 " + path); setStatus("打开文件/目录 " + path);
} catch (Exception e) { } catch (Exception e) {
setStatus("打开文件错误:" + e.getMessage()); setStatus("打开文件错误:" + e.getMessage());
@@ -255,6 +261,27 @@ public class CompanyTabSkinContract
return contractService; return contractService;
} }
private ContractTypeService getContractTypeService() {
if (contractTypeService == null) {
contractTypeService = getBean(ContractTypeService.class);
}
return contractTypeService;
}
private ContractKindService getContractKindService() {
if (contractKindService == null) {
contractKindService = getBean(ContractKindService.class);
}
return contractKindService;
}
private ContractGroupService getContractGroupService() {
if (contractGroupService == null) {
contractGroupService = getBean(ContractGroupService.class);
}
return contractGroupService;
}
private EmployeeStringConverter getEmployeeStringConverter() { private EmployeeStringConverter getEmployeeStringConverter() {
if (employeeStringConverter == null) { if (employeeStringConverter == null) {
employeeStringConverter = getBean(EmployeeStringConverter.class); employeeStringConverter = getBean(EmployeeStringConverter.class);

View File

@@ -1,6 +1,5 @@
package com.ecep.contract.manager.ds.company.controller; package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.MyProperties; import com.ecep.contract.manager.MyProperties;
import com.ecep.contract.manager.cloud.tyc.CloudTycService; import com.ecep.contract.manager.cloud.tyc.CloudTycService;
import com.ecep.contract.manager.ds.company.CompanyFileType; import com.ecep.contract.manager.ds.company.CompanyFileType;
@@ -9,9 +8,10 @@ import com.ecep.contract.manager.ds.company.model.CompanyFile;
import com.ecep.contract.manager.ds.company.model.CompanyFileTypeLocal; import com.ecep.contract.manager.ds.company.model.CompanyFileTypeLocal;
import com.ecep.contract.manager.ds.company.service.CompanyFileService; import com.ecep.contract.manager.ds.company.service.CompanyFileService;
import com.ecep.contract.manager.ds.company.vo.CompanyFileViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyFileViewModel;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.application.Platform; import javafx.application.Platform;
@@ -343,7 +343,7 @@ public class CompanyTabSkinFile
setStatus("文件不存在 " + file.getName()); setStatus("文件不存在 " + file.getName());
return; return;
} }
Desktop.showInExplorer(file); DesktopUtils.showInExplorer(file);
} }
} }

View File

@@ -6,9 +6,9 @@ import com.ecep.contract.manager.ds.company.service.InvoiceService;
import com.ecep.contract.manager.ds.company.vo.InvoiceViewModel; import com.ecep.contract.manager.ds.company.vo.InvoiceViewModel;
import com.ecep.contract.manager.ds.contract.service.PurchaseBillVoucherService; import com.ecep.contract.manager.ds.contract.service.PurchaseBillVoucherService;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;

View File

@@ -6,7 +6,7 @@ import com.ecep.contract.manager.ds.company.model.CompanyOldName;
import com.ecep.contract.manager.ds.company.service.CompanyOldNameService; import com.ecep.contract.manager.ds.company.service.CompanyOldNameService;
import com.ecep.contract.manager.ds.company.vo.CompanyOldNameViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyOldNameViewModel;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;

View File

@@ -1,6 +1,5 @@
package com.ecep.contract.manager.ds.company.controller; package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.cloud.rk.CloudRk; import com.ecep.contract.manager.cloud.rk.CloudRk;
import com.ecep.contract.manager.cloud.rk.CloudRkInfoViewModel; import com.ecep.contract.manager.cloud.rk.CloudRkInfoViewModel;
import com.ecep.contract.manager.cloud.rk.CloudRkService; import com.ecep.contract.manager.cloud.rk.CloudRkService;
@@ -17,8 +16,9 @@ import com.ecep.contract.manager.ds.company.service.CompanyExtendInfoService;
import com.ecep.contract.manager.ds.company.vo.CompanyExtendInfoViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyExtendInfoViewModel;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.MessageHolder; import com.ecep.contract.manager.ui.MessageHolder;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.util.DelayOnceExecutor; import com.ecep.contract.manager.ui.util.DelayOnceExecutor;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.application.Platform; import javafx.application.Platform;
@@ -376,7 +376,7 @@ public class CompanyTabSkinOther
Company company = getEntity(); Company company = getEntity();
url = String.format(CloudTycService.URL_COMPANY_SEARCH, company.getName()); url = String.format(CloudTycService.URL_COMPANY_SEARCH, company.getName());
} }
Desktop.showInBrowse(url); DesktopUtils.showInBrowse(url);
} }
public void onTycCloudPaneHyperLinkInnerViewClickedAction(ActionEvent event) { public void onTycCloudPaneHyperLinkInnerViewClickedAction(ActionEvent event) {

View File

@@ -1,7 +1,6 @@
package com.ecep.contract.manager.ds.company.controller; package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.cloud.u8.YongYouU8Service; import com.ecep.contract.manager.cloud.u8.YongYouU8Service;
import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.model.Invoice; import com.ecep.contract.manager.ds.company.model.Invoice;
import com.ecep.contract.manager.ds.company.service.InvoiceService; import com.ecep.contract.manager.ds.company.service.InvoiceService;
import com.ecep.contract.manager.ds.contract.model.PurchaseBillVoucher; import com.ecep.contract.manager.ds.contract.model.PurchaseBillVoucher;
@@ -10,19 +9,16 @@ import com.ecep.contract.manager.ds.contract.vo.PurchaseBillVoucherViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.ViewModelService; import com.ecep.contract.manager.ui.table.cell.InvoiceTableCell;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.control.cell.TextFieldTableCell; import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import lombok.Setter; import lombok.Setter;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* 子合同 * 子合同

View File

@@ -1,41 +0,0 @@
package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService;
import org.hibernate.Hibernate;
import static com.ecep.contract.manager.SpringApp.getBean;
public class CompanyTableCell<V> extends javafx.scene.control.TableCell<V, com.ecep.contract.manager.ds.company.model.Company> {
private CompanyService companyService;
public CompanyTableCell() {
}
public CompanyTableCell(CompanyService companyService) {
this.companyService = companyService;
}
private CompanyService getCompanyService() {
if (companyService == null) {
companyService = getBean(CompanyService.class);
}
return companyService;
}
@Override
protected void updateItem(Company item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
return;
}
if (!Hibernate.isInitialized(item)) {
item = getCompanyService().findById(item.getId());
}
setText(item.getName());
}
}

View File

@@ -1,6 +1,5 @@
package com.ecep.contract.manager.ds.company.controller; package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyFileService; import com.ecep.contract.manager.ds.company.service.CompanyFileService;
@@ -15,9 +14,10 @@ import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService;
import com.ecep.contract.manager.ds.vendor.controller.CompanyVendorWindowController; import com.ecep.contract.manager.ds.vendor.controller.CompanyVendorWindowController;
import com.ecep.contract.manager.ds.vendor.model.CompanyVendor; import com.ecep.contract.manager.ds.vendor.model.CompanyVendor;
import com.ecep.contract.manager.ds.vendor.service.CompanyVendorService; import com.ecep.contract.manager.ds.vendor.service.CompanyVendorService;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.AbstEntityController; import com.ecep.contract.manager.ui.AbstEntityController;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
@@ -307,7 +307,7 @@ public class CompanyWindowController
return; return;
} }
} }
Desktop.checkAndShowInExplorer(company.getPath(), this::setStatus); DesktopUtils.checkAndShowInExplorer(company.getPath(), this::setStatus);
}); });
} }

View File

@@ -1,40 +0,0 @@
package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.ds.company.model.Invoice;
import com.ecep.contract.manager.ds.company.service.InvoiceService;
import javafx.scene.control.TableCell;
import org.hibernate.Hibernate;
import static com.ecep.contract.manager.SpringApp.getBean;
class InvoiceTableCell<V> extends TableCell<V, Invoice> {
private InvoiceService invoiceService;
public InvoiceTableCell() {
}
public InvoiceTableCell(InvoiceService invoiceService) {
this.invoiceService = invoiceService;
}
private InvoiceService getInvoiceService() {
if (invoiceService == null) {
invoiceService = getBean(InvoiceService.class);
}
return invoiceService;
}
@Override
protected void updateItem(Invoice item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
setGraphic(null);
} else {
if (!Hibernate.isInitialized(item)) {
item = getInvoiceService().findById(item.getId());
}
setText(item.getCode());
}
}
}

View File

@@ -5,13 +5,12 @@ import com.ecep.contract.manager.ds.company.CompanyStringConverter;
import com.ecep.contract.manager.ds.company.controller.CompanyWindowController; import com.ecep.contract.manager.ds.company.controller.CompanyWindowController;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.model.CompanyBankAccount; import com.ecep.contract.manager.ds.company.model.CompanyBankAccount;
import com.ecep.contract.manager.ds.company.service.CompanyBankAccountService;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.company.vo.CompanyBankAccountViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyBankAccountViewModel;
import com.ecep.contract.manager.ds.other.BankStringConverter; import com.ecep.contract.manager.ds.other.BankStringConverter;
import com.ecep.contract.manager.ds.other.service.BankService; import com.ecep.contract.manager.ds.other.service.BankService;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;

View File

@@ -4,8 +4,8 @@ import com.ecep.contract.manager.ds.company.model.CompanyOldName;
import com.ecep.contract.manager.ds.company.service.CompanyOldNameService; import com.ecep.contract.manager.ds.company.service.CompanyOldNameService;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.company.vo.CompanyOldNameViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyOldNameViewModel;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import javafx.util.converter.LocalDateStringConverter; import javafx.util.converter.LocalDateStringConverter;
import lombok.Setter; import lombok.Setter;

View File

@@ -1,6 +1,5 @@
package com.ecep.contract.manager.ds.company.controller.old_name; package com.ecep.contract.manager.ds.company.controller.old_name;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.MyProperties; import com.ecep.contract.manager.MyProperties;
import com.ecep.contract.manager.ds.company.CompanyFileType; import com.ecep.contract.manager.ds.company.CompanyFileType;
import com.ecep.contract.manager.ds.company.model.CompanyFile; import com.ecep.contract.manager.ds.company.model.CompanyFile;
@@ -9,8 +8,9 @@ import com.ecep.contract.manager.ds.company.service.CompanyFileService;
import com.ecep.contract.manager.ds.company.service.CompanyOldNameService; import com.ecep.contract.manager.ds.company.service.CompanyOldNameService;
import com.ecep.contract.manager.ds.company.vo.CompanyFileViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyFileViewModel;
import com.ecep.contract.manager.ds.company.vo.CompanyOldNameViewModel; import com.ecep.contract.manager.ds.company.vo.CompanyOldNameViewModel;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.application.Platform; import javafx.application.Platform;
@@ -318,7 +318,7 @@ public class CompanyOldNameTabSkinFile
setStatus("文件不存在 " + file.getName()); setStatus("文件不存在 " + file.getName());
return; return;
} }
Desktop.showInExplorer(file); DesktopUtils.showInExplorer(file);
} }
} }

View File

@@ -8,6 +8,7 @@ import com.ecep.contract.manager.ds.company.vo.CompanyOldNameViewModel;
import com.ecep.contract.manager.ui.AbstEntityController; import com.ecep.contract.manager.ui.AbstEntityController;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.ViewModelService; import com.ecep.contract.manager.ui.ViewModelService;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
@@ -25,8 +26,6 @@ import org.springframework.util.StringUtils;
import java.io.File; import java.io.File;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import static com.ecep.contract.manager.Desktop.showInExplorer;
@Lazy @Lazy
@Scope("prototype") @Scope("prototype")
@Component @Component
@@ -125,7 +124,7 @@ public class CompanyOldNameWindowController extends AbstEntityController<Company
} }
} }
File file = new File(companyOldName.getPath()); File file = new File(companyOldName.getPath());
showInExplorer(file); DesktopUtils.showInExplorer(file);
}); });
} }
} }

View File

@@ -1,18 +1,25 @@
package com.ecep.contract.manager.ds.company.model; package com.ecep.contract.manager.ds.company.model;
import com.ecep.contract.manager.ds.other.model.IdentityEntity;
import com.ecep.contract.manager.ds.other.model.NamedEntity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.proxy.HibernateProxy;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Objects; import java.util.Objects;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.proxy.HibernateProxy;
import com.ecep.contract.manager.ds.other.model.IdentityEntity;
import com.ecep.contract.manager.ds.other.model.NamedEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.Version;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/** /**
* 公司信息类,保存企业信息 * 公司信息类,保存企业信息
*/ */
@@ -32,21 +39,22 @@ public class Company implements IdentityEntity, NamedEntity, com.ecep.contract.
*/ */
private String name; private String name;
/** /**
* 统一社会信用代码 * 统一社会信用代码
* <p> * <p>
* 编码结构 * 编码结构
*
* <pre> * <pre>
* 1 | 1 | 6 | 9 | 1 <br> * 1 | 1 | 6 | 9 | 1 < br > 登记管理部门代码 | 机构类别代码 | 登记管理机关行政区划码 | 主体标识码 | 校验码
* 登记管理部门代码|机构类别代码|登记管理机关行政区划码|主体标识码|校验码
* </pre> * </pre>
* <ul> * <ul>
* <li>登记管理部门代码(第 1 位):<br> * <li>登记管理部门代码(第 1 位):<br>
* 例如9 代表工商部门登记的企业等。</li> * 例如9 代表工商部门登记的企业等。</li>
* <li>机构类别代码(第 2 位):不同的数字表示不同类型的机构。如 1 表示企业2 表示个体工商户等。</li> * <li>机构类别代码(第 2 位):不同的数字表示不同类型的机构。如 1 表示企业2 表示个体工商户等。</li>
* <li>登记管理机关行政区划码(第 3 - 8 位):这 6 位数字代表了登记管理机关所在的行政区划,与身份证号码的前 6 位类似,可对应到具体的地区。</li> * <li>登记管理机关行政区划码(第 3 - 8 位):这 6 位数字代表了登记管理机关所在的行政区划,与身份证号码的前 6
* <li>主体标识码(组织机构代码,第 9 - 17 位):它是对中华人民共和国境内依法注册、依法登记的机关、企事业单位、社会团体和民办非企业单位等机构颁发的一个在全国范围内唯一的、始终不变的代码。</li> * 位类似,可对应到具体的地区。</li>
* <li>主体标识码(组织机构代码,第 9 - 17
* 位):它是对中华人民共和国境内依法注册、依法登记的机关、企事业单位、社会团体和民办非企业单位等机构颁发的一个在全国范围内唯一的、始终不变的代码。</li>
* </ul> * </ul>
* </p> * </p>
*/ */
@@ -176,19 +184,27 @@ public class Company implements IdentityEntity, NamedEntity, com.ecep.contract.
@Override @Override
public final boolean equals(Object object) { public final boolean equals(Object object) {
if (this == object) return true; if (this == object)
if (object == null) return false; return true;
Class<?> oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); if (object == null)
Class<?> thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); return false;
if (thisEffectiveClass != oEffectiveClass) return false; Class<?> oEffectiveClass = object instanceof HibernateProxy
? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass()
: object.getClass();
Class<?> thisEffectiveClass = this instanceof HibernateProxy
? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass()
: this.getClass();
if (thisEffectiveClass != oEffectiveClass)
return false;
Company company = (Company) object; Company company = (Company) object;
return getId() != null && Objects.equals(getId(), company.getId()); return getId() != null && Objects.equals(getId(), company.getId());
} }
@Override @Override
public final int hashCode() { public final int hashCode() {
return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); return this instanceof HibernateProxy
? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode()
: getClass().hashCode();
} }
} }

View File

@@ -3,9 +3,8 @@ package com.ecep.contract.manager.ds.contract.controller;
import com.ecep.contract.manager.ds.contract.model.Contract; import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.service.ContractService; import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.vo.ContractViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import lombok.Setter;
public abstract class AbstContractBasedTabSkin public abstract class AbstContractBasedTabSkin
extends AbstEntityBasedTabSkin<ContractWindowController, Contract, ContractViewModel> extends AbstEntityBasedTabSkin<ContractWindowController, Contract, ContractViewModel>

View File

@@ -5,9 +5,9 @@ import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.vo.ContractViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import com.ecep.contract.manager.ds.other.model.IdentityEntity; import com.ecep.contract.manager.ds.other.model.IdentityEntity;
import com.ecep.contract.manager.ds.other.vo.IdentityViewModel; import com.ecep.contract.manager.ds.other.vo.IdentityViewModel;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.TableOfTabSkin; import com.ecep.contract.manager.ui.table.TableOfTabSkin;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;

View File

@@ -1,40 +0,0 @@
package com.ecep.contract.manager.ds.contract.controller;
import com.ecep.contract.manager.ds.contract.model.ContractGroup;
import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import javafx.scene.control.TableCell;
import org.hibernate.Hibernate;
import static com.ecep.contract.manager.SpringApp.getBean;
public class ContractGroupTableCell extends TableCell<ContractViewModel, ContractGroup> {
private ContractService contractService;
public ContractGroupTableCell() {
}
public ContractGroupTableCell(ContractService contractService) {
this.contractService = contractService;
}
ContractService getContractService() {
if (contractService == null) {
contractService = getBean(ContractService.class);
}
return contractService;
}
@Override
protected void updateItem(ContractGroup item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText("");
return;
}
if (!Hibernate.isInitialized(item)) {
item = getContractService().findGroupById(item.getId());
}
setText(item.getName());
}
}

View File

@@ -1,41 +0,0 @@
package com.ecep.contract.manager.ds.contract.controller;
import com.ecep.contract.manager.ds.contract.model.ContractKind;
import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import javafx.scene.control.TableCell;
import org.hibernate.Hibernate;
import static com.ecep.contract.manager.SpringApp.getBean;
public class ContractKindTableCell extends TableCell<ContractViewModel, ContractKind> {
private ContractService contractService;
public ContractKindTableCell() {
}
public ContractKindTableCell(ContractService contractService) {
this.contractService = contractService;
}
ContractService getContractService() {
if (contractService == null) {
contractService = getBean(ContractService.class);
}
return contractService;
}
@Override
protected void updateItem(ContractKind item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText("");
return;
}
if (!Hibernate.isInitialized(item)) {
item = getContractService().findKindById(item.getId());
}
setText(item.getName());
}
}

View File

@@ -1,42 +1,75 @@
package com.ecep.contract.manager.ds.contract.controller; package com.ecep.contract.manager.ds.contract.controller;
import com.ecep.contract.manager.ds.company.controller.CompanyTableCell; import java.time.format.DateTimeFormatter;
import com.ecep.contract.manager.ds.contract.service.ContractGroupService;
import com.ecep.contract.manager.ds.contract.service.ContractKindService;
import com.ecep.contract.manager.ds.contract.service.ContractTypeService;
import com.ecep.contract.manager.ui.table.cell.*;
import org.springframework.data.jpa.domain.Specification;
import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.contract.ContractPayWay; import com.ecep.contract.manager.ds.contract.ContractPayWay;
import com.ecep.contract.manager.ds.contract.model.Contract; import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.model.ContractGroup; import com.ecep.contract.manager.ds.contract.model.ContractGroup;
import com.ecep.contract.manager.ds.contract.service.ContractService; import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.vo.ContractViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.AbstEntityManagerSkin;
import com.ecep.contract.manager.ui.ComboBoxUtils; import com.ecep.contract.manager.ui.ComboBoxUtils;
import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.ui.ManagerSkin;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import jakarta.persistence.criteria.Path; import jakarta.persistence.criteria.Path;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.cell.TextFieldTableCell; import javafx.scene.control.cell.TextFieldTableCell;
import javafx.util.converter.CurrencyStringConverter; import javafx.util.converter.CurrencyStringConverter;
import javafx.util.converter.LocalDateTimeStringConverter; import javafx.util.converter.LocalDateTimeStringConverter;
import lombok.Setter; import lombok.Setter;
import org.springframework.data.jpa.domain.Specification;
import java.time.format.DateTimeFormatter;
public class ContractManagerSkin public class ContractManagerSkin
extends AbstEntityManagerSkin<Contract, ContractViewModel, ContractManagerSkin, ContractManagerWindowController> extends AbstEntityManagerSkin<Contract, ContractViewModel, ContractManagerSkin, ContractManagerWindowController>
implements ManagerSkin { implements ManagerSkin {
@Setter @Setter
private ContractService contractService; private CompanyService companyService;
@Setter
private ContractGroupService contractGroupService;
@Setter
private ContractKindService contractKindService;
@Setter
private ContractTypeService contractTypeService;
public ContractManagerSkin(ContractManagerWindowController controller) { public ContractManagerSkin(ContractManagerWindowController controller) {
super(controller); super(controller);
} }
public ContractService getContractService() { public ContractService getContractService() {
if (contractService == null) { return controller.getViewModelService();
contractService = getBean(ContractService.class);
} }
return contractService;
public CompanyService getCompanyService() {
if (companyService == null) {
companyService = getBean(CompanyService.class);
}
return companyService;
}private ContractTypeService getContractTypeService() {
if (contractTypeService == null) {
contractTypeService = getBean(ContractTypeService.class);
}
return contractTypeService;
}
private ContractKindService getContractKindService() {
if (contractKindService == null) {
contractKindService = getBean(ContractKindService.class);
}
return contractKindService;
}
private ContractGroupService getContractGroupService() {
if (contractGroupService == null) {
contractGroupService = getBean(ContractGroupService.class);
}
return contractGroupService;
} }
@Override @Override
@@ -52,10 +85,7 @@ public class ContractManagerSkin
builder.equal(payWay, ContractPayWay.PAY), builder.equal(payWay, ContractPayWay.PAY),
builder.or( builder.or(
builder.equal(parentCode, ""), builder.equal(parentCode, ""),
parentCode.isNull() parentCode.isNull())));
)
)
);
}); });
} }
@@ -71,7 +101,7 @@ public class ContractManagerSkin
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public void initializeTable() { public void initializeTable() {
ComboBoxUtils.initialComboBox(controller.groupSelector, contractService.findAllGroups(), true); ComboBoxUtils.initialComboBox(controller.groupSelector, getContractService().findAllGroups(), true);
controller.groupSelector.valueProperty().addListener((observable, oldValue, newValue) -> { controller.groupSelector.valueProperty().addListener((observable, oldValue, newValue) -> {
loadTableDataSet(false); loadTableDataSet(false);
}); });
@@ -80,32 +110,33 @@ public class ContractManagerSkin
controller.nameColumn.setCellValueFactory(param -> param.getValue().getName()); controller.nameColumn.setCellValueFactory(param -> param.getValue().getName());
controller.codeColumn.setCellValueFactory(param -> param.getValue().getCode()); controller.codeColumn.setCellValueFactory(param -> param.getValue().getCode());
controller.groupColumn.setCellValueFactory(param -> param.getValue().getGroup()); controller.groupColumn.setCellValueFactory(param -> param.getValue().getGroup());
controller.groupColumn.setCellFactory(param -> new ContractGroupTableCell(contractService)); controller.groupColumn.setCellFactory(param -> new ContractGroupTableCell<>(getContractGroupService()));
controller.typeColumn.setCellValueFactory(param -> param.getValue().getType()); controller.typeColumn.setCellValueFactory(param -> param.getValue().getType());
controller.typeColumn.setCellFactory(param -> new ContractTypeTableCell(contractService)); controller.typeColumn.setCellFactory(param -> new ContractTypeTableCell<>(getContractTypeService()));
controller.kindColumn.setCellValueFactory(param -> param.getValue().getKind()); controller.kindColumn.setCellValueFactory(param -> param.getValue().getKind());
controller.kindColumn.setCellFactory(param -> new ContractKindTableCell(contractService)); controller.kindColumn.setCellFactory(param -> new ContractKindTableCell<>(getContractKindService()));
controller.parentCodeColumn.setCellValueFactory(param -> param.getValue().getParentCode()); controller.parentCodeColumn.setCellValueFactory(param -> param.getValue().getParentCode());
controller.setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate()); controller.setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate());
controller.orderDateColumn.setCellValueFactory(param -> param.getValue().getOrderDate()); controller.orderDateColumn.setCellValueFactory(param -> param.getValue().getOrderDate());
controller.startDateColumn.setCellValueFactory(param -> param.getValue().getStartDate()); controller.startDateColumn.setCellValueFactory(param -> param.getValue().getStartDate());
controller.employeeColumn.setCellValueFactory(param -> param.getValue().getEmployee()); controller.employeeColumn.setCellValueFactory(param -> param.getValue().getEmployee());
controller.employeeColumn.setCellFactory(TextFieldTableCell.forTableColumn(getBean(EmployeeStringConverter.class))); controller.employeeColumn
.setCellFactory(param -> new EmployeeTableCell<>(controller.getEmployeeService()));
controller.createdColumn.setCellValueFactory(param -> param.getValue().getCreated()); controller.createdColumn.setCellValueFactory(param -> param.getValue().getCreated());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN);
controller.createdColumn.setCellFactory(TextFieldTableCell.forTableColumn(new LocalDateTimeStringConverter(formatter, null))); controller.createdColumn
.setCellFactory(TextFieldTableCell.forTableColumn(new LocalDateTimeStringConverter(formatter, null)));
controller.amountColumn.setCellValueFactory(param -> param.getValue().getAmount()); controller.amountColumn.setCellValueFactory(param -> param.getValue().getAmount());
controller.amountColumn.setCellFactory(TextFieldTableCell.forTableColumn(new CurrencyStringConverter(getLocale(), "#,##0"))); controller.amountColumn
.setCellFactory(TextFieldTableCell.forTableColumn(new CurrencyStringConverter(getLocale(), "#,##0")));
controller.companyColumn.setCellValueFactory(param -> param.getValue().getCompany()); controller.companyColumn.setCellValueFactory(param -> param.getValue().getCompany());
controller.companyColumn.setCellFactory(param -> new CompanyTableCell<>()); controller.companyColumn.setCellFactory(param -> new CompanyTableCell<>(getCompanyService()));
Platform.runLater(() -> { Platform.runLater(() -> {
controller.composeViewBtn.selectedProperty().addListener((observable, oldValue, newValue) -> { controller.composeViewBtn.selectedProperty().addListener((observable, oldValue, newValue) -> {

View File

@@ -1,5 +1,13 @@
package com.ecep.contract.manager.ds.contract.controller; package com.ecep.contract.manager.ds.contract.controller;
import java.time.LocalDate;
import java.time.LocalDateTime;
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.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.contract.model.Contract; import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.model.ContractGroup; import com.ecep.contract.manager.ds.contract.model.ContractGroup;
@@ -12,20 +20,13 @@ import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ui.AbstManagerWindowController; import com.ecep.contract.manager.ui.AbstManagerWindowController;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.ViewModelService;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.CheckBox; import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox; import javafx.scene.control.ComboBox;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
import javafx.stage.Stage; import javafx.stage.Stage;
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.time.LocalDate;
import java.time.LocalDateTime;
@Lazy @Lazy
@Scope("prototype") @Scope("prototype")
@@ -65,7 +66,6 @@ public class ContractManagerWindowController
@Override @Override
protected ContractManagerSkin createDefaultSkin() { protected ContractManagerSkin createDefaultSkin() {
ContractManagerSkin skin = new ContractManagerSkin(this); ContractManagerSkin skin = new ContractManagerSkin(this);
skin.setContractService(contractService);
return skin; return skin;
} }

View File

@@ -25,7 +25,7 @@ import com.ecep.contract.manager.ds.vendor.controller.CompanyVendorWindowControl
import com.ecep.contract.manager.ds.vendor.model.CompanyVendor; import com.ecep.contract.manager.ds.vendor.model.CompanyVendor;
import com.ecep.contract.manager.ds.vendor.service.CompanyVendorService; import com.ecep.contract.manager.ds.vendor.service.CompanyVendorService;
import com.ecep.contract.manager.ds.vendor.service.VendorGroupService; import com.ecep.contract.manager.ds.vendor.service.VendorGroupService;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;

View File

@@ -1,5 +1,10 @@
package com.ecep.contract.manager.ds.contract.controller; package com.ecep.contract.manager.ds.contract.controller;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import org.hibernate.Hibernate;
import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.contract.model.Contract; import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.model.ExtendVendorInfo; import com.ecep.contract.manager.ds.contract.model.ExtendVendorInfo;
@@ -9,34 +14,38 @@ import com.ecep.contract.manager.ds.vendor.model.VendorGroup;
import com.ecep.contract.manager.ds.vendor.service.VendorGroupService; import com.ecep.contract.manager.ds.vendor.service.VendorGroupService;
import com.ecep.contract.manager.ui.ComboBoxUtils; import com.ecep.contract.manager.ui.ComboBoxUtils;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
import javafx.scene.control.*; import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TextField;
import javafx.util.converter.NumberStringConverter; import javafx.util.converter.NumberStringConverter;
import lombok.Setter; import lombok.Setter;
import org.hibernate.Hibernate;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@FxmlPath("/ui/contract/contract-tab-ext-vendor-info.fxml") @FxmlPath("/ui/contract/contract-tab-ext-vendor-info.fxml")
public class ContractTabSkinExtendVendorInfo public class ContractTabSkinExtendVendorInfo
extends AbstContractBasedTabSkin extends AbstContractBasedTabSkin {
implements TabSkin {
@Setter @Setter
private ExtendVendorInfoService extendVendorInfoService; private ExtendVendorInfoService extendVendorInfoService;
@Setter @Setter
private VendorGroupService vendorGroupService; private VendorGroupService vendorGroupService;
@FXML
public ComboBox<VendorGroup> vendorGroupField; public ComboBox<VendorGroup> vendorGroupField;
@FXML
public Label vendorGroupLabel; public Label vendorGroupLabel;
@FXML
public TextField sequenceNumberField; public TextField sequenceNumberField;
@FXML
public CheckBox assignedProviderField; public CheckBox assignedProviderField;
@FXML
public CheckBox prePurchaseField; public CheckBox prePurchaseField;
CompletableFuture<ExtendVendorInfo> loadedFuture; CompletableFuture<ExtendVendorInfo> loadedFuture;
@@ -114,8 +123,8 @@ public class ContractTabSkinExtendVendorInfo
return v.getDescription(); return v.getDescription();
})); }));
sequenceNumberField.textProperty().bindBidirectional(viewModel.getCodeSequenceNumber(),
sequenceNumberField.textProperty().bindBidirectional(viewModel.getCodeSequenceNumber(), new NumberStringConverter()); new NumberStringConverter());
assignedProviderField.selectedProperty().bindBidirectional(viewModel.getAssignedProvider()); assignedProviderField.selectedProperty().bindBidirectional(viewModel.getAssignedProvider());
assignedProviderField.disableProperty().bind(Bindings.createBooleanBinding(() -> { assignedProviderField.disableProperty().bind(Bindings.createBooleanBinding(() -> {
VendorGroup group = viewModel.getGroup().get(); VendorGroup group = viewModel.getGroup().get();
@@ -128,7 +137,6 @@ public class ContractTabSkinExtendVendorInfo
prePurchaseField.selectedProperty().bindBidirectional(viewModel.getPrePurchase()); prePurchaseField.selectedProperty().bindBidirectional(viewModel.getPrePurchase());
} }
@Override @Override
public void save() { public void save() {
if (loadedFuture != null) { if (loadedFuture != null) {

View File

@@ -1,6 +1,5 @@
package com.ecep.contract.manager.ds.contract.controller; package com.ecep.contract.manager.ds.contract.controller;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.cloud.u8.ctx.ContractCtx; import com.ecep.contract.manager.cloud.u8.ctx.ContractCtx;
import com.ecep.contract.manager.ds.company.CompanyFileUtils; import com.ecep.contract.manager.ds.company.CompanyFileUtils;
@@ -14,10 +13,11 @@ import com.ecep.contract.manager.ds.contract.service.ContractFileService;
import com.ecep.contract.manager.ds.contract.tasker.ContractFilesRebuildTasker; import com.ecep.contract.manager.ds.contract.tasker.ContractFilesRebuildTasker;
import com.ecep.contract.manager.ds.contract.tasker.CustomerContractCostFormUpdateTask; import com.ecep.contract.manager.ds.contract.tasker.CustomerContractCostFormUpdateTask;
import com.ecep.contract.manager.ds.contract.vo.ContractFileViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractFileViewModel;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.util.LocalDateFieldTableCell; import com.ecep.contract.manager.ui.util.LocalDateFieldTableCell;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;
@@ -573,7 +573,7 @@ public class ContractTabSkinFiles
setStatus("文件不存在 " + file.getName()); setStatus("文件不存在 " + file.getName());
return; return;
} }
Desktop.showInExplorer(file); DesktopUtils.showInExplorer(file);
} }
public void onFileTableContextMenuShowing(WindowEvent windowEvent) { public void onFileTableContextMenuShowing(WindowEvent windowEvent) {

View File

@@ -9,8 +9,7 @@ import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.vo.ContractItemComposeViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractItemComposeViewModel;
import com.ecep.contract.manager.ds.contract.vo.ContractItemViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractItemViewModel;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.ViewModelService;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.property.SimpleListProperty; import javafx.beans.property.SimpleListProperty;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
@@ -22,7 +21,6 @@ import lombok.Setter;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;

View File

@@ -1,23 +1,21 @@
package com.ecep.contract.manager.ds.contract.controller; package com.ecep.contract.manager.ds.contract.controller;
import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.contract.model.Contract; import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.model.ContractItem; import com.ecep.contract.manager.ds.contract.model.ContractItem;
import com.ecep.contract.manager.ds.contract.service.ContractItemService; import com.ecep.contract.manager.ds.contract.service.ContractItemService;
import com.ecep.contract.manager.ds.contract.vo.ContractItemComposeViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractItemComposeViewModel;
import com.ecep.contract.manager.ds.contract.vo.ContractItemViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractItemViewModel;
import com.ecep.contract.manager.ds.contract.vo.ProjectCostItemViewModel;
import com.ecep.contract.manager.ds.other.EntityStringConverter; import com.ecep.contract.manager.ds.other.EntityStringConverter;
import com.ecep.contract.manager.ds.other.controller.employee.EmployeeTableCell; import com.ecep.contract.manager.ui.table.cell.EmployeeTableCell;
import com.ecep.contract.manager.ds.other.controller.inventory.InventoryWindowController; import com.ecep.contract.manager.ds.other.controller.inventory.InventoryWindowController;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ds.other.model.Inventory; import com.ecep.contract.manager.ds.other.model.Inventory;
import com.ecep.contract.manager.ds.other.service.InventoryService; import com.ecep.contract.manager.ds.other.service.InventoryService;
import com.ecep.contract.manager.ds.other.vo.InventoryViewModel; import com.ecep.contract.manager.ds.other.vo.InventoryViewModel;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.ContextMenu; import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem; import javafx.scene.control.MenuItem;

View File

@@ -5,7 +5,7 @@ import com.ecep.contract.manager.ds.contract.service.ContractPayPlanService;
import com.ecep.contract.manager.ds.contract.vo.ContractPayPlanViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractPayPlanViewModel;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.ViewModelService; import com.ecep.contract.manager.ui.ViewModelService;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import javafx.scene.control.ContextMenu; import javafx.scene.control.ContextMenu;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;

View File

@@ -7,10 +7,9 @@ import com.ecep.contract.manager.ds.contract.service.PurchaseOrdersService;
import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderViewModel; import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@@ -8,7 +8,7 @@ import com.ecep.contract.manager.ds.contract.vo.SalesOrderViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.util.LocalDateFieldTableCell; import com.ecep.contract.manager.ui.util.LocalDateFieldTableCell;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.control.cell.TextFieldTableCell; import javafx.scene.control.cell.TextFieldTableCell;

View File

@@ -5,17 +5,14 @@ import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.service.ContractService; import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.vo.ContractViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.ViewModelService;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List;
/** /**
* 子合同 * 子合同

View File

@@ -11,17 +11,15 @@ import com.ecep.contract.manager.ds.contract.model.ContractFile;
import com.ecep.contract.manager.ds.contract.service.ContractBidVendorService; import com.ecep.contract.manager.ds.contract.service.ContractBidVendorService;
import com.ecep.contract.manager.ds.contract.service.ContractFileService; import com.ecep.contract.manager.ds.contract.service.ContractFileService;
import com.ecep.contract.manager.ds.contract.vo.ContractBidVendorViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractBidVendorViewModel;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.ViewModelService;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.util.StringConverter; import javafx.util.StringConverter;
import lombok.Setter; import lombok.Setter;
import org.controlsfx.control.textfield.TextFields; import org.controlsfx.control.textfield.TextFields;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import org.springframework.data.jpa.domain.Specification;
import java.util.List; import java.util.List;

View File

@@ -1,40 +0,0 @@
package com.ecep.contract.manager.ds.contract.controller;
import com.ecep.contract.manager.ds.contract.model.ContractType;
import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import javafx.scene.control.TableCell;
import org.hibernate.Hibernate;
import static com.ecep.contract.manager.SpringApp.getBean;
public class ContractTypeTableCell extends TableCell<ContractViewModel, ContractType> {
private ContractService contractService;
public ContractTypeTableCell() {
}
public ContractTypeTableCell(ContractService contractService) {
this.contractService = contractService;
}
ContractService getContractService() {
if (contractService == null) {
contractService = getBean(ContractService.class);
}
return contractService;
}
@Override
protected void updateItem(ContractType item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText("");
return;
}
if (!Hibernate.isInitialized(item)) {
item = getContractService().findTypeById(item.getId());
}
setText(item.getName());
}
}

View File

@@ -13,6 +13,7 @@ import com.ecep.contract.manager.ds.vendor.service.VendorGroupService;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.Message; import com.ecep.contract.manager.ui.Message;
import com.ecep.contract.manager.ui.MessageHolder; import com.ecep.contract.manager.ui.MessageHolder;
import com.ecep.contract.manager.ui.table.cell.EmployeeTableCell;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.property.SimpleListProperty; import javafx.beans.property.SimpleListProperty;
@@ -23,6 +24,7 @@ import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.FXML;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import javafx.stage.*; import javafx.stage.*;
@@ -103,24 +105,7 @@ public class ContractVerifyWindowController extends BaseController {
} }
class EmployeeTableCell extends TableCell<Model, Employee> {
@Override
protected void updateItem(Employee item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
return;
}
if (!Hibernate.isInitialized(item)) {
item = employeeService.findById(item.getId());
Model model = getTableRow().getItem();
if (model != null) {
model.getEmployee().set(item);
}
}
setText(item.toPrettyString());
}
}
static class StateTableCell extends TableCell<Model, ObservableList<MessageExt>> { static class StateTableCell extends TableCell<Model, ObservableList<MessageExt>> {
Label message2Label(MessageExt message) { Label message2Label(MessageExt message) {
@@ -177,29 +162,46 @@ public class ContractVerifyWindowController extends BaseController {
@Autowired @Autowired
private EmployeeService employeeService; private EmployeeService employeeService;
@FXML
public DatePicker setupDateBeginSelector; public DatePicker setupDateBeginSelector;
@FXML
public DatePicker setupDateEndSelector; public DatePicker setupDateEndSelector;
// 企业验证开关 // 企业验证开关
@FXML
public CheckMenuItem verifyCompanyStatusChecker; public CheckMenuItem verifyCompanyStatusChecker;
@FXML
public CheckMenuItem verifyCompanyPathChecker; public CheckMenuItem verifyCompanyPathChecker;
@FXML
public CheckMenuItem verifyCompanyCreditChecker; public CheckMenuItem verifyCompanyCreditChecker;
// 供应商验证开关 // 供应商验证开关
@FXML
public CheckMenuItem verifyVendorChecker; public CheckMenuItem verifyVendorChecker;
@FXML
public CheckMenuItem verifyVendorFileChecker; public CheckMenuItem verifyVendorFileChecker;
// 客户验证开关 // 客户验证开关
@FXML
public CheckMenuItem verifyCustomerChecker; public CheckMenuItem verifyCustomerChecker;
@FXML
public CheckMenuItem verifyCustomerFileChecker; public CheckMenuItem verifyCustomerFileChecker;
@FXML
public CheckMenuItem verifyCustomerSubContractDateChecker; public CheckMenuItem verifyCustomerSubContractDateChecker;
@FXML
public CheckMenuItem onlyShowVerifiedChecker; public CheckMenuItem onlyShowVerifiedChecker;
@FXML
public TableView<Model> viewTable; public TableView<Model> viewTable;
private final ObservableList<Model> viewTableDataSet = FXCollections.observableArrayList(); private final ObservableList<Model> viewTableDataSet = FXCollections.observableArrayList();
@FXML
public TableColumn<Model, String> viewTable_codeColumn; public TableColumn<Model, String> viewTable_codeColumn;
@FXML
public TableColumn<Model, String> viewTable_nameColumn; public TableColumn<Model, String> viewTable_nameColumn;
@FXML
public TableColumn<Model, Employee> viewTable_employeeColumn; public TableColumn<Model, Employee> viewTable_employeeColumn;
@FXML
public TableColumn<Model, LocalDate> viewTable_setupDateColumn; public TableColumn<Model, LocalDate> viewTable_setupDateColumn;
@FXML
public TableColumn<Model, ObservableList<MessageExt>> viewTable_stateColumn; public TableColumn<Model, ObservableList<MessageExt>> viewTable_stateColumn;
@Override @Override
@@ -220,7 +222,7 @@ public class ContractVerifyWindowController extends BaseController {
viewTable_codeColumn.setCellValueFactory(param -> param.getValue().getCode()); viewTable_codeColumn.setCellValueFactory(param -> param.getValue().getCode());
viewTable_nameColumn.setCellValueFactory(param -> param.getValue().getName()); viewTable_nameColumn.setCellValueFactory(param -> param.getValue().getName());
viewTable_employeeColumn.setCellValueFactory(param -> param.getValue().getEmployee()); viewTable_employeeColumn.setCellValueFactory(param -> param.getValue().getEmployee());
viewTable_employeeColumn.setCellFactory(param -> new EmployeeTableCell()); viewTable_employeeColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
viewTable_setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate()); viewTable_setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate());
// viewTable_stateColumn.setCellValueFactory(param -> param.getValue().getMessages().map(messages -> { // viewTable_stateColumn.setCellValueFactory(param -> param.getValue().getMessages().map(messages -> {
// return messages.stream().map(Message::getMessage).collect(Collectors.joining(", ")); // return messages.stream().map(Message::getMessage).collect(Collectors.joining(", "));

View File

@@ -1,6 +1,5 @@
package com.ecep.contract.manager.ds.contract.controller; package com.ecep.contract.manager.ds.contract.controller;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.ds.company.controller.CompanyWindowController; import com.ecep.contract.manager.ds.company.controller.CompanyWindowController;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
@@ -12,6 +11,7 @@ import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import com.ecep.contract.manager.ds.project.service.ProjectService; import com.ecep.contract.manager.ds.project.service.ProjectService;
import com.ecep.contract.manager.ui.AbstEntityController; import com.ecep.contract.manager.ui.AbstEntityController;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
@@ -184,7 +184,7 @@ public class ContractWindowController
setStatus("目录错误,不存在"); setStatus("目录错误,不存在");
return; return;
} }
Desktop.showInExplorer(file); DesktopUtils.showInExplorer(file);
} }
public void onContractOpenRelativeCompanyAction(ActionEvent event) { public void onContractOpenRelativeCompanyAction(ActionEvent event) {

View File

@@ -14,8 +14,8 @@ import com.ecep.contract.manager.ds.contract.vo.ContractBidVendorViewModel;
import com.ecep.contract.manager.ds.contract.vo.ContractFileViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractFileViewModel;
import com.ecep.contract.manager.ds.other.EntityStringConverter; import com.ecep.contract.manager.ds.other.EntityStringConverter;
import com.ecep.contract.manager.ds.other.vo.BaseViewModel; import com.ecep.contract.manager.ds.other.vo.BaseViewModel;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;

View File

@@ -1,38 +0,0 @@
package com.ecep.contract.manager.ds.contract.controller.purchase_bill;
import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.vo.PurchaseBillVoucherItemViewModel;
import javafx.scene.control.TableCell;
import org.hibernate.Hibernate;
class ContractTableCell extends TableCell<PurchaseBillVoucherItemViewModel, Contract> {
private final PurchaseBillVoucherTabSkinItems purchaseBillVoucherTabSkinItems;
ContractService contractService;
public ContractTableCell(PurchaseBillVoucherTabSkinItems purchaseBillVoucherTabSkinItems) {
this.purchaseBillVoucherTabSkinItems = purchaseBillVoucherTabSkinItems;
}
ContractService getContractService() {
if (contractService == null) {
contractService = purchaseBillVoucherTabSkinItems.getBean(ContractService.class);
}
return contractService;
}
@Override
protected void updateItem(Contract item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
setGraphic(null);
} else {
if (!Hibernate.isInitialized(item)) {
item = getContractService().findById(item.getId());
getTableRow().getItem().getContract().set(item);
}
setText(item.getCode());
}
}
}

View File

@@ -7,14 +7,20 @@ import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.model.PurchaseBillVoucher; import com.ecep.contract.manager.ds.contract.model.PurchaseBillVoucher;
import com.ecep.contract.manager.ds.contract.model.PurchaseBillVoucherItem; import com.ecep.contract.manager.ds.contract.model.PurchaseBillVoucherItem;
import com.ecep.contract.manager.ds.contract.model.PurchaseOrderItem; import com.ecep.contract.manager.ds.contract.model.PurchaseOrderItem;
import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.service.PurchaseBillVoucherItemService; import com.ecep.contract.manager.ds.contract.service.PurchaseBillVoucherItemService;
import com.ecep.contract.manager.ds.contract.service.PurchaseOrderItemService;
import com.ecep.contract.manager.ds.contract.vo.PurchaseBillVoucherItemViewModel; import com.ecep.contract.manager.ds.contract.vo.PurchaseBillVoucherItemViewModel;
import com.ecep.contract.manager.ds.contract.vo.PurchaseBillVoucherViewModel; import com.ecep.contract.manager.ds.contract.vo.PurchaseBillVoucherViewModel;
import com.ecep.contract.manager.ds.other.controller.InventoryTableCell;
import com.ecep.contract.manager.ds.other.model.Inventory; import com.ecep.contract.manager.ds.other.model.Inventory;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ds.other.service.InventoryService;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.table.cell.ContractTableCell;
import com.ecep.contract.manager.ui.table.cell.InventoryTableCell;
import com.ecep.contract.manager.ui.table.cell.InvoiceTableCell;
import com.ecep.contract.manager.ui.table.cell.PurchaseOrderItemTableCell;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
@@ -22,7 +28,6 @@ import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
import javafx.util.Callback; import javafx.util.Callback;
import lombok.Setter; import lombok.Setter;
import org.hibernate.Hibernate;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
@FxmlPath("/ui/contract/purchase-bill-voucher-tab-item.fxml") @FxmlPath("/ui/contract/purchase-bill-voucher-tab-item.fxml")
@@ -44,6 +49,14 @@ public class PurchaseBillVoucherTabSkinItems
@Setter @Setter
private PurchaseBillVoucherItemService service; private PurchaseBillVoucherItemService service;
@Setter
private ContractService contractService;
@Setter
private InventoryService inventoryService;
@Setter
private InvoiceService invoiceService;
@Setter
private PurchaseOrderItemService purchaseOrderItemService;
public PurchaseBillVoucherTabSkinItems(PurchaseBillVoucherWindowController controller) { public PurchaseBillVoucherTabSkinItems(PurchaseBillVoucherWindowController controller) {
super(controller); super(controller);
@@ -57,6 +70,34 @@ public class PurchaseBillVoucherTabSkinItems
return service; return service;
} }
ContractService getContractService() {
if (contractService == null) {
contractService = SpringApp.getBean(ContractService.class);
}
return contractService;
}
InventoryService getInventoryService() {
if (inventoryService == null) {
inventoryService = SpringApp.getBean(InventoryService.class);
}
return inventoryService;
}
InvoiceService getInvoiceService() {
if (invoiceService == null) {
invoiceService = SpringApp.getBean(InvoiceService.class);
}
return invoiceService;
}
PurchaseOrderItemService getPurchaseOrderItemService() {
if (purchaseOrderItemService == null) {
purchaseOrderItemService = SpringApp.getBean(PurchaseOrderItemService.class);
}
return purchaseOrderItemService;
}
@Override @Override
public Specification<PurchaseBillVoucherItem> getSpecification(PurchaseBillVoucher parent) { public Specification<PurchaseBillVoucherItem> getSpecification(PurchaseBillVoucher parent) {
return SpecificationUtils.and(getSpecification(), (root, query, builder) -> { return SpecificationUtils.and(getSpecification(), (root, query, builder) -> {
@@ -74,13 +115,13 @@ public class PurchaseBillVoucherTabSkinItems
idColumn.setCellValueFactory(param -> param.getValue().getId()); idColumn.setCellValueFactory(param -> param.getValue().getId());
refIdColumn.setCellValueFactory(param -> param.getValue().getRefId()); refIdColumn.setCellValueFactory(param -> param.getValue().getRefId());
inventoryColumn.setCellValueFactory(param -> param.getValue().getInventory()); inventoryColumn.setCellValueFactory(param -> param.getValue().getInventory());
inventoryColumn.setCellFactory(col -> new InventoryTableCell<>()); inventoryColumn.setCellFactory(col -> new InventoryTableCell<>(getInventoryService()));
invoiceColumn.setCellValueFactory(param -> param.getValue().getInvoice()); invoiceColumn.setCellValueFactory(param -> param.getValue().getInvoice());
invoiceColumn.setCellFactory(col -> new InvoiceTableCell()); invoiceColumn.setCellFactory(col -> new InvoiceTableCell<>(getInvoiceService()));
contractColumn.setCellValueFactory(param -> param.getValue().getContract()); contractColumn.setCellValueFactory(param -> param.getValue().getContract());
contractColumn.setCellFactory(col -> new ContractTableCell(this)); contractColumn.setCellFactory(col -> new ContractTableCell<>(getContractService()));
orderItemColumn.setCellValueFactory(param -> param.getValue().getOrderItem()); orderItemColumn.setCellValueFactory(param -> param.getValue().getOrderItem());
orderItemColumn.setCellFactory(col -> new PurchaseOrderItemTableCell(this)); orderItemColumn.setCellFactory(col -> new PurchaseOrderItemTableCell<>(getPurchaseOrderItemService()));
NumberCellFactory v1 = new NumberCellFactory("%,.1f", null); NumberCellFactory v1 = new NumberCellFactory("%,.1f", null);
NumberCellFactory v2 = new NumberCellFactory("%,.2f", null); NumberCellFactory v2 = new NumberCellFactory("%,.2f", null);
@@ -96,32 +137,6 @@ public class PurchaseBillVoucherTabSkinItems
super.initializeTab(); super.initializeTab();
} }
private static class InvoiceTableCell extends TableCell<PurchaseBillVoucherItemViewModel, Invoice> {
private InvoiceService invoiceService;
InvoiceService getInvoiceService() {
if (invoiceService == null) {
invoiceService = SpringApp.getBean(InvoiceService.class);
}
return invoiceService;
}
@Override
protected void updateItem(Invoice item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
setGraphic(null);
} else {
if (!Hibernate.isInitialized(item)) {
item = getInvoiceService().findById(item.getId());
getTableRow().getItem().getInvoice().set(item);
}
setText(item.getCode());
}
}
}
static class NumberCellFactory implements Callback<TableColumn<PurchaseBillVoucherItemViewModel, Double>, TableCell<PurchaseBillVoucherItemViewModel, Double>> { static class NumberCellFactory implements Callback<TableColumn<PurchaseBillVoucherItemViewModel, Double>, TableCell<PurchaseBillVoucherItemViewModel, Double>> {
private final String format; private final String format;

View File

@@ -1,71 +0,0 @@
package com.ecep.contract.manager.ds.contract.controller.purchase_bill;
import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.contract.model.PurchaseOrderItem;
import com.ecep.contract.manager.ds.contract.service.PurchaseOrderItemService;
import com.ecep.contract.manager.ds.contract.service.PurchaseOrdersService;
import com.ecep.contract.manager.ds.contract.vo.PurchaseBillVoucherItemViewModel;
import com.ecep.contract.manager.ds.other.model.Inventory;
import com.ecep.contract.manager.ds.other.service.InventoryCatalogService;
import com.ecep.contract.manager.ds.other.service.InventoryService;
import javafx.scene.control.TableCell;
import org.hibernate.Hibernate;
class PurchaseOrderItemTableCell extends TableCell<PurchaseBillVoucherItemViewModel, PurchaseOrderItem> {
private final PurchaseBillVoucherTabSkinItems purchaseBillVoucherTabSkinItems;
PurchaseOrdersService service;
PurchaseOrderItemService itemService;
private InventoryService inventoryService;
private InventoryCatalogService inventoryCatalogService;
public PurchaseOrderItemTableCell(PurchaseBillVoucherTabSkinItems purchaseBillVoucherTabSkinItems) {
this.purchaseBillVoucherTabSkinItems = purchaseBillVoucherTabSkinItems;
}
InventoryService getInventoryService() {
if (inventoryService == null) {
inventoryService = SpringApp.getBean(InventoryService.class);
}
return inventoryService;
}
InventoryCatalogService getInventoryCatalogService() {
if (inventoryCatalogService == null) {
inventoryCatalogService = SpringApp.getBean(InventoryCatalogService.class);
}
return inventoryCatalogService;
}
PurchaseOrdersService getPurchaseOrdersService() {
if (service == null)
service = purchaseBillVoucherTabSkinItems.getBean(PurchaseOrdersService.class);
return service;
}
PurchaseOrderItemService getPurchaseOrderItemService() {
if (itemService == null)
itemService = purchaseBillVoucherTabSkinItems.getBean(PurchaseOrderItemService.class);
return itemService;
}
@Override
protected void updateItem(PurchaseOrderItem item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
setGraphic(null);
} else {
if (!Hibernate.isInitialized(item)) {
item = getPurchaseOrderItemService().findById(item.getId());
getTableRow().getItem().getOrderItem().set(item);
}
Inventory inventory = item.getInventory();
if (!Hibernate.isInitialized(inventory)) {
inventory = getInventoryService().findById(inventory.getId());
item.setInventory(inventory);
}
setText(inventory.toPrettyString() + " x " + item.getQuantity());
}
}
}

View File

@@ -7,8 +7,8 @@ import com.ecep.contract.manager.ds.contract.service.ContractFileService;
import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderViewModel; import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;

View File

@@ -14,10 +14,10 @@ import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ds.other.EntityStringConverter; import com.ecep.contract.manager.ds.other.EntityStringConverter;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import jakarta.persistence.criteria.Join; import jakarta.persistence.criteria.Join;
import jakarta.persistence.criteria.JoinType; import jakarta.persistence.criteria.JoinType;

View File

@@ -11,12 +11,12 @@ import com.ecep.contract.manager.ds.contract.service.PurchaseOrdersService;
import com.ecep.contract.manager.ds.contract.vo.ContractItemComposeViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractItemComposeViewModel;
import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderItemViewModel; import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderItemViewModel;
import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderViewModel; import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderViewModel;
import com.ecep.contract.manager.ds.other.controller.InventoryTableCell; import com.ecep.contract.manager.ui.table.cell.InventoryTableCell;
import com.ecep.contract.manager.ds.other.model.Inventory; import com.ecep.contract.manager.ds.other.model.Inventory;
import com.ecep.contract.manager.ds.other.service.InventoryService; import com.ecep.contract.manager.ds.other.service.InventoryService;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;

View File

@@ -7,8 +7,8 @@ import com.ecep.contract.manager.ds.contract.service.ContractFileService;
import com.ecep.contract.manager.ds.contract.vo.SalesOrderViewModel; import com.ecep.contract.manager.ds.contract.vo.SalesOrderViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;

View File

@@ -13,9 +13,9 @@ import com.ecep.contract.manager.ds.contract.vo.SalesBillVoucherViewModel;
import com.ecep.contract.manager.ds.contract.vo.SalesOrderViewModel; import com.ecep.contract.manager.ds.contract.vo.SalesOrderViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;

View File

@@ -11,9 +11,9 @@ import com.ecep.contract.manager.ds.contract.service.SalesOrderItemService;
import com.ecep.contract.manager.ds.contract.vo.ContractItemComposeViewModel; import com.ecep.contract.manager.ds.contract.vo.ContractItemComposeViewModel;
import com.ecep.contract.manager.ds.contract.vo.SalesOrderItemViewModel; import com.ecep.contract.manager.ds.contract.vo.SalesOrderItemViewModel;
import com.ecep.contract.manager.ds.contract.vo.SalesOrderViewModel; import com.ecep.contract.manager.ds.contract.vo.SalesOrderViewModel;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;

View File

@@ -2,6 +2,7 @@ package com.ecep.contract.manager.ds.contract.service;
import com.ecep.contract.manager.ds.contract.model.ContractGroup; import com.ecep.contract.manager.ds.contract.model.ContractGroup;
import com.ecep.contract.manager.ds.contract.repository.ContractGroupRepository; import com.ecep.contract.manager.ds.contract.repository.ContractGroupRepository;
import com.ecep.contract.manager.ds.other.service.IEntityService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -10,6 +11,9 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching; import org.springframework.cache.annotation.Caching;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@@ -20,30 +24,46 @@ import java.util.List;
@Lazy @Lazy
@Service @Service
@CacheConfig(cacheNames = "contract-group") @CacheConfig(cacheNames = "contract-group")
public class ContractGroupService { public class ContractGroupService implements IEntityService<ContractGroup> {
private static final Logger logger = LoggerFactory.getLogger(ContractGroupService.class); private static final Logger logger = LoggerFactory.getLogger(ContractGroupService.class);
@Lazy @Lazy
@Autowired @Autowired
private ContractGroupRepository contractGroupRepository; private ContractGroupRepository repository;
@Cacheable(key = "#p0") @Cacheable(key = "#p0")
public ContractGroup findById(Integer id) { public ContractGroup findById(Integer id) {
return contractGroupRepository.findById(id).orElse(null); return repository.findById(id).orElse(null);
}
@Override
public Page<ContractGroup> findAll(Specification<ContractGroup> spec, Pageable pageable) {
return repository.findAll(spec, pageable);
}
@Override
public Specification<ContractGroup> getSpecification(String searchText) {
return (root, query, builder)->{
return builder.or(
builder.like(root.get("code"), "%" + searchText + "%"),
builder.like(root.get("name"), "%" + searchText + "%"),
builder.like(root.get("title"), "%" + searchText + "%")
);
};
} }
public ContractGroup findByName(String name) { public ContractGroup findByName(String name) {
return contractGroupRepository.findByName(name).orElse(null); return repository.findByName(name).orElse(null);
} }
@Cacheable(key = "'code-'+#p0") @Cacheable(key = "'code-'+#p0")
public ContractGroup findByCode(String code) { public ContractGroup findByCode(String code) {
return contractGroupRepository.findByCode(code).orElse(null); return repository.findByCode(code).orElse(null);
} }
@Cacheable(key = "'groups'") @Cacheable(key = "'groups'")
public List<ContractGroup> findAll() { public List<ContractGroup> findAll() {
return contractGroupRepository.findAll(); return repository.findAll();
} }
@Caching(evict = { @Caching(evict = {
@@ -52,7 +72,7 @@ public class ContractGroupService {
@CacheEvict(key = "'code-'+#p0.code"), @CacheEvict(key = "'code-'+#p0.code"),
}) })
public ContractGroup save(ContractGroup group) { public ContractGroup save(ContractGroup group) {
return contractGroupRepository.save(group); return repository.save(group);
} }
@Caching(evict = { @Caching(evict = {
@@ -60,7 +80,7 @@ public class ContractGroupService {
@CacheEvict(key = "'groups'"), @CacheEvict(key = "'groups'"),
}) })
public void delete(Integer id) { public void delete(Integer id) {
contractGroupRepository.deleteById(id); repository.deleteById(id);
} }
@Caching(evict = { @Caching(evict = {
@@ -69,7 +89,7 @@ public class ContractGroupService {
@CacheEvict(key = "'code-'+#p0.code"), @CacheEvict(key = "'code-'+#p0.code"),
}) })
public void delete(ContractGroup group) { public void delete(ContractGroup group) {
contractGroupRepository.delete(group); repository.delete(group);
} }
public ContractGroup newContractGroup() { public ContractGroup newContractGroup() {

View File

@@ -2,6 +2,7 @@ package com.ecep.contract.manager.ds.contract.service;
import com.ecep.contract.manager.ds.contract.model.ContractKind; import com.ecep.contract.manager.ds.contract.model.ContractKind;
import com.ecep.contract.manager.ds.contract.repository.ContractKindRepository; import com.ecep.contract.manager.ds.contract.repository.ContractKindRepository;
import com.ecep.contract.manager.ds.other.service.IEntityService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -10,6 +11,9 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching; import org.springframework.cache.annotation.Caching;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@@ -20,41 +24,62 @@ import java.util.List;
@Lazy @Lazy
@Service @Service
@CacheConfig(cacheNames = "contract-kind") @CacheConfig(cacheNames = "contract-kind")
public class ContractKindService { public class ContractKindService implements IEntityService<ContractKind> {
private static final Logger logger = LoggerFactory.getLogger(ContractKindService.class); private static final Logger logger = LoggerFactory.getLogger(ContractKindService.class);
@Lazy @Lazy
@Autowired @Autowired
private ContractKindRepository contractKindRepository; private ContractKindRepository repository;
@Cacheable(key = "'kind-'+#p0") @Cacheable(key = "'kind-'+#p0")
public ContractKind findById(Integer id) { public ContractKind findById(Integer id) {
return contractKindRepository.findById(id).orElse(null); return repository.findById(id).orElse(null);
}
@Override
public Page<ContractKind> findAll(Specification<ContractKind> spec, Pageable pageable) {
return repository.findAll(spec, pageable);
}
@Override
public Specification<ContractKind> getSpecification(String searchText) {
return (root, query, builder) -> {
return builder.or(
builder.like(root.get("code"), "%" + searchText + "%"),
builder.like(root.get("name"), "%" + searchText + "%"),
builder.like(root.get("title"), "%" + searchText + "%")
);
};
}
@Override
public void delete(ContractKind entity) {
repository.delete(entity);
} }
public ContractKind findByName(String name) { public ContractKind findByName(String name) {
return contractKindRepository.findByName(name).orElse(null); return repository.findByName(name).orElse(null);
} }
@Cacheable(key = "'kind-code-'+#p0") @Cacheable(key = "'code-'+#p0")
public ContractKind findByCode(String code) { public ContractKind findByCode(String code) {
return contractKindRepository.findByCode(code).orElse(null); return repository.findByCode(code).orElse(null);
} }
@Cacheable(key = "'kinds'") @Cacheable(key = "'kinds'")
public List<ContractKind> findAll() { public List<ContractKind> findAll() {
return contractKindRepository.findAll(); return repository.findAll();
} }
@Caching( @Caching(
evict = { evict = {
@CacheEvict(key = "'kinds'"), @CacheEvict(key = "'kinds'"),
@CacheEvict(key = "'kind-'+#p0.id"), @CacheEvict(key = "'kind-'+#p0.id"),
@CacheEvict(key = "'kind-code-'+#p0.name"), @CacheEvict(key = "'code-'+#p0.name"),
} }
) )
public ContractKind save(ContractKind kind) { public ContractKind save(ContractKind kind) {
return contractKindRepository.save(kind); return repository.save(kind);
} }
@Caching( @Caching(
@@ -64,6 +89,6 @@ public class ContractKindService {
} }
) )
public void delete(Integer id) { public void delete(Integer id) {
contractKindRepository.deleteById(id); repository.deleteById(id);
} }
} }

View File

@@ -2,6 +2,7 @@ package com.ecep.contract.manager.ds.contract.service;
import com.ecep.contract.manager.ds.contract.model.ContractType; import com.ecep.contract.manager.ds.contract.model.ContractType;
import com.ecep.contract.manager.ds.contract.repository.ContractTypeRepository; import com.ecep.contract.manager.ds.contract.repository.ContractTypeRepository;
import com.ecep.contract.manager.ds.other.service.IEntityService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -10,6 +11,9 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching; import org.springframework.cache.annotation.Caching;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@@ -20,30 +24,35 @@ import java.util.List;
@Lazy @Lazy
@Service @Service
@CacheConfig(cacheNames = "contract-type") @CacheConfig(cacheNames = "contract-type")
public class ContractTypeService { public class ContractTypeService implements IEntityService<ContractType> {
private static final Logger logger = LoggerFactory.getLogger(ContractTypeService.class); private static final Logger logger = LoggerFactory.getLogger(ContractTypeService.class);
@Lazy @Lazy
@Autowired @Autowired
private ContractTypeRepository contractTypeRepository; private ContractTypeRepository repository;
@Cacheable(key = "#p0") @Cacheable(key = "#p0")
public ContractType findById(Integer id) { public ContractType findById(Integer id) {
return contractTypeRepository.findById(id).orElse(null); return repository.findById(id).orElse(null);
}
@Override
public Page<ContractType> findAll(Specification<ContractType> spec, Pageable pageable) {
return repository.findAll(spec, pageable);
} }
public ContractType findByName(String name) { public ContractType findByName(String name) {
return contractTypeRepository.findByName(name).orElse(null); return repository.findByName(name).orElse(null);
} }
@Cacheable(key = "'code-'+#p0") @Cacheable(key = "'code-'+#p0")
public ContractType findByCode(String code) { public ContractType findByCode(String code) {
return contractTypeRepository.findByCode(code).orElse(null); return repository.findByCode(code).orElse(null);
} }
@Cacheable(key = "'types'") @Cacheable(key = "'types'")
public List<ContractType> findAll() { public List<ContractType> findAll() {
return contractTypeRepository.findAll(); return repository.findAll();
} }
@Caching(evict = { @Caching(evict = {
@@ -52,7 +61,7 @@ public class ContractTypeService {
@CacheEvict(key = "'types'"), @CacheEvict(key = "'types'"),
}) })
public ContractType save(ContractType type) { public ContractType save(ContractType type) {
return contractTypeRepository.save(type); return repository.save(type);
} }
@Caching(evict = { @Caching(evict = {
@@ -60,7 +69,7 @@ public class ContractTypeService {
@CacheEvict(key = "'types'"), @CacheEvict(key = "'types'"),
}) })
public void delete(Integer id) { public void delete(Integer id) {
contractTypeRepository.deleteById(id); repository.deleteById(id);
} }
@Caching(evict = { @Caching(evict = {
@@ -69,6 +78,17 @@ public class ContractTypeService {
@CacheEvict(key = "'types'"), @CacheEvict(key = "'types'"),
}) })
public void delete(ContractType type) { public void delete(ContractType type) {
contractTypeRepository.delete(type); repository.delete(type);
}
@Override
public Specification<ContractType> getSpecification(String searchText) {
return (root, query, builder) -> {
return builder.or(
builder.like(root.get("code"), "%" + searchText + "%"),
builder.like(root.get("name"), "%" + searchText + "%")
);
};
} }
} }

View File

@@ -5,10 +5,9 @@ import com.ecep.contract.manager.ds.customer.model.CompanyCustomer;
import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService; import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService;
import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel; import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel;
import com.ecep.contract.manager.ds.other.model.IdentityEntity; import com.ecep.contract.manager.ds.other.model.IdentityEntity;
import com.ecep.contract.manager.ds.other.vo.BaseViewModel;
import com.ecep.contract.manager.ds.other.vo.IdentityViewModel; import com.ecep.contract.manager.ds.other.vo.IdentityViewModel;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
public abstract class AbstCompanyCustomerTableTabSkin<T extends IdentityEntity, TV extends IdentityViewModel<T>> public abstract class AbstCompanyCustomerTableTabSkin<T extends IdentityEntity, TV extends IdentityViewModel<T>>
extends AbstEntityTableTabSkin<CompanyCustomerWindowController, CompanyCustomer, CompanyCustomerViewModel, T, TV> extends AbstEntityTableTabSkin<CompanyCustomerWindowController, CompanyCustomer, CompanyCustomerViewModel, T, TV>

View File

@@ -1,29 +1,19 @@
package com.ecep.contract.manager.ds.customer.controller; package com.ecep.contract.manager.ds.customer.controller;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ui.table.cell.CompanyTableCell;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.customer.model.CompanyCustomer; import com.ecep.contract.manager.ds.customer.model.CompanyCustomer;
import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService; import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService;
import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel; import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel;
import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.AbstEntityManagerSkin;
import com.ecep.contract.manager.ui.ManagerSkin;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.MyStringUtils;
import com.ecep.contract.manager.util.TableViewUtils;
import javafx.application.Platform;
import javafx.beans.binding.Bindings;
import lombok.Setter;
import org.hibernate.Hibernate;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.util.StringUtils;
import java.util.List; import javafx.application.Platform;
import lombok.Setter;
public class CompanyCustomerManagerSkin public class CompanyCustomerManagerSkin
extends AbstEntityManagerSkin<CompanyCustomer, CompanyCustomerViewModel, CompanyCustomerManagerSkin, CompanyCustomerManagerWindowController> extends
implements ManagerSkin { AbstEntityManagerSkin<CompanyCustomer, CompanyCustomerViewModel, CompanyCustomerManagerSkin, CompanyCustomerManagerWindowController> {
@Setter @Setter
private CompanyService companyService; private CompanyService companyService;
@@ -46,18 +36,14 @@ public class CompanyCustomerManagerSkin
@Override @Override
public void initializeTable() { public void initializeTable() {
controller.idColumn.setCellValueFactory(param -> param.getValue().getId()); controller.idColumn.setCellValueFactory(param -> param.getValue().getId());
controller.companyColumn.setCellValueFactory(param -> Bindings.createStringBinding(() -> { controller.companyColumn.setCellValueFactory(param -> param.getValue().getCompany());
Company company = param.getValue().getCompany().get(); controller.companyColumn.setCellFactory(param-> new CompanyTableCell<>(getCompanyService()));
if (company != null && !Hibernate.isInitialized(company)) {
company = companyService.findById(company.getId());
}
return company == null ? "-" : company.getName();
}, param.getValue().getCompany()));
controller.developDateColumn.setCellValueFactory(param -> param.getValue().getDevelopDate()); controller.developDateColumn.setCellValueFactory(param -> param.getValue().getDevelopDate());
controller.pathColumn.setCellValueFactory(param -> param.getValue().getPath()); controller.pathColumn.setCellValueFactory(param -> param.getValue().getPath());
controller.createdColumn.setCellValueFactory(param -> param.getValue().getCreated().map(MyDateTimeUtils::format)); controller.createdColumn
.setCellValueFactory(param -> param.getValue().getCreated().map(MyDateTimeUtils::format));
Platform.runLater(() -> { Platform.runLater(() -> {
getTableView().getSortOrder().add(controller.idColumn); getTableView().getSortOrder().add(controller.idColumn);
}); });

View File

@@ -1,25 +1,10 @@
package com.ecep.contract.manager.ds.customer.controller; package com.ecep.contract.manager.ds.customer.controller;
import com.ecep.contract.manager.ds.company.model.Company; import java.io.File;
import com.ecep.contract.manager.ds.company.service.CompanyService; import java.time.LocalDate;
import com.ecep.contract.manager.ds.customer.model.CompanyCustomer; import java.util.concurrent.CompletableFuture;
import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService; import java.util.concurrent.atomic.AtomicBoolean;
import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel;
import com.ecep.contract.manager.ui.AbstManagerWindowController;
import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.ViewModelService;
import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.control.*;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
@@ -29,10 +14,31 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.File; import com.ecep.contract.manager.ds.company.model.Company;
import java.time.LocalDate; import com.ecep.contract.manager.ds.company.service.CompanyService;
import java.util.concurrent.CompletableFuture; import com.ecep.contract.manager.ds.customer.model.CompanyCustomer;
import java.util.concurrent.atomic.AtomicBoolean; import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService;
import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel;
import com.ecep.contract.manager.ui.AbstManagerWindowController;
import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TableColumn;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
@Lazy @Lazy
@Scope("prototype") @Scope("prototype")
@@ -43,7 +49,7 @@ public class CompanyCustomerManagerWindowController
// columns // columns
public TableColumn<CompanyCustomerViewModel, Number> idColumn; public TableColumn<CompanyCustomerViewModel, Number> idColumn;
public TableColumn<CompanyCustomerViewModel, String> companyColumn; public TableColumn<CompanyCustomerViewModel, Company> companyColumn;
public TableColumn<CompanyCustomerViewModel, String> catalogColumn; public TableColumn<CompanyCustomerViewModel, String> catalogColumn;
public TableColumn<CompanyCustomerViewModel, LocalDate> developDateColumn; public TableColumn<CompanyCustomerViewModel, LocalDate> developDateColumn;
public TableColumn<CompanyCustomerViewModel, String> pathColumn; public TableColumn<CompanyCustomerViewModel, String> pathColumn;
@@ -72,7 +78,6 @@ public class CompanyCustomerManagerWindowController
return skin; return skin;
} }
/** /**
* 对所有客户的文件进行重置 * 对所有客户的文件进行重置
* <p> * <p>
@@ -108,7 +113,6 @@ public class CompanyCustomerManagerWindowController
dialog.initOwner(table.getScene().getWindow()); dialog.initOwner(table.getScene().getWindow());
dialog.show(); dialog.show();
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
Pageable pageRequest = PageRequest.ofSize(50); Pageable pageRequest = PageRequest.ofSize(50);
while (!canceled.get()) { while (!canceled.get()) {
@@ -166,5 +170,4 @@ public class CompanyCustomerManagerWindowController
UITools.showTaskDialogAndWait("导出Excel", tasker, null); UITools.showTaskDialogAndWait("导出Excel", tasker, null);
} }
} }

View File

@@ -11,8 +11,8 @@ import com.ecep.contract.manager.ds.customer.model.CompanyCustomer;
import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService; import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService;
import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel; import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel;
import com.ecep.contract.manager.ds.other.EntityStringConverter; import com.ecep.contract.manager.ds.other.EntityStringConverter;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.beans.binding.Bindings; import javafx.beans.binding.Bindings;

View File

@@ -1,6 +1,5 @@
package com.ecep.contract.manager.ds.customer.controller; package com.ecep.contract.manager.ds.customer.controller;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.ds.company.service.CompanyContactService; import com.ecep.contract.manager.ds.company.service.CompanyContactService;
import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.company.service.CompanyService;
import com.ecep.contract.manager.ds.customer.model.CompanyCustomer; import com.ecep.contract.manager.ds.customer.model.CompanyCustomer;
@@ -9,6 +8,8 @@ import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel;
import com.ecep.contract.manager.ui.AbstEntityController; import com.ecep.contract.manager.ui.AbstEntityController;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.ViewModelService; import com.ecep.contract.manager.ui.ViewModelService;
import com.ecep.contract.manager.util.DesktopUtils;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
@@ -115,7 +116,7 @@ public class CompanyCustomerWindowController extends AbstEntityController<Compan
setStatus("目录错误,不存在"); setStatus("目录错误,不存在");
return; return;
} }
Desktop.showInExplorer(file); DesktopUtils.showInExplorer(file);
} }

View File

@@ -9,7 +9,7 @@ import com.ecep.contract.manager.ds.customer.vo.CustomerEntityViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter; import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ds.other.EntityStringConverter; import com.ecep.contract.manager.ds.other.EntityStringConverter;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.scene.control.MenuItem; import javafx.scene.control.MenuItem;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;

View File

@@ -1,6 +1,5 @@
package com.ecep.contract.manager.ds.customer.controller; package com.ecep.contract.manager.ds.customer.controller;
import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.company.CompanyFileUtils; import com.ecep.contract.manager.ds.company.CompanyFileUtils;
import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.Company;
@@ -13,9 +12,10 @@ import com.ecep.contract.manager.ds.customer.service.CompanyCustomerFileService;
import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService; import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService;
import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerFileViewModel; import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerFileViewModel;
import com.ecep.contract.manager.ds.other.model.BaseEnumEntity; import com.ecep.contract.manager.ds.other.model.BaseEnumEntity;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.Message; import com.ecep.contract.manager.ui.Message;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.MyDateTimeUtils;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
@@ -160,7 +160,7 @@ public class CustomerTabSkinFile
setStatus("文件不存在 " + file.getName()); setStatus("文件不存在 " + file.getName());
return; return;
} }
Desktop.showInExplorer(file); DesktopUtils.showInExplorer(file);
} }
private void moveFileToCustomer(List<File> files) { private void moveFileToCustomer(List<File> files) {

View File

@@ -5,7 +5,8 @@ import com.ecep.contract.manager.ds.customer.model.CompanyCustomer;
import com.ecep.contract.manager.ds.customer.model.CustomerCatalog; import com.ecep.contract.manager.ds.customer.model.CustomerCatalog;
import com.ecep.contract.manager.ds.customer.vo.CustomerEntityViewModel; import com.ecep.contract.manager.ds.customer.vo.CustomerEntityViewModel;
import com.ecep.contract.manager.ds.other.EntityStringConverter; import com.ecep.contract.manager.ds.other.EntityStringConverter;
import com.ecep.contract.manager.ds.other.controller.employee.EmployeeTableCell; import com.ecep.contract.manager.ds.project.service.ProjectService;
import com.ecep.contract.manager.ui.table.cell.EmployeeTableCell;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ds.project.controller.satisfaction_survey.CustomerSatisfactionSurveyWindowController; import com.ecep.contract.manager.ds.project.controller.satisfaction_survey.CustomerSatisfactionSurveyWindowController;
import com.ecep.contract.manager.ds.project.model.CustomerSatisfactionSurvey; import com.ecep.contract.manager.ds.project.model.CustomerSatisfactionSurvey;
@@ -13,6 +14,7 @@ import com.ecep.contract.manager.ds.project.model.Project;
import com.ecep.contract.manager.ds.project.service.CustomerSatisfactionSurveyService; import com.ecep.contract.manager.ds.project.service.CustomerSatisfactionSurveyService;
import com.ecep.contract.manager.ds.project.vo.CustomerSatisfactionSurveyViewModel; import com.ecep.contract.manager.ds.project.vo.CustomerSatisfactionSurveyViewModel;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.table.cell.ProjectTableCell;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.scene.control.MenuItem; import javafx.scene.control.MenuItem;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
@@ -39,7 +41,8 @@ public class CustomerTabSkinSatisfactionSurvey
public MenuItem entityTable_menu_refresh; public MenuItem entityTable_menu_refresh;
public MenuItem entityTable_menu_del; public MenuItem entityTable_menu_del;
@Setter
private ProjectService projectService;
@Setter @Setter
private CustomerSatisfactionSurveyService satisfactionSurveyService; private CustomerSatisfactionSurveyService satisfactionSurveyService;
@@ -60,7 +63,7 @@ public class CustomerTabSkinSatisfactionSurvey
bindNumberColumn(idColumn, CustomerSatisfactionSurveyViewModel::getId); bindNumberColumn(idColumn, CustomerSatisfactionSurveyViewModel::getId);
bindColumn(codeColumn, CustomerSatisfactionSurveyViewModel::getCode); bindColumn(codeColumn, CustomerSatisfactionSurveyViewModel::getCode);
projectColumn.setCellValueFactory(param -> param.getValue().getProject()); projectColumn.setCellValueFactory(param -> param.getValue().getProject());
projectColumn.setCellFactory(cell -> new ProjectTableCell<>()); projectColumn.setCellFactory(cell -> new ProjectTableCell<>(getProjectService()));
bindLocalDateColumn(dateColumn, CustomerSatisfactionSurveyViewModel::getDate); bindLocalDateColumn(dateColumn, CustomerSatisfactionSurveyViewModel::getDate);
bindNumberColumn(totalScoreColumn, CustomerSatisfactionSurveyViewModel::getTotalScore); bindNumberColumn(totalScoreColumn, CustomerSatisfactionSurveyViewModel::getTotalScore);
applicantColumn.setCellValueFactory(param -> param.getValue().getApplicant()); applicantColumn.setCellValueFactory(param -> param.getValue().getApplicant());
@@ -86,6 +89,12 @@ public class CustomerTabSkinSatisfactionSurvey
return satisfactionSurveyService; return satisfactionSurveyService;
} }
ProjectService getProjectService() {
if (projectService == null) {
projectService = getBean(ProjectService.class);
}
return projectService;
}
@Override @Override
protected CustomerSatisfactionSurveyService getViewModelService() { protected CustomerSatisfactionSurveyService getViewModelService() {

View File

@@ -1,39 +0,0 @@
package com.ecep.contract.manager.ds.customer.controller;
import com.ecep.contract.manager.ds.project.model.Project;
import com.ecep.contract.manager.ds.project.service.ProjectService;
import org.hibernate.Hibernate;
import static com.ecep.contract.manager.SpringApp.getBean;
public class ProjectTableCell<V> extends javafx.scene.control.TableCell<V, com.ecep.contract.manager.ds.project.model.Project> {
private ProjectService projectService;
public ProjectTableCell() {
}
public ProjectTableCell(ProjectService projectService) {
this.projectService = projectService;
}
ProjectService getProjectService() {
if (projectService == null) {
projectService = getBean(ProjectService.class);
}
return projectService;
}
@Override
protected void updateItem(Project item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
return;
}
if (!Hibernate.isInitialized(item)) {
item = getProjectService().findById(item.getId());
}
setText(item.toPrettyString());
}
}

View File

@@ -1,5 +1,6 @@
package com.ecep.contract.manager.ds.customer.model; package com.ecep.contract.manager.ds.customer.model;
import com.ecep.contract.manager.ds.other.model.IdentityEntity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@@ -17,7 +18,7 @@ import lombok.ToString;
@Setter @Setter
@ToString @ToString
@Table(name = "COMPANY_CUSTOMER_EVALUATION_FORM_FILE") @Table(name = "COMPANY_CUSTOMER_EVALUATION_FORM_FILE")
public class CompanyCustomerEvaluationFormFile implements com.ecep.contract.manager.ds.other.model.Entity { public class CompanyCustomerEvaluationFormFile implements IdentityEntity, com.ecep.contract.manager.ds.other.model.Entity {
@Id @Id
@Column(name = "ID", nullable = false) @Column(name = "ID", nullable = false)
private Integer id; private Integer id;

View File

@@ -1,5 +1,21 @@
package com.ecep.contract.manager.ds.other.controller; package com.ecep.contract.manager.ds.other.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import org.controlsfx.control.TaskProgressView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import com.ecep.contract.manager.CurrentEmployee;
import com.ecep.contract.manager.CurrentEmployeeInitialedEvent;
import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.Desktop;
import com.ecep.contract.manager.cloud.old.OldVersionService; import com.ecep.contract.manager.cloud.old.OldVersionService;
import com.ecep.contract.manager.cloud.rk.CloudRkManagerWindowController; import com.ecep.contract.manager.cloud.rk.CloudRkManagerWindowController;
@@ -16,14 +32,15 @@ import com.ecep.contract.manager.ds.other.controller.department.DepartmentManage
import com.ecep.contract.manager.ds.other.controller.employee.EmployeeManagerWindowController; import com.ecep.contract.manager.ds.other.controller.employee.EmployeeManagerWindowController;
import com.ecep.contract.manager.ds.other.controller.inventory.InventoryManagerWindowController; import com.ecep.contract.manager.ds.other.controller.inventory.InventoryManagerWindowController;
import com.ecep.contract.manager.ds.other.controller.permission.EmployeeFunctionsManagerWindowController; import com.ecep.contract.manager.ds.other.controller.permission.EmployeeFunctionsManagerWindowController;
import com.ecep.contract.manager.ds.other.controller.permission.EmployeeRolesManagerWindowController; import com.ecep.contract.manager.ds.other.controller.permission.EmployeeRoleManagerWindowController;
import com.ecep.contract.manager.ds.project.controller.ProjectManagerWindowController; import com.ecep.contract.manager.ds.project.controller.ProjectManagerWindowController;
import com.ecep.contract.manager.ds.vendor.controller.CompanyVendorManagerWindowController; import com.ecep.contract.manager.ds.vendor.controller.CompanyVendorManagerWindowController;
import com.ecep.contract.manager.ui.BaseController; import com.ecep.contract.manager.ui.BaseController;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.task.TaskMonitorViewController; import com.ecep.contract.manager.ui.task.TaskMonitorViewController;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.FxmlUtils; import com.ecep.contract.manager.util.FxmlUtils;
import javafx.application.Platform;
import javafx.concurrent.Task; import javafx.concurrent.Task;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.Node; import javafx.scene.Node;
@@ -36,18 +53,6 @@ import javafx.scene.layout.VBox;
import javafx.stage.Modality; import javafx.stage.Modality;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.WindowEvent; import javafx.stage.WindowEvent;
import org.controlsfx.control.TaskProgressView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@Lazy @Lazy
@Scope("prototype") @Scope("prototype")
@@ -69,6 +74,7 @@ public class HomeWindowController extends BaseController {
public Button openVendorManagerWindow; public Button openVendorManagerWindow;
public Button openCustomManagerWindow; public Button openCustomManagerWindow;
public TaskProgressView<Task<?>> taskProgressView; public TaskProgressView<Task<?>> taskProgressView;
public Label taskMonitorLabel;
public Label employeeStatusLabel; public Label employeeStatusLabel;
public void initialize() { public void initialize() {
@@ -94,9 +100,14 @@ public class HomeWindowController extends BaseController {
((Label) placeholder).setText("没有运行的任务"); ((Label) placeholder).setText("没有运行的任务");
employeeStatusLabel.textProperty().bind(Desktop.instance.getActiveEmployee().getName()); employeeStatusLabel.textProperty().bind(Desktop.instance.getActiveEmployee().getName());
Desktop.instance.getTaskMonitorCenter().bindStatusLabel(taskMonitorLabel);
Desktop.instance.getActiveEmployee().initialize();
}
Desktop.instance.getActiveEmployee().initialize().thenRun(() -> { @EventListener
if (Desktop.instance.getActiveEmployee().isSystemAdministrator()) { public void onCurrentEmployeeInitialed(CurrentEmployeeInitialedEvent event) {
CurrentEmployee currentEmployee = event.getEmployee();
if (currentEmployee.isSystemAdministrator()) {
if (logger.isInfoEnabled()) { if (logger.isInfoEnabled()) {
logger.info("You are administrator, try schedule sync tasks."); logger.info("You are administrator, try schedule sync tasks.");
} }
@@ -115,7 +126,6 @@ public class HomeWindowController extends BaseController {
} }
}, 15, TimeUnit.SECONDS); }, 15, TimeUnit.SECONDS);
} }
});
} }
@Override @Override
@@ -165,7 +175,7 @@ public class HomeWindowController extends BaseController {
public void openInBrowse(ActionEvent event) { public void openInBrowse(ActionEvent event) {
MenuItem source = (MenuItem) event.getSource(); MenuItem source = (MenuItem) event.getSource();
String url = (String) source.getUserData(); String url = (String) source.getUserData();
Desktop.showInBrowse(url); DesktopUtils.showInBrowse(url);
} }
public void openGroupRKResourceWindow(ActionEvent event) { public void openGroupRKResourceWindow(ActionEvent event) {
@@ -189,7 +199,7 @@ public class HomeWindowController extends BaseController {
} }
public void onShowRolesManagerWindowAction(ActionEvent event) { public void onShowRolesManagerWindowAction(ActionEvent event) {
showInOwner(EmployeeRolesManagerWindowController.class); showInOwner(EmployeeRoleManagerWindowController.class);
} }
public void onShowFunctionManagerWindowAction(ActionEvent event) { public void onShowFunctionManagerWindowAction(ActionEvent event) {

View File

@@ -1,47 +0,0 @@
package com.ecep.contract.manager.ds.other.controller;
import com.ecep.contract.manager.SpringApp;
import com.ecep.contract.manager.ds.contract.vo.PurchaseOrderItemViewModel;
import com.ecep.contract.manager.ds.other.model.Inventory;
import com.ecep.contract.manager.ds.other.model.InventoryCatalog;
import com.ecep.contract.manager.ds.other.service.InventoryCatalogService;
import com.ecep.contract.manager.ds.other.service.InventoryService;
import javafx.scene.control.TableCell;
import org.hibernate.Hibernate;
public class InventoryTableCell<V> extends TableCell<V, Inventory> {
private InventoryService inventoryService;
private InventoryCatalogService inventoryCatalogService;
InventoryService getInventoryService() {
if (inventoryService == null) {
inventoryService = SpringApp.getBean(InventoryService.class);
}
return inventoryService;
}
InventoryCatalogService getInventoryCatalogService() {
if (inventoryCatalogService == null) {
inventoryCatalogService = SpringApp.getBean(InventoryCatalogService.class);
}
return inventoryCatalogService;
}
@Override
protected void updateItem(Inventory item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText("");
return;
}
if (!Hibernate.isInitialized(item)) {
item = getInventoryService().findById(item.getId());
}
InventoryCatalog catalog = item.getCatalog();
if (catalog != null && !Hibernate.isInitialized(catalog)) {
catalog = getInventoryCatalogService().findById(catalog.getId());
item.setCatalog(catalog);
}
setText((catalog != null ? (catalog.getName() + " ") : "") + item.toPrettyString());
}
}

View File

@@ -3,7 +3,7 @@ package com.ecep.contract.manager.ds.other.controller.bank;
import com.ecep.contract.manager.ds.other.model.Bank; import com.ecep.contract.manager.ds.other.model.Bank;
import com.ecep.contract.manager.ds.other.vo.BankViewModel; import com.ecep.contract.manager.ds.other.vo.BankViewModel;
import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.AbstEntityManagerSkin;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.ui.ManagerSkin;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
import javafx.scene.control.cell.TextFieldTableCell; import javafx.scene.control.cell.TextFieldTableCell;

View File

@@ -5,7 +5,7 @@ import com.ecep.contract.manager.ds.other.model.Department;
import com.ecep.contract.manager.ds.other.model.Employee; import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ds.other.vo.DepartmentViewModel; import com.ecep.contract.manager.ds.other.vo.DepartmentViewModel;
import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.AbstEntityManagerSkin;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.ui.ManagerSkin;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;

View File

@@ -5,8 +5,8 @@ import com.ecep.contract.manager.ds.other.service.EmployeeRoleService;
import com.ecep.contract.manager.ds.other.service.EmployeeService; import com.ecep.contract.manager.ds.other.service.EmployeeService;
import com.ecep.contract.manager.ds.other.service.PermissionService; import com.ecep.contract.manager.ds.other.service.PermissionService;
import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel; import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel;
import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; import com.ecep.contract.manager.ui.tab.AbstEntityBasedTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import lombok.Setter; import lombok.Setter;
public abstract class AbstEmployeeBasedTabSkin public abstract class AbstEmployeeBasedTabSkin

View File

@@ -6,8 +6,8 @@ import com.ecep.contract.manager.ds.other.service.EmployeeService;
import com.ecep.contract.manager.ds.other.vo.EmployeeBasedViewModel; import com.ecep.contract.manager.ds.other.vo.EmployeeBasedViewModel;
import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel; import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel;
import com.ecep.contract.manager.ds.other.vo.IdentityViewModel; import com.ecep.contract.manager.ds.other.vo.IdentityViewModel;
import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;

View File

@@ -7,10 +7,10 @@ import com.ecep.contract.manager.ds.other.service.DepartmentService;
import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel; import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel;
import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.AbstEntityManagerSkin;
import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.ui.ManagerSkin;
import com.ecep.contract.manager.ui.table.cell.DepartmentTableCell;
import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.scene.control.cell.CheckBoxTableCell; import javafx.scene.control.cell.CheckBoxTableCell;
import javafx.scene.control.cell.ComboBoxTableCell;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
public class EmployeeManagerSkin public class EmployeeManagerSkin
@@ -20,6 +20,15 @@ public class EmployeeManagerSkin
super(controller); super(controller);
} }
DepartmentService departmentService;
DepartmentService getDepartmentService() {
if (departmentService == null) {
departmentService = getBean(DepartmentService.class);
}
return departmentService;
}
@Override @Override
public Specification<Employee> getSpecification() { public Specification<Employee> getSpecification() {
Specification<Employee> spec = super.getSpecification(); Specification<Employee> spec = super.getSpecification();
@@ -33,12 +42,6 @@ public class EmployeeManagerSkin
@Override @Override
public void initializeTable() { public void initializeTable() {
EntityStringConverter<Department> departmentStringConverter = new EntityStringConverter<>();
DepartmentService departmentService = getBean(DepartmentService.class);
departmentStringConverter.setInitialized(department -> {
return departmentService.findById(department.getId());
});
controller.idColumn.setCellValueFactory(param -> param.getValue().getId()); controller.idColumn.setCellValueFactory(param -> param.getValue().getId());
controller.nameColumn.setCellValueFactory(param -> param.getValue().getName()); controller.nameColumn.setCellValueFactory(param -> param.getValue().getName());
controller.aliasColumn.setCellValueFactory(param -> param.getValue().getAlias()); controller.aliasColumn.setCellValueFactory(param -> param.getValue().getAlias());
@@ -46,7 +49,7 @@ public class EmployeeManagerSkin
controller.accountColumn.setCellValueFactory(param -> param.getValue().getAccount()); controller.accountColumn.setCellValueFactory(param -> param.getValue().getAccount());
controller.departmentColumn.setCellValueFactory(param -> param.getValue().getDepartment()); controller.departmentColumn.setCellValueFactory(param -> param.getValue().getDepartment());
controller.departmentColumn.setCellFactory(ComboBoxTableCell.forTableColumn(departmentStringConverter)); controller.departmentColumn.setCellFactory(param -> new DepartmentTableCell<>(getDepartmentService()));
controller.emailColumn.setCellValueFactory(param -> param.getValue().getEmail()); controller.emailColumn.setCellValueFactory(param -> param.getValue().getEmail());

View File

@@ -11,6 +11,7 @@ import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.concurrent.Task; import javafx.concurrent.Task;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox; import javafx.scene.control.CheckBox;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
import javafx.stage.Stage; import javafx.stage.Stage;
@@ -27,17 +28,29 @@ import java.time.LocalDate;
public class EmployeeManagerWindowController public class EmployeeManagerWindowController
extends AbstManagerWindowController<Employee, EmployeeViewModel, EmployeeManagerSkin> { extends AbstManagerWindowController<Employee, EmployeeViewModel, EmployeeManagerSkin> {
@FXML
public TableColumn<EmployeeViewModel, Number> idColumn; public TableColumn<EmployeeViewModel, Number> idColumn;
@FXML
public TableColumn<EmployeeViewModel, String> accountColumn; public TableColumn<EmployeeViewModel, String> accountColumn;
@FXML
public TableColumn<EmployeeViewModel, Department> departmentColumn; public TableColumn<EmployeeViewModel, Department> departmentColumn;
@FXML
public TableColumn<EmployeeViewModel, String> nameColumn; public TableColumn<EmployeeViewModel, String> nameColumn;
@FXML
public TableColumn<EmployeeViewModel, String> aliasColumn; public TableColumn<EmployeeViewModel, String> aliasColumn;
@FXML
public TableColumn<EmployeeViewModel, String> codeColumn; public TableColumn<EmployeeViewModel, String> codeColumn;
@FXML
public TableColumn<EmployeeViewModel, String> emailColumn; public TableColumn<EmployeeViewModel, String> emailColumn;
@FXML
public TableColumn<EmployeeViewModel, LocalDate> createdColumn; public TableColumn<EmployeeViewModel, LocalDate> createdColumn;
@FXML
public TableColumn<EmployeeViewModel, LocalDate> entryDateColumn; public TableColumn<EmployeeViewModel, LocalDate> entryDateColumn;
@FXML
public TableColumn<EmployeeViewModel, LocalDate> leaveDateColumn; public TableColumn<EmployeeViewModel, LocalDate> leaveDateColumn;
@FXML
public TableColumn<EmployeeViewModel, Boolean> activeColumn; public TableColumn<EmployeeViewModel, Boolean> activeColumn;
@FXML
public CheckBox activeCheckBox; public CheckBox activeCheckBox;
@Override @Override

View File

@@ -4,8 +4,8 @@ import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ds.other.model.EmployeeAuthBind; import com.ecep.contract.manager.ds.other.model.EmployeeAuthBind;
import com.ecep.contract.manager.ds.other.service.EmployeeAuthBindService; import com.ecep.contract.manager.ds.other.service.EmployeeAuthBindService;
import com.ecep.contract.manager.ds.other.vo.EmployeeAuthBindViewModel; import com.ecep.contract.manager.ds.other.vo.EmployeeAuthBindViewModel;
import com.ecep.contract.manager.ui.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.table.cell.EmployeeTableCell;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.scene.control.ContextMenu; import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem; import javafx.scene.control.MenuItem;
@@ -19,8 +19,7 @@ import java.util.List;
@FxmlPath("/ui/employee/employee-auth-bind.fxml") @FxmlPath("/ui/employee/employee-auth-bind.fxml")
public class EmployeeTabSkinAuthBind public class EmployeeTabSkinAuthBind
extends AbstEmployeeTableTabSkin<EmployeeAuthBind, EmployeeAuthBindViewModel> extends AbstEmployeeTableTabSkin<EmployeeAuthBind, EmployeeAuthBindViewModel> {
implements EditableEntityTableTabSkin<EmployeeAuthBind, EmployeeAuthBindViewModel> {
public TableColumn<EmployeeAuthBindViewModel, Number> idColumn; public TableColumn<EmployeeAuthBindViewModel, Number> idColumn;
public TableColumn<EmployeeAuthBindViewModel, String> ipColumn; public TableColumn<EmployeeAuthBindViewModel, String> ipColumn;
public TableColumn<EmployeeAuthBindViewModel, String> macColumn; public TableColumn<EmployeeAuthBindViewModel, String> macColumn;

View File

@@ -3,7 +3,7 @@ package com.ecep.contract.manager.ds.other.controller.employee;
import com.ecep.contract.manager.ds.other.EntityStringConverter; import com.ecep.contract.manager.ds.other.EntityStringConverter;
import com.ecep.contract.manager.ds.other.model.Department; import com.ecep.contract.manager.ds.other.model.Department;
import com.ecep.contract.manager.ds.other.service.DepartmentService; import com.ecep.contract.manager.ds.other.service.DepartmentService;
import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.util.UITools; import com.ecep.contract.manager.util.UITools;
import javafx.scene.control.Tab; import javafx.scene.control.Tab;
import javafx.util.converter.LocalDateStringConverter; import javafx.util.converter.LocalDateStringConverter;

Some files were not shown because too many files have changed in this diff Show More