refactor: 重构WebSocket服务及相关实体类

重构WebSocket服务名称从WebSocketService改为WebSocketClientService,并实现Serializable接口
添加WebSocket常量定义和消息处理实现
优化实体类equals和hashCode方法
修复控制器路径和日志配置
添加查询服务和任务接口方法
This commit is contained in:
2025-09-17 11:45:50 +08:00
parent 30deb0a280
commit c42ff7501d
152 changed files with 1933 additions and 999 deletions

View File

@@ -1,20 +1,21 @@
package com.ecep.contract.service;
import com.ecep.contract.CompanyCustomerFileType;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.SpringApp;
import com.ecep.contract.model.*;
import com.ecep.contract.util.ParamUtils;
import com.ecep.contract.vm.CompanyCustomerFileViewModel;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.io.File;
import java.time.LocalDate;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.springframework.stereotype.Service;
import com.ecep.contract.CompanyCustomerFileType;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.model.CompanyCustomer;
import com.ecep.contract.model.CompanyCustomerEvaluationFormFile;
import com.ecep.contract.model.CompanyCustomerFile;
import com.ecep.contract.model.CompanyCustomerFileTypeLocal;
import com.ecep.contract.vm.CompanyCustomerFileViewModel;
@Service
public class CompanyCustomerFileService extends QueryService<CompanyCustomerFile, CompanyCustomerFileViewModel> {
@@ -23,20 +24,69 @@ public class CompanyCustomerFileService extends QueryService<CompanyCustomerFile
}
public LocalDate getNextSignDate(CompanyCustomer companyCustomer, MessageHolder holder) {
throw new UnsupportedOperationException();
LocalDate miniContractDate = LocalDate.of(2022, 1, 1);
Company company = companyCustomer.getCompany();
ContractService contractService = SpringApp.getBean(ContractService.class);
Map<String, Object> params = ParamUtils.builder().equals("company", company.getId()).build();
long count = contractService.count(params);
if (count == 0) {
holder.info("未发现已登记的合同");
return null;
}
// 检索评估表
List<CompanyCustomerFile> files = findAllByCustomerAndType(companyCustomer, CompanyCustomerFileType.EvaluationForm);
CompanyCustomerFile latestFile = files.stream()
.filter(v -> v.getSignDate() != null && v.isValid())
.max(Comparator.comparing(CompanyCustomerFile::getSignDate))
.orElse(null);
if (latestFile == null) {
// 没有有效的评估表的评价日期
holder.warn("未发现有效的评估表");
// 返回最早的合同日期
Contract firstContract = contractService.findAll(params, Pageable.unpaged()).stream()
.filter(v -> v.getSetupDate() != null && !v.getSetupDate().isBefore(miniContractDate))
.min(Comparator.comparing(Contract::getSetupDate))
.orElse(null);
if (firstContract == null) {
holder.warn("最早的合同不存在?");
return null;
}
LocalDate setupDate = firstContract.getSetupDate();
holder.info("依据合同 " + firstContract.getCode() + " 的日期 " + setupDate + " 推算");
return SpringApp.getBean(HolidayService.class).adjustToWorkDay(setupDate.plusDays(-7));
}
// 检查失效日期起的第一个合同
LocalDate nextInValidDate = latestFile.getSignDate().plusYears(1);
File file = new File(latestFile.getFilePath());
holder.info("依据 " + file.getName() + " 的失效期 " + nextInValidDate + " 检索合同");
List<Contract> matchedContracts = contractService.findAll(params, Pageable.unpaged()).stream()
.filter(v -> v.getSetupDate().isAfter(nextInValidDate)).toList();
// 没有在失效日期后的合同时,使用失效日期
if (matchedContracts.isEmpty()) {
holder.info("未发现失效期 " + nextInValidDate + " 后的合同");
return null;
}
holder.info("发现匹配合同 " + matchedContracts.size() + "");
// 按时间取最早一个
Contract firstContract = matchedContracts.stream()
.min(Comparator.comparing(Contract::getSetupDate))
.orElse(null);
LocalDate setupDate = firstContract.getSetupDate();
holder.info("匹配失效期 " + nextInValidDate + " 后的第一个合同 " + firstContract.getCode() + ", 依据合同 " + firstContract.getCode() + " 的日期 " + setupDate + " 推算");
return SpringApp.getBean(HolidayService.class).adjustToWorkDay(setupDate.plusDays(-7));
}
public File getEvaluationFormTemplate() {
throw new UnsupportedOperationException();
}
public void saveAll(List<CompanyCustomerFile> companyCustomerFiles) {
throw new UnsupportedOperationException();
}
public List<CompanyCustomerFile> findAllByCustomer(CompanyCustomer companyCustomer) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'findAllByCustomer'");
return findAll(ParamUtils.builder().equals("customer", companyCustomer).build(), Pageable.unpaged()).getContent();
}
public CompanyCustomerEvaluationFormFile findCustomerEvaluationFormFileByCustomerFile(
@@ -60,10 +110,8 @@ public class CompanyCustomerFileService extends QueryService<CompanyCustomerFile
throw new UnsupportedOperationException("Unimplemented method 'getFileTypeLocalMap'");
}
public List<CompanyCustomerFile> findAllByCustomerAndType(CompanyCustomer customer,
CompanyCustomerFileType evaluationform) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'findAllByCustomerAndType'");
public List<CompanyCustomerFile> findAllByCustomerAndType(CompanyCustomer customer, CompanyCustomerFileType type) {
return findAll(ParamUtils.builder().equals("customer", customer.getId()).equals("type", type.name()).build(), Pageable.unpaged()).getContent();
}
public List<CompanyCustomerEvaluationFormFile> searchEvaluationFile(CompanyCustomer customer, String searchText) {