refactor(controller): 移除冗余的service注入,使用BeanContext统一管理
feat(sales-order): 补充SalesOrderVo缺失字段并完善相关功能 feat(sales-order): 添加客户、税率等字段到销售订单界面 refactor(tab-skin): 重构TabSkin基类,统一bean获取方式 fix(fxml): 修正controller包路径和字段绑定 feat(repository): 添加findAllByOrder方法优化查询
This commit is contained in:
@@ -160,9 +160,7 @@ public class SalesBillVoucherCtx extends AbstractYongYouU8Ctx {
|
||||
public void syncBySalesOrder(SalesOrder order, MessageHolder holder) {
|
||||
var voucherService = getSalesBillVoucherService();
|
||||
var voucherItemService = getSalesBillVoucherItemService();
|
||||
List<SalesBillVoucher> vouchers = voucherService.findAll((root, q, cb) -> {
|
||||
return cb.equal(root.get("order"), order);
|
||||
}, Sort.unsorted());
|
||||
List<SalesBillVoucher> vouchers = voucherService.findAllByOrder(order);
|
||||
holder.debug("查找到 " + vouchers.size() + " 条专用发票记录在数据库中");
|
||||
Map<Integer, SalesBillVoucher> voucherMap = vouchers.stream()
|
||||
.collect(Collectors.toMap(SalesBillVoucher::getRefId, item -> item));
|
||||
|
||||
@@ -11,11 +11,16 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.ecep.contract.ds.company.model.Company;
|
||||
import com.ecep.contract.ds.company.service.CompanyService;
|
||||
import com.ecep.contract.ds.contract.service.ContractItemService;
|
||||
import com.ecep.contract.ds.contract.service.ContractService;
|
||||
import com.ecep.contract.vo.ContractVo;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.ecep.contract.MessageHolder;
|
||||
import com.ecep.contract.constant.CloudServiceConstant;
|
||||
@@ -24,6 +29,8 @@ import com.ecep.contract.ds.contract.service.SalesOrderItemService;
|
||||
import com.ecep.contract.ds.contract.model.Contract;
|
||||
import com.ecep.contract.ds.customer.model.SalesOrder;
|
||||
import com.ecep.contract.ds.customer.model.SalesOrderItem;
|
||||
import com.ecep.contract.ds.customer.service.CompanyCustomerEntityService;
|
||||
import com.ecep.contract.ds.customer.service.CustomerService;
|
||||
import com.ecep.contract.util.NumberUtils;
|
||||
|
||||
import lombok.Setter;
|
||||
@@ -42,6 +49,69 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
||||
return saleOrdersService;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新客户信息
|
||||
*
|
||||
* @param getter 获取当前客户的函数
|
||||
* @param setter 设置客户的函数
|
||||
* @param code 客户代码
|
||||
* @param name 客户名称
|
||||
* @param holder 消息持有者
|
||||
* @param fieldName 字段名称
|
||||
* @return 是否发生了修改
|
||||
*/
|
||||
private boolean updateCustomer(Supplier<Company> getter,
|
||||
java.util.function.Consumer<Company> setter,
|
||||
String code,
|
||||
String name,
|
||||
MessageHolder holder,
|
||||
String fieldName) {
|
||||
|
||||
Company current = getter.get();
|
||||
CompanyService companyService = getBean(CompanyService.class);
|
||||
if (StringUtils.hasText(code)) {
|
||||
var customerEntity = getCachedBean(CompanyCustomerEntityService.class).findByCustomerCode(code);
|
||||
if (customerEntity == null) {
|
||||
holder.warn("未找到客户:" + name + " (代码: " + code + ")");
|
||||
} else {
|
||||
var customer = getCachedBean(CustomerService.class).findById(customerEntity.getCustomerId());
|
||||
if (customer == null) {
|
||||
holder.warn("未找到客户:" + name + " (代码: " + code + ")");
|
||||
} else {
|
||||
var companyId = customer.getCompanyId();
|
||||
if (current == null) {
|
||||
var updated = companyService.getById(companyId);
|
||||
setter.accept(updated);
|
||||
holder.info(fieldName + " 更新为 " + updated.getName());
|
||||
return true;
|
||||
}
|
||||
if (!Objects.equals(current.getId(), companyId)) {
|
||||
var updated = companyService.getById(companyId);
|
||||
setter.accept(updated);
|
||||
holder.info(fieldName + " 更新为 " + updated.getName());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 尝试通过名称或简称查找公司
|
||||
Company updated = companyService.findAndRemoveDuplicateCompanyByNameOrAbbName(name, null);
|
||||
|
||||
if (updated == null) {
|
||||
holder.warn("未找到客户:" + name + " (代码: " + code + ")");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!Objects.equals(current, updated)) {
|
||||
setter.accept(updated);
|
||||
holder.info(fieldName + " 更新为 " + updated.getName());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
SalesOrderItemService getOrderItemService() {
|
||||
if (orderItemService == null) {
|
||||
orderItemService = getBean(SalesOrderItemService.class);
|
||||
@@ -49,22 +119,20 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
||||
return orderItemService;
|
||||
}
|
||||
|
||||
|
||||
public List<SalesOrder> syncByContract(ContractVo contract, MessageHolder holder) {
|
||||
SaleOrdersService saleOrdersService = getSaleOrdersService();
|
||||
SalesOrderItemService orderItemService = getOrderItemService();
|
||||
|
||||
List<SalesOrder> orders = saleOrdersService.findAllByContract(contract);
|
||||
holder.debug("查找到 " + orders.size() + " 条销售订单记录在数据库中");
|
||||
Map<String, SalesOrder> ordersMap = orders.stream().collect(Collectors.toMap(SalesOrder::getCode, item -> item));
|
||||
Map<String, SalesOrder> ordersMap = orders.stream()
|
||||
.collect(Collectors.toMap(SalesOrder::getCode, item -> item));
|
||||
// 按 order 分组
|
||||
Map<SalesOrder, Map<String, SalesOrderItem>> itemMap = orders.stream()
|
||||
.collect(
|
||||
Collectors.toMap(Function.identity(), order -> orderItemService.findAllBySaleOrder(order).stream().collect(
|
||||
Collectors.toMap(SalesOrderItem::getCode, item -> item)
|
||||
))
|
||||
);
|
||||
|
||||
Collectors.toMap(Function.identity(),
|
||||
order -> orderItemService.findAllBySaleOrder(order).stream().collect(
|
||||
Collectors.toMap(SalesOrderItem::getCode, item -> item))));
|
||||
|
||||
// 查询 U8 数据库
|
||||
List<Map<String, Object>> ds = repository.findAllSalesOrderItemByContractCode(contract.getCode());
|
||||
@@ -161,8 +229,23 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
||||
|
||||
private boolean applySalesOrderDetail(SalesOrder order, Map<String, Object> map, MessageHolder holder) {
|
||||
String code = (String) map.get("cSOCode");
|
||||
String employeeCode = (String) map.get("cPersonCode");
|
||||
|
||||
String cCloser = (String) map.get("cCloser");
|
||||
String customerCode = (String) map.get("cCusCode");
|
||||
String customerName = (String) map.get("cCusName");
|
||||
String customerAddress = (String) map.get("cCusOAddress");
|
||||
|
||||
String makerName = (String) map.get("cMaker");
|
||||
Timestamp makerDate = (Timestamp) map.get("dcreatesystime");
|
||||
String verifierName = (String) map.get("cVerifier");
|
||||
Timestamp verifierDate = (Timestamp) map.get("dverifysystime");
|
||||
String modifierName = (String) map.get("cmodifier");
|
||||
Timestamp modifierDate = (Timestamp) map.get("dmodifysystime");
|
||||
String closerName = (String) map.get("cCloser");
|
||||
Timestamp closerDate = (Timestamp) map.get("dclosesystime");
|
||||
|
||||
float taxRate = Optional.ofNullable(map.get("iTaxRate"))
|
||||
.map(obj -> obj instanceof Number ? ((Number) obj).floatValue() : null).orElse(0f);
|
||||
|
||||
String memo = (String) map.get("cMemo");
|
||||
|
||||
@@ -174,20 +257,48 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
||||
modified = true;
|
||||
}
|
||||
|
||||
if (updateEmployeeByCode(order::getEmployee, order::setEmployee, (String) map.get("cPersonCode"), holder, "业务员")) {
|
||||
if (updateEmployeeByCode(order::getEmployee, order::setEmployee, employeeCode, holder, "业务员")) {
|
||||
modified = true;
|
||||
}
|
||||
if (updateEmployeeByName(order::getMaker, order::setMaker, (String) map.get("cMaker"), holder, "制单人")) {
|
||||
if (updateEmployeeByName(order::getMaker, order::setMaker, makerName, holder, "制单人")) {
|
||||
modified = true;
|
||||
}
|
||||
if (updateEmployeeByName(order::getVerifier, order::setVerifier, (String) map.get("cVerifier"), holder, "审核人")) {
|
||||
if (updateEmployeeByName(order::getVerifier, order::setVerifier, verifierName, holder, "审核人")) {
|
||||
modified = true;
|
||||
}
|
||||
if (updateEmployeeByName(order::getModifier, order::setModifier, modifierName, holder, "修改人")) {
|
||||
modified = true;
|
||||
}
|
||||
if (updateEmployeeByName(order::getCloser, order::setCloser, closerName, holder, "关闭人")) {
|
||||
modified = true;
|
||||
}
|
||||
|
||||
if (updateLocalDate(order::getMakerDate, order::setMakerDate, (Timestamp) map.get("dcreatesystime"), holder, "制单日期")) {
|
||||
if (updateLocalDate(order::getMakerDate, order::setMakerDate, makerDate, holder, "制单日期")) {
|
||||
modified = true;
|
||||
}
|
||||
if (updateLocalDate(order::getVerifierDate, order::setVerifierDate, (Timestamp) map.get("dverifysystime"), holder, "审核日期")) {
|
||||
if (updateLocalDate(order::getVerifierDate, order::setVerifierDate, verifierDate, holder, "审核日期")) {
|
||||
modified = true;
|
||||
}
|
||||
if (updateLocalDate(order::getModifierDate, order::setModifierDate, modifierDate, holder, "修改日期")) {
|
||||
modified = true;
|
||||
}
|
||||
if (updateLocalDate(order::getCloserDate, order::setCloserDate, closerDate, holder, "关闭日期")) {
|
||||
modified = true;
|
||||
}
|
||||
|
||||
if (!NumberUtils.equals(order.getTaxRate(), taxRate)) {
|
||||
order.setTaxRate(taxRate);
|
||||
holder.info("税率修改为: " + taxRate);
|
||||
modified = true;
|
||||
}
|
||||
|
||||
if (updateCustomer(order::getCustomer, order::setCustomer, customerCode, customerName, holder, "客户")) {
|
||||
modified = true;
|
||||
}
|
||||
|
||||
if (!Objects.equals(order.getCustomerAddress(), customerAddress)) {
|
||||
order.setCustomerAddress(customerAddress);
|
||||
holder.info("客户地址修改为: " + customerAddress);
|
||||
modified = true;
|
||||
}
|
||||
|
||||
@@ -200,11 +311,11 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
||||
return modified;
|
||||
}
|
||||
|
||||
|
||||
private boolean applySaleOrderItemDetail(SalesOrderItem item, Map<String, Object> map, MessageHolder holder) {
|
||||
String code = String.valueOf(map.get("iSOsID"));
|
||||
String spec = (String) map.get("cInvName");
|
||||
String title = (String) map.get("cInvName");
|
||||
String contractItemRowId = (String) map.get("cContractRowGuid");
|
||||
double quantity = (double) map.get("iQuantity");
|
||||
double taxRate = (double) map.get("iTaxRate");
|
||||
double taxPrice = (double) map.get("iTaxUnitPrice");
|
||||
@@ -217,7 +328,6 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
||||
|
||||
holder.debug("条目:" + title + " x " + amount);
|
||||
|
||||
|
||||
if (!Objects.equals(item.getCode(), code)) {
|
||||
item.setCode(code);
|
||||
holder.info("代码修改为: " + code);
|
||||
@@ -255,6 +365,13 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
||||
modified = true;
|
||||
}
|
||||
|
||||
var contractItem = getCachedBean(ContractItemService.class).findByRowId(contractItemRowId);
|
||||
if (!Objects.equals(item.getContractItem(), contractItem)) {
|
||||
item.setContractItem(contractItem);
|
||||
holder.info("合同条目修改为: #" + contractItem.getId());
|
||||
modified = true;
|
||||
}
|
||||
|
||||
if (!Objects.equals(item.getDescription(), memo)) {
|
||||
item.setDescription(memo);
|
||||
modified = true;
|
||||
|
||||
Reference in New Issue
Block a user