Compare commits
2 Commits
5b3ab3ed00
...
d2e0dc4555
| Author | SHA1 | Date | |
|---|---|---|---|
| d2e0dc4555 | |||
| 1c1ff678a5 |
@@ -10,6 +10,7 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import com.ecep.contract.util.BeanContext;
|
import com.ecep.contract.util.BeanContext;
|
||||||
|
import com.ecep.contract.util.DefaultBeanContext;
|
||||||
import com.ecep.contract.util.FxmlPath;
|
import com.ecep.contract.util.FxmlPath;
|
||||||
import com.ecep.contract.util.FxmlUtils;
|
import com.ecep.contract.util.FxmlUtils;
|
||||||
import com.ecep.contract.vo.EmployeeVo;
|
import com.ecep.contract.vo.EmployeeVo;
|
||||||
@@ -51,7 +52,7 @@ public class BaseController implements BeanContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends BaseController> CompletableFuture<Void> show(Class<T> clz, Window owner,
|
public static <T extends BaseController> CompletableFuture<Void> show(Class<T> clz, Window owner,
|
||||||
Consumer<T> consumer) {
|
Consumer<T> consumer) {
|
||||||
String key = clz.getName();
|
String key = clz.getName();
|
||||||
if (toFront(key)) {
|
if (toFront(key)) {
|
||||||
return null;
|
return null;
|
||||||
@@ -188,20 +189,13 @@ public class BaseController implements BeanContext {
|
|||||||
public Label rightStatusLabel;
|
public Label rightStatusLabel;
|
||||||
private EmployeeVo currentUser;
|
private EmployeeVo currentUser;
|
||||||
|
|
||||||
private HashMap<Class<?>, Object> cachedBeans = new HashMap<>();
|
private BeanContext beanContext = new DefaultBeanContext();
|
||||||
|
|
||||||
public <T> T getBean(Class<T> requiredType) throws BeansException {
|
public <T> T getBean(Class<T> requiredType) throws BeansException {
|
||||||
return SpringApp.getBean(requiredType);
|
return beanContext.getBean(requiredType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public <T> T getCachedBean(Class<T> requiredType) throws BeansException {
|
public <T> T getCachedBean(Class<T> requiredType) throws BeansException {
|
||||||
Object object = cachedBeans.get(requiredType);
|
return beanContext.getCachedBean(requiredType);
|
||||||
if (object == null) {
|
|
||||||
object = getBean(requiredType);
|
|
||||||
cachedBeans.put(requiredType, object);
|
|
||||||
}
|
|
||||||
return (T) object;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public SysConfService getConfService() {
|
public SysConfService getConfService() {
|
||||||
|
|||||||
@@ -1,19 +1,17 @@
|
|||||||
package com.ecep.contract.controller.tab;
|
package com.ecep.contract.controller.contract;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import com.ecep.contract.ContractPayWay;
|
import com.ecep.contract.ContractPayWay;
|
||||||
|
import com.ecep.contract.controller.tab.TabSkin;
|
||||||
import com.ecep.contract.controller.table.cell.EmployeeTableCell;
|
import com.ecep.contract.controller.table.cell.EmployeeTableCell;
|
||||||
import com.ecep.contract.util.FxmlPath;
|
import com.ecep.contract.util.FxmlPath;
|
||||||
import com.ecep.contract.controller.contract.AbstContractTableTabSkin;
|
|
||||||
import com.ecep.contract.controller.contract.ContractWindowController;
|
|
||||||
import com.ecep.contract.controller.vendor.purchase.order.PurchaseOrderWindowController;
|
import com.ecep.contract.controller.vendor.purchase.order.PurchaseOrderWindowController;
|
||||||
import com.ecep.contract.converter.EmployeeStringConverter;
|
import com.ecep.contract.converter.EmployeeStringConverter;
|
||||||
import com.ecep.contract.service.CompanyService;
|
import com.ecep.contract.service.CompanyService;
|
||||||
import com.ecep.contract.service.PurchaseOrdersService;
|
import com.ecep.contract.service.PurchaseOrdersService;
|
||||||
import com.ecep.contract.vm.PurchaseOrderViewModel;
|
import com.ecep.contract.vm.PurchaseOrderViewModel;
|
||||||
import com.ecep.contract.vo.PurchaseOrderVo;
|
import com.ecep.contract.vo.PurchaseOrderVo;
|
||||||
import com.ecep.contract.controller.table.cell.CompanyTableCell;
|
|
||||||
import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell;
|
import com.ecep.contract.controller.table.cell.LocalDateTimeTableCell;
|
||||||
|
|
||||||
import javafx.scene.control.MenuItem;
|
import javafx.scene.control.MenuItem;
|
||||||
@@ -1,15 +1,16 @@
|
|||||||
package com.ecep.contract.controller.tab;
|
package com.ecep.contract.controller.contract;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
|
||||||
import com.ecep.contract.ContractPayWay;
|
import com.ecep.contract.ContractPayWay;
|
||||||
|
import com.ecep.contract.controller.tab.TabSkin;
|
||||||
|
import com.ecep.contract.controller.table.cell.CompanyTableCell;
|
||||||
import com.ecep.contract.controller.table.cell.EmployeeTableCell;
|
import com.ecep.contract.controller.table.cell.EmployeeTableCell;
|
||||||
import com.ecep.contract.util.FxmlPath;
|
import com.ecep.contract.util.FxmlPath;
|
||||||
import com.ecep.contract.controller.contract.AbstContractTableTabSkin;
|
|
||||||
import com.ecep.contract.controller.contract.ContractWindowController;
|
|
||||||
import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowController;
|
import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowController;
|
||||||
import com.ecep.contract.controller.table.cell.LocalDateFieldTableCell;
|
import com.ecep.contract.controller.table.cell.LocalDateFieldTableCell;
|
||||||
import com.ecep.contract.converter.EmployeeStringConverter;
|
import com.ecep.contract.converter.EmployeeStringConverter;
|
||||||
|
import com.ecep.contract.service.CompanyService;
|
||||||
import com.ecep.contract.service.SaleOrdersService;
|
import com.ecep.contract.service.SaleOrdersService;
|
||||||
import com.ecep.contract.vm.SalesOrderViewModel;
|
import com.ecep.contract.vm.SalesOrderViewModel;
|
||||||
|
|
||||||
@@ -32,6 +33,8 @@ public class ContractTabSkinSaleOrders
|
|||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
private SaleOrdersService saleOrdersService;
|
private SaleOrdersService saleOrdersService;
|
||||||
|
private CompanyService companyService;
|
||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
private EmployeeStringConverter employeeStringConverter;
|
private EmployeeStringConverter employeeStringConverter;
|
||||||
|
|
||||||
@@ -51,6 +54,20 @@ public class ContractTabSkinSaleOrders
|
|||||||
*/
|
*/
|
||||||
public TableColumn<SalesOrderViewModel, Integer> verifierColumn;
|
public TableColumn<SalesOrderViewModel, Integer> verifierColumn;
|
||||||
public TableColumn<SalesOrderViewModel, LocalDate> verifierDateColumn;
|
public TableColumn<SalesOrderViewModel, LocalDate> verifierDateColumn;
|
||||||
|
public TableColumn<SalesOrderViewModel, Number> refIdColumn;
|
||||||
|
public TableColumn<SalesOrderViewModel, Number> taxRateColumn;
|
||||||
|
public TableColumn<SalesOrderViewModel, Integer> customerColumn;
|
||||||
|
public TableColumn<SalesOrderViewModel, String> customerAddressColumn;
|
||||||
|
/**
|
||||||
|
* 修改人, Employee
|
||||||
|
*/
|
||||||
|
public TableColumn<SalesOrderViewModel, Integer> modifierColumn;
|
||||||
|
public TableColumn<SalesOrderViewModel, LocalDate> modifierDateColumn;
|
||||||
|
/**
|
||||||
|
* 关闭人, Employee
|
||||||
|
*/
|
||||||
|
public TableColumn<SalesOrderViewModel, Integer> closerColumn;
|
||||||
|
public TableColumn<SalesOrderViewModel, LocalDate> closerDateColumn;
|
||||||
public TableColumn<SalesOrderViewModel, String> descriptionColumn;
|
public TableColumn<SalesOrderViewModel, String> descriptionColumn;
|
||||||
public MenuItem subContractTable_menu_refresh;
|
public MenuItem subContractTable_menu_refresh;
|
||||||
public TextField contractSearchKeyField;
|
public TextField contractSearchKeyField;
|
||||||
@@ -93,16 +110,30 @@ public class ContractTabSkinSaleOrders
|
|||||||
idColumn.setCellValueFactory(param -> param.getValue().getId());
|
idColumn.setCellValueFactory(param -> param.getValue().getId());
|
||||||
codeColumn.setCellValueFactory(param -> param.getValue().getCode());
|
codeColumn.setCellValueFactory(param -> param.getValue().getCode());
|
||||||
employeeColumn.setCellValueFactory(param -> param.getValue().getEmployee());
|
employeeColumn.setCellValueFactory(param -> param.getValue().getEmployee());
|
||||||
employeeColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
|
employeeColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService()));
|
||||||
makerColumn.setCellValueFactory(param -> param.getValue().getMaker());
|
makerColumn.setCellValueFactory(param -> param.getValue().getMaker());
|
||||||
makerColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
|
makerColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService()));
|
||||||
makerDateColumn.setCellValueFactory(param -> param.getValue().getMakerDate());
|
makerDateColumn.setCellValueFactory(param -> param.getValue().getMakerDate());
|
||||||
makerDateColumn.setCellFactory(LocalDateFieldTableCell.forTableColumn());
|
makerDateColumn.setCellFactory(LocalDateFieldTableCell.forTableColumn());
|
||||||
|
|
||||||
verifierColumn.setCellValueFactory(param -> param.getValue().getVerifier());
|
verifierColumn.setCellValueFactory(param -> param.getValue().getVerifier());
|
||||||
verifierColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
|
verifierColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService()));
|
||||||
verifierDateColumn.setCellValueFactory(param -> param.getValue().getVerifierDate());
|
verifierDateColumn.setCellValueFactory(param -> param.getValue().getVerifierDate());
|
||||||
verifierDateColumn.setCellFactory(LocalDateFieldTableCell.forTableColumn());
|
verifierDateColumn.setCellFactory(LocalDateFieldTableCell.forTableColumn());
|
||||||
|
|
||||||
|
// 设置新增字段的单元格值工厂和工厂类
|
||||||
|
refIdColumn.setCellValueFactory(param -> param.getValue().getRefId());
|
||||||
|
taxRateColumn.setCellValueFactory(param -> param.getValue().getTaxRate());
|
||||||
|
customerColumn.setCellValueFactory(param -> param.getValue().getCustomer());
|
||||||
|
customerColumn.setCellFactory(CompanyTableCell.forTableColumn(getCompanyService()));
|
||||||
|
customerAddressColumn.setCellValueFactory(param -> param.getValue().getCustomerAddress());
|
||||||
|
modifierColumn.setCellValueFactory(param -> param.getValue().getModifier());
|
||||||
|
modifierColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService()));
|
||||||
|
modifierDateColumn.setCellValueFactory(param -> param.getValue().getModifierDate());
|
||||||
|
modifierDateColumn.setCellFactory(LocalDateFieldTableCell.forTableColumn());
|
||||||
|
closerColumn.setCellValueFactory(param -> param.getValue().getCloser());
|
||||||
|
closerColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService()));
|
||||||
|
closerDateColumn.setCellValueFactory(param -> param.getValue().getCloserDate());
|
||||||
|
closerDateColumn.setCellFactory(LocalDateFieldTableCell.forTableColumn());
|
||||||
|
|
||||||
descriptionColumn.setCellValueFactory(param -> param.getValue().getDescription());
|
descriptionColumn.setCellValueFactory(param -> param.getValue().getDescription());
|
||||||
super.initializeTab();
|
super.initializeTab();
|
||||||
@@ -113,17 +144,17 @@ public class ContractTabSkinSaleOrders
|
|||||||
SalesOrderWindowController.show(item, getTableView().getScene().getWindow());
|
SalesOrderWindowController.show(item, getTableView().getScene().getWindow());
|
||||||
}
|
}
|
||||||
|
|
||||||
private EmployeeStringConverter getEmployeeStringConverter() {
|
|
||||||
if (employeeStringConverter == null) {
|
|
||||||
employeeStringConverter = getBean(EmployeeStringConverter.class);
|
|
||||||
}
|
|
||||||
return employeeStringConverter;
|
|
||||||
}
|
|
||||||
|
|
||||||
SaleOrdersService getSaleOrdersService() {
|
SaleOrdersService getSaleOrdersService() {
|
||||||
if (saleOrdersService == null) {
|
if (saleOrdersService == null) {
|
||||||
saleOrdersService = getBean(SaleOrdersService.class);
|
saleOrdersService = getBean(SaleOrdersService.class);
|
||||||
}
|
}
|
||||||
return saleOrdersService;
|
return saleOrdersService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CompanyService getCompanyService() {
|
||||||
|
if (companyService == null) {
|
||||||
|
companyService = getBean(CompanyService.class);
|
||||||
|
}
|
||||||
|
return companyService;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -15,8 +15,6 @@ import com.ecep.contract.controller.tab.ContractTabSkinBase;
|
|||||||
import com.ecep.contract.controller.tab.ContractTabSkinFiles;
|
import com.ecep.contract.controller.tab.ContractTabSkinFiles;
|
||||||
import com.ecep.contract.controller.tab.ContractTabSkinItemsV2;
|
import com.ecep.contract.controller.tab.ContractTabSkinItemsV2;
|
||||||
import com.ecep.contract.controller.tab.ContractTabSkinPayPlan;
|
import com.ecep.contract.controller.tab.ContractTabSkinPayPlan;
|
||||||
import com.ecep.contract.controller.tab.ContractTabSkinPurchaseOrders;
|
|
||||||
import com.ecep.contract.controller.tab.ContractTabSkinSaleOrders;
|
|
||||||
import com.ecep.contract.controller.tab.ContractTabSkinSubContract;
|
import com.ecep.contract.controller.tab.ContractTabSkinSubContract;
|
||||||
import com.ecep.contract.controller.tab.ContractTabSkinVendorBid;
|
import com.ecep.contract.controller.tab.ContractTabSkinVendorBid;
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,15 @@ public class SalesOrderWindowController extends AbstEntityController<SalesOrderV
|
|||||||
public TextField makeDateField;
|
public TextField makeDateField;
|
||||||
public TextField makerField;
|
public TextField makerField;
|
||||||
public TextArea descriptionField;
|
public TextArea descriptionField;
|
||||||
|
public TextField refIdField;
|
||||||
|
public TextField taxRateField;
|
||||||
|
public TextField customerField;
|
||||||
|
public TextField customerAddressField;
|
||||||
|
public TextField modifierField;
|
||||||
|
public TextField modifierDateField;
|
||||||
|
public TextField closerField;
|
||||||
|
public TextField closerDateField;
|
||||||
|
public TextField contractField;
|
||||||
|
|
||||||
|
|
||||||
public static void show(SalesOrderViewModel viewModel, Window window) {
|
public static void show(SalesOrderViewModel viewModel, Window window) {
|
||||||
|
|||||||
@@ -14,30 +14,16 @@ import lombok.Setter;
|
|||||||
public abstract class AbstEmployeeBasedTabSkin
|
public abstract class AbstEmployeeBasedTabSkin
|
||||||
extends AbstEntityBasedTabSkin<EmployeeWindowController, EmployeeVo, EmployeeViewModel>
|
extends AbstEntityBasedTabSkin<EmployeeWindowController, EmployeeVo, EmployeeViewModel>
|
||||||
implements TabSkin {
|
implements TabSkin {
|
||||||
@Setter
|
|
||||||
private PermissionService permissionService;
|
|
||||||
@Setter
|
|
||||||
private EmployeeRoleService employeeRoleService;
|
|
||||||
|
|
||||||
public AbstEmployeeBasedTabSkin(EmployeeWindowController controller) {
|
public AbstEmployeeBasedTabSkin(EmployeeWindowController controller) {
|
||||||
super(controller);
|
super(controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected EmployeeService getEmployeeService() {
|
|
||||||
return controller.employeeService;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected EmployeeRoleService getEmployeeRoleService() {
|
protected EmployeeRoleService getEmployeeRoleService() {
|
||||||
if (employeeRoleService == null) {
|
return getCachedBean(EmployeeRoleService.class);
|
||||||
employeeRoleService = getBean(EmployeeRoleService.class);
|
|
||||||
}
|
|
||||||
return employeeRoleService;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PermissionService getPermissionService() {
|
protected PermissionService getPermissionService() {
|
||||||
if (permissionService == null) {
|
return getCachedBean(PermissionService.class);
|
||||||
permissionService = getBean(PermissionService.class);
|
|
||||||
}
|
|
||||||
return permissionService;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,15 +40,8 @@ import lombok.Setter;
|
|||||||
* 基础信息
|
* 基础信息
|
||||||
*/
|
*/
|
||||||
public class ProjectTabSkinBase extends AbstProjectBasedTabSkin implements TabSkin {
|
public class ProjectTabSkinBase extends AbstProjectBasedTabSkin implements TabSkin {
|
||||||
@Setter
|
|
||||||
EmployeeStringConverter employeeStringConverter;
|
|
||||||
@Setter
|
@Setter
|
||||||
LocalDateStringConverter localDateStringConverter;
|
LocalDateStringConverter localDateStringConverter;
|
||||||
@Setter
|
|
||||||
EmployeeService employeeService;
|
|
||||||
|
|
||||||
@Setter
|
|
||||||
private DeliverySignMethodService deliverySignMethodService;
|
|
||||||
|
|
||||||
public ProjectTabSkinBase(ProjectWindowController controller) {
|
public ProjectTabSkinBase(ProjectWindowController controller) {
|
||||||
super(controller);
|
super(controller);
|
||||||
@@ -59,10 +52,6 @@ public class ProjectTabSkinBase extends AbstProjectBasedTabSkin implements TabSk
|
|||||||
return controller.baseInfoTab;
|
return controller.baseInfoTab;
|
||||||
}
|
}
|
||||||
|
|
||||||
private EmployeeService getEmployeeService() {
|
|
||||||
return getBean(EmployeeService.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ProjectTypeService getProjectTypeService() {
|
private ProjectTypeService getProjectTypeService() {
|
||||||
return getBean(ProjectTypeService.class);
|
return getBean(ProjectTypeService.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,7 +162,6 @@ public class ProjectWindowController extends AbstEntityController<ProjectVo, Pro
|
|||||||
private ProjectTabSkinBase createBaseTabSkin(Tab tab) {
|
private ProjectTabSkinBase createBaseTabSkin(Tab tab) {
|
||||||
ProjectTabSkinBase skin = new ProjectTabSkinBase(this);
|
ProjectTabSkinBase skin = new ProjectTabSkinBase(this);
|
||||||
skin.setLocalDateStringConverter(localDateStringConverter);
|
skin.setLocalDateStringConverter(localDateStringConverter);
|
||||||
skin.setEmployeeService(employeeService);
|
|
||||||
return skin;
|
return skin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,11 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.beans.BeansException;
|
import org.springframework.beans.BeansException;
|
||||||
|
|
||||||
import com.ecep.contract.controller.BaseController;
|
import com.ecep.contract.controller.BaseController;
|
||||||
|
import com.ecep.contract.service.EmployeeService;
|
||||||
|
import com.ecep.contract.util.BeanContext;
|
||||||
import com.ecep.contract.util.UITools;
|
import com.ecep.contract.util.UITools;
|
||||||
|
|
||||||
public abstract class AbstGenericTabSkin<C extends BaseController> implements TabSkin {
|
public abstract class AbstGenericTabSkin<C extends BaseController> implements TabSkin, BeanContext {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(AbstGenericTabSkin.class);
|
private static final Logger logger = LoggerFactory.getLogger(AbstGenericTabSkin.class);
|
||||||
/**
|
/**
|
||||||
* 控制器
|
* 控制器
|
||||||
@@ -49,4 +51,7 @@ public abstract class AbstGenericTabSkin<C extends BaseController> implements Ta
|
|||||||
UITools.showExceptionAndWait(message, ex);
|
UITools.showExceptionAndWait(message, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EmployeeService getEmployeeService() {
|
||||||
|
return getCachedBean(EmployeeService.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -193,10 +193,13 @@ public class ContractTabSkinItemsV2
|
|||||||
}
|
}
|
||||||
showInOwner(InventoryWindowController.class, InventoryViewModel.from(inventory));
|
showInOwner(InventoryWindowController.class, InventoryViewModel.from(inventory));
|
||||||
});
|
});
|
||||||
|
contextMenu.getItems().addAll(showInventory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class QuantityTableCell extends AsyncUpdateTableCell<ContractItemViewModel, Number, PurchaseOrderItemVo> {
|
public static class QuantityTableCell
|
||||||
public static Callback<TableColumn<ContractItemViewModel, Number>, TableCell<ContractItemViewModel, Number>> forTableColumn(NumberStringConverter stringConverter) {
|
extends AsyncUpdateTableCell<ContractItemViewModel, Number, PurchaseOrderItemVo> {
|
||||||
|
public static Callback<TableColumn<ContractItemViewModel, Number>, TableCell<ContractItemViewModel, Number>> forTableColumn(
|
||||||
|
NumberStringConverter stringConverter) {
|
||||||
;
|
;
|
||||||
return param -> new QuantityTableCell(stringConverter);
|
return param -> new QuantityTableCell(stringConverter);
|
||||||
}
|
}
|
||||||
@@ -212,7 +215,10 @@ public class ContractTabSkinItemsV2
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void asyncLoadAndUpdate() {
|
protected void asyncLoadAndUpdate() {
|
||||||
double sum = getService().findAll(ParamUtils.equal("contractItem", this.getTableRow().getItem().getId().get()), Pageable.unpaged()).stream().mapToDouble(PurchaseOrderItemVo::getQuantity).sum();
|
double sum = getService()
|
||||||
|
.findAll(ParamUtils.equal("contractItem", this.getTableRow().getItem().getId().get()),
|
||||||
|
Pageable.unpaged())
|
||||||
|
.stream().mapToDouble(PurchaseOrderItemVo::getQuantity).sum();
|
||||||
Platform.runLater(() -> setText(sum + "/" + getItem()));
|
Platform.runLater(() -> setText(sum + "/" + getItem()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import java.time.LocalDate;
|
|||||||
import com.ecep.contract.ContractPayWay;
|
import com.ecep.contract.ContractPayWay;
|
||||||
import com.ecep.contract.controller.contract.AbstContractTableTabSkin;
|
import com.ecep.contract.controller.contract.AbstContractTableTabSkin;
|
||||||
import com.ecep.contract.controller.contract.ContractWindowController;
|
import com.ecep.contract.controller.contract.ContractWindowController;
|
||||||
|
import com.ecep.contract.controller.table.cell.CompanyTableCell;
|
||||||
|
import com.ecep.contract.service.CompanyService;
|
||||||
import com.ecep.contract.service.ContractService;
|
import com.ecep.contract.service.ContractService;
|
||||||
import com.ecep.contract.util.FxmlPath;
|
import com.ecep.contract.util.FxmlPath;
|
||||||
import com.ecep.contract.util.ParamUtils;
|
import com.ecep.contract.util.ParamUtils;
|
||||||
@@ -34,6 +36,7 @@ public class ContractTabSkinSubContract
|
|||||||
public TableColumn<ContractViewModel, LocalDate> subContractTable_inureDateColumn;
|
public TableColumn<ContractViewModel, LocalDate> subContractTable_inureDateColumn;
|
||||||
public TableColumn<ContractViewModel, LocalDate> subContractTable_orderDateColumn;
|
public TableColumn<ContractViewModel, LocalDate> subContractTable_orderDateColumn;
|
||||||
public TableColumn<ContractViewModel, LocalDate> subContractTable_varyDateColumn;
|
public TableColumn<ContractViewModel, LocalDate> subContractTable_varyDateColumn;
|
||||||
|
public TableColumn<ContractViewModel, Integer> subContractTable_companyColumn;
|
||||||
public MenuItem subContractTable_menu_refresh;
|
public MenuItem subContractTable_menu_refresh;
|
||||||
public TextField contractSearchKeyField;
|
public TextField contractSearchKeyField;
|
||||||
public Button contractSearchBtn;
|
public Button contractSearchBtn;
|
||||||
@@ -86,6 +89,8 @@ public class ContractTabSkinSubContract
|
|||||||
subContractTable_inureDateColumn.setCellValueFactory(param -> param.getValue().getInureDate());
|
subContractTable_inureDateColumn.setCellValueFactory(param -> param.getValue().getInureDate());
|
||||||
subContractTable_orderDateColumn.setCellValueFactory(param -> param.getValue().getOrderDate());
|
subContractTable_orderDateColumn.setCellValueFactory(param -> param.getValue().getOrderDate());
|
||||||
subContractTable_varyDateColumn.setCellValueFactory(param -> param.getValue().getVaryDate());
|
subContractTable_varyDateColumn.setCellValueFactory(param -> param.getValue().getVaryDate());
|
||||||
|
subContractTable_companyColumn.setCellValueFactory(param -> param.getValue().getCompany());
|
||||||
|
subContractTable_companyColumn.setCellFactory(CompanyTableCell.forTableColumn(getCachedBean(CompanyService.class)));
|
||||||
|
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
getTableView().getSortOrder().add(subContractTable_codeColumn);
|
getTableView().getSortOrder().add(subContractTable_codeColumn);
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
package com.ecep.contract.controller.tab;
|
package com.ecep.contract.controller.tab;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
import com.ecep.contract.MyDateTimeUtils;
|
import com.ecep.contract.MyDateTimeUtils;
|
||||||
import com.ecep.contract.SpringApp;
|
|
||||||
import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowController;
|
import com.ecep.contract.controller.contract.sale_order.SalesOrderWindowController;
|
||||||
import com.ecep.contract.converter.EmployeeStringConverter;
|
|
||||||
import com.ecep.contract.service.CompanyService;
|
import com.ecep.contract.service.CompanyService;
|
||||||
import com.ecep.contract.service.ContractFileService;
|
import com.ecep.contract.service.ContractService;
|
||||||
import com.ecep.contract.util.UITools;
|
import com.ecep.contract.util.UITools;
|
||||||
import com.ecep.contract.vm.SalesOrderViewModel;
|
import com.ecep.contract.vm.SalesOrderViewModel;
|
||||||
import com.ecep.contract.vo.SalesOrderVo;
|
import com.ecep.contract.vo.SalesOrderVo;
|
||||||
@@ -15,18 +11,12 @@ import com.ecep.contract.vo.SalesOrderVo;
|
|||||||
import javafx.beans.property.SimpleObjectProperty;
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
import lombok.Setter;
|
import javafx.util.converter.NumberStringConverter;
|
||||||
|
|
||||||
public class SalesOrderTabSkinBase
|
public class SalesOrderTabSkinBase
|
||||||
extends AbstEntityBasedTabSkin<SalesOrderWindowController, SalesOrderVo, SalesOrderViewModel>
|
extends AbstEntityBasedTabSkin<SalesOrderWindowController, SalesOrderVo, SalesOrderViewModel>
|
||||||
implements TabSkin {
|
implements TabSkin {
|
||||||
|
|
||||||
@Setter
|
|
||||||
private ContractFileService companyContactService;
|
|
||||||
@Setter
|
|
||||||
private CompanyService companyService;
|
|
||||||
private EmployeeStringConverter employeeStringConverter;
|
|
||||||
|
|
||||||
public SalesOrderTabSkinBase(SalesOrderWindowController controller) {
|
public SalesOrderTabSkinBase(SalesOrderWindowController controller) {
|
||||||
super(controller);
|
super(controller);
|
||||||
}
|
}
|
||||||
@@ -39,13 +29,26 @@ public class SalesOrderTabSkinBase
|
|||||||
@Override
|
@Override
|
||||||
public void initializeTab() {
|
public void initializeTab() {
|
||||||
controller.codeField.textProperty().bind(viewModel.getCode());
|
controller.codeField.textProperty().bind(viewModel.getCode());
|
||||||
|
controller.refIdField.textProperty().bindBidirectional(viewModel.getRefId(), new NumberStringConverter(getLocale()));
|
||||||
|
|
||||||
|
controller.taxRateField.textProperty().bindBidirectional(viewModel.getTaxRate(), new NumberStringConverter(getLocale()));
|
||||||
|
|
||||||
initializeEmployeeField(controller.employeeField, viewModel.getEmployee());
|
initializeEmployeeField(controller.employeeField, viewModel.getEmployee());
|
||||||
initializeEmployeeField(controller.makerField, viewModel.getMaker());
|
initializeEmployeeField(controller.makerField, viewModel.getMaker());
|
||||||
initializeEmployeeField(controller.verifierField, viewModel.getVerifier());
|
initializeEmployeeField(controller.verifierField, viewModel.getVerifier());
|
||||||
|
initializeEmployeeField(controller.modifierField, viewModel.getModifier());
|
||||||
|
initializeEmployeeField(controller.closerField, viewModel.getCloser());
|
||||||
|
|
||||||
|
initializeCompanyField(controller.customerField, viewModel.getCustomer());
|
||||||
|
|
||||||
|
controller.customerAddressField.textProperty().bindBidirectional(viewModel.getCustomerAddress());
|
||||||
|
|
||||||
|
initializeContractField(controller.contractField, viewModel.getContract());
|
||||||
|
|
||||||
controller.makeDateField.textProperty().bind(viewModel.getMakerDate().map(MyDateTimeUtils::format));
|
controller.makeDateField.textProperty().bind(viewModel.getMakerDate().map(MyDateTimeUtils::format));
|
||||||
controller.verifierDateField.textProperty().bind(viewModel.getVerifierDate().map(MyDateTimeUtils::format));
|
controller.verifierDateField.textProperty().bind(viewModel.getVerifierDate().map(MyDateTimeUtils::format));
|
||||||
|
controller.modifierDateField.textProperty().bind(viewModel.getModifierDate().map(MyDateTimeUtils::format));
|
||||||
|
controller.closerDateField.textProperty().bind(viewModel.getCloserDate().map(MyDateTimeUtils::format));
|
||||||
|
|
||||||
controller.descriptionField.textProperty().bindBidirectional(viewModel.getDescription());
|
controller.descriptionField.textProperty().bindBidirectional(viewModel.getDescription());
|
||||||
|
|
||||||
@@ -53,29 +56,23 @@ public class SalesOrderTabSkinBase
|
|||||||
controller.saveBtn.setOnAction(this::onSaveAction);
|
controller.saveBtn.setOnAction(this::onSaveAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String localDateTimeFormatter(SimpleObjectProperty<LocalDateTime> property) {
|
|
||||||
LocalDateTime dateTime = property.get();
|
|
||||||
if (dateTime == null) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return MyDateTimeUtils.format(dateTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeEmployeeField(TextField textField, SimpleObjectProperty<Integer> property) {
|
private void initializeEmployeeField(TextField textField, SimpleObjectProperty<Integer> property) {
|
||||||
UITools.autoCompletion(textField, property, controller.getEmployeeService());
|
UITools.autoCompletion(textField, property, controller.getEmployeeService());
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompanyService getCompanyService() {
|
private void initializeCompanyField(TextField textField, SimpleObjectProperty<Integer> property) {
|
||||||
if (companyService == null) {
|
UITools.autoCompletion(textField, property, getCompanyService());
|
||||||
companyService = SpringApp.getBean(CompanyService.class);
|
}
|
||||||
}
|
|
||||||
return companyService;
|
private void initializeContractField(TextField textField, SimpleObjectProperty<Integer> property) {
|
||||||
|
UITools.autoCompletion(textField, property, getContractService());
|
||||||
}
|
}
|
||||||
|
|
||||||
public EmployeeStringConverter getEmployeeStringConverter() {
|
public CompanyService getCompanyService() {
|
||||||
if (employeeStringConverter == null) {
|
return getCachedBean(CompanyService.class);
|
||||||
employeeStringConverter = SpringApp.getBean(EmployeeStringConverter.class);
|
}
|
||||||
}
|
|
||||||
return employeeStringConverter;
|
public ContractService getContractService() {
|
||||||
|
return getCachedBean(ContractService.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ package com.ecep.contract.vm;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.ecep.contract.util.NumberUtils;
|
||||||
import com.ecep.contract.vo.SalesOrderVo;
|
import com.ecep.contract.vo.SalesOrderVo;
|
||||||
|
import javafx.beans.property.SimpleFloatProperty;
|
||||||
import javafx.beans.property.SimpleIntegerProperty;
|
import javafx.beans.property.SimpleIntegerProperty;
|
||||||
import javafx.beans.property.SimpleObjectProperty;
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
import javafx.beans.property.SimpleStringProperty;
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
@@ -25,6 +26,16 @@ public class SalesOrderViewModel extends IdentityViewModel<SalesOrderVo> {
|
|||||||
SimpleObjectProperty<LocalDate> verifierDate = new SimpleObjectProperty<>();
|
SimpleObjectProperty<LocalDate> verifierDate = new SimpleObjectProperty<>();
|
||||||
SimpleStringProperty description = new SimpleStringProperty();
|
SimpleStringProperty description = new SimpleStringProperty();
|
||||||
|
|
||||||
|
// 添加缺失的字段
|
||||||
|
SimpleIntegerProperty refId = new SimpleIntegerProperty();
|
||||||
|
SimpleFloatProperty taxRate = new SimpleFloatProperty();
|
||||||
|
SimpleObjectProperty<Integer> customer = new SimpleObjectProperty<>();
|
||||||
|
SimpleStringProperty customerAddress = new SimpleStringProperty();
|
||||||
|
SimpleObjectProperty<Integer> modifier = new SimpleObjectProperty<>();
|
||||||
|
SimpleObjectProperty<LocalDate> modifierDate = new SimpleObjectProperty<>();
|
||||||
|
SimpleObjectProperty<Integer> closer = new SimpleObjectProperty<>();
|
||||||
|
SimpleObjectProperty<LocalDate> closerDate = new SimpleObjectProperty<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateFrom(SalesOrderVo v) {
|
protected void updateFrom(SalesOrderVo v) {
|
||||||
getId().set(v.getId());
|
getId().set(v.getId());
|
||||||
@@ -35,6 +46,18 @@ public class SalesOrderViewModel extends IdentityViewModel<SalesOrderVo> {
|
|||||||
getVerifier().set(v.getVerifierId());
|
getVerifier().set(v.getVerifierId());
|
||||||
getMakerDate().set(v.getMakerDate());
|
getMakerDate().set(v.getMakerDate());
|
||||||
getVerifierDate().set(v.getVerifierDate());
|
getVerifierDate().set(v.getVerifierDate());
|
||||||
|
getDescription().set(v.getDescription());
|
||||||
|
|
||||||
|
// 更新添加的字段
|
||||||
|
getRefId().set(v.getRefId());
|
||||||
|
getTaxRate().set(v.getTaxRate());
|
||||||
|
getCustomer().set(v.getCustomerId());
|
||||||
|
getCustomerAddress().set(v.getCustomerAddress());
|
||||||
|
getModifier().set(v.getModifierId());
|
||||||
|
getModifierDate().set(v.getModifierDate());
|
||||||
|
getCloser().set(v.getCloserId());
|
||||||
|
getCloserDate().set(v.getCloserDate());
|
||||||
|
|
||||||
super.updateFrom(v);
|
super.updateFrom(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,6 +104,48 @@ public class SalesOrderViewModel extends IdentityViewModel<SalesOrderVo> {
|
|||||||
v.setDescription(description.get());
|
v.setDescription(description.get());
|
||||||
modified = true;
|
modified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 复制添加的字段
|
||||||
|
if (!Objects.equals(refId.get(), v.getRefId())) {
|
||||||
|
v.setRefId(refId.get());
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!NumberUtils.equals(taxRate.get(), v.getTaxRate())) {
|
||||||
|
v.setTaxRate(taxRate.get());
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(customer.get(), v.getCustomerId())) {
|
||||||
|
v.setCustomerId(customer.get());
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(customerAddress.get(), v.getCustomerAddress())) {
|
||||||
|
v.setCustomerAddress(customerAddress.get());
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(modifier.get(), v.getModifierId())) {
|
||||||
|
v.setModifierId(modifier.get());
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(modifierDate.get(), v.getModifierDate())) {
|
||||||
|
v.setModifierDate(modifierDate.get());
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(closer.get(), v.getCloserId())) {
|
||||||
|
v.setCloserId(closer.get());
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(closerDate.get(), v.getCloserDate())) {
|
||||||
|
v.setCloserDate(closerDate.get());
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
return modified;
|
return modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="400.0" prefWidth="600.0"
|
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="400.0" prefWidth="600.0"
|
||||||
xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1"
|
xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1"
|
||||||
fx:controller="com.ecep.contract.controller.tab.ContractTabSkinPurchaseOrders"
|
fx:controller="com.ecep.contract.controller.contract.ContractTabSkinPurchaseOrders"
|
||||||
>
|
>
|
||||||
<children>
|
<children>
|
||||||
<HBox spacing="3.0">
|
<HBox spacing="3.0">
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"
|
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"
|
||||||
xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1"
|
xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1"
|
||||||
fx:controller="com.ecep.contract.controller.tab.ContractTabSkinSaleOrders"
|
fx:controller="com.ecep.contract.controller.contract.ContractTabSkinSaleOrders"
|
||||||
>
|
>
|
||||||
<children>
|
<children>
|
||||||
<HBox spacing="3.0">
|
<HBox spacing="3.0">
|
||||||
@@ -23,12 +23,19 @@
|
|||||||
<columns>
|
<columns>
|
||||||
<TableColumn fx:id="idColumn" prefWidth="75.0" text="ID"/>
|
<TableColumn fx:id="idColumn" prefWidth="75.0" text="ID"/>
|
||||||
<TableColumn fx:id="codeColumn" prefWidth="120" text="编号"/>
|
<TableColumn fx:id="codeColumn" prefWidth="120" text="编号"/>
|
||||||
<TableColumn fx:id="employeeColumn" prefWidth="120" text="编号"/>
|
<TableColumn fx:id="customerColumn" prefWidth="100.0" text="客户"/>
|
||||||
|
<TableColumn fx:id="customerAddressColumn" prefWidth="150.0" text="客户地址"/>
|
||||||
|
<TableColumn fx:id="taxRateColumn" prefWidth="60.0" text="税率"/>
|
||||||
|
<TableColumn fx:id="refIdColumn" prefWidth="60.0" text="RefID"/>
|
||||||
|
<TableColumn fx:id="employeeColumn" prefWidth="120" text="业务员"/>
|
||||||
<TableColumn fx:id="makerColumn" prefWidth="90.0" text="制单人" />
|
<TableColumn fx:id="makerColumn" prefWidth="90.0" text="制单人" />
|
||||||
<TableColumn fx:id="makerDateColumn" prefWidth="130.0" text="制单日期"/>
|
<TableColumn fx:id="makerDateColumn" prefWidth="130.0" text="制单日期"/>
|
||||||
<TableColumn fx:id="verifierColumn" prefWidth="70.0" text="审核人"/>
|
<TableColumn fx:id="verifierColumn" prefWidth="70.0" text="审核人"/>
|
||||||
<TableColumn fx:id="verifierDateColumn" prefWidth="130.0" text="审核日期"/>
|
<TableColumn fx:id="verifierDateColumn" prefWidth="130.0" text="审核日期"/>
|
||||||
|
<TableColumn fx:id="modifierColumn" prefWidth="90.0" text="修改人"/>
|
||||||
|
<TableColumn fx:id="modifierDateColumn" prefWidth="130.0" text="修改日期"/>
|
||||||
|
<TableColumn fx:id="closerColumn" prefWidth="90.0" text="关闭人"/>
|
||||||
|
<TableColumn fx:id="closerDateColumn" prefWidth="130.0" text="关闭日期"/>
|
||||||
<TableColumn fx:id="descriptionColumn" prefWidth="180.0" text="备注"/>
|
<TableColumn fx:id="descriptionColumn" prefWidth="180.0" text="备注"/>
|
||||||
</columns>
|
</columns>
|
||||||
<contextMenu>
|
<contextMenu>
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
<?import javafx.scene.control.cell.PropertyValueFactory?>
|
||||||
|
<?import com.ecep.contract.controller.table.cell.CompanyTableCell?>
|
||||||
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"
|
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"
|
||||||
xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1"
|
xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1"
|
||||||
fx:controller="com.ecep.contract.controller.tab.ContractTabSkinSubContract"
|
fx:controller="com.ecep.contract.controller.tab.ContractTabSkinSubContract"
|
||||||
@@ -24,6 +26,8 @@
|
|||||||
<TableColumn fx:id="subContractTable_idColumn" prefWidth="75.0" text="ID"/>
|
<TableColumn fx:id="subContractTable_idColumn" prefWidth="75.0" text="ID"/>
|
||||||
<TableColumn fx:id="subContractTable_codeColumn" prefWidth="120" text="合同编号" sortType="DESCENDING"/>
|
<TableColumn fx:id="subContractTable_codeColumn" prefWidth="120" text="合同编号" sortType="DESCENDING"/>
|
||||||
<TableColumn fx:id="subContractTable_nameColumn" prefWidth="250" text="合同名称"/>
|
<TableColumn fx:id="subContractTable_nameColumn" prefWidth="250" text="合同名称"/>
|
||||||
|
<TableColumn fx:id="subContractTable_companyColumn" prefWidth="250" text="公司">
|
||||||
|
</TableColumn>
|
||||||
<TableColumn fx:id="subContractTable_setupDateColumn" prefWidth="75.0" text="提交日期"/>
|
<TableColumn fx:id="subContractTable_setupDateColumn" prefWidth="75.0" text="提交日期"/>
|
||||||
<TableColumn fx:id="subContractTable_inureDateColumn" prefWidth="75.0" text="生效日期"/>
|
<TableColumn fx:id="subContractTable_inureDateColumn" prefWidth="75.0" text="生效日期"/>
|
||||||
<TableColumn fx:id="subContractTable_orderDateColumn" prefWidth="75.0" text="签订日期"/>
|
<TableColumn fx:id="subContractTable_orderDateColumn" prefWidth="75.0" text="签订日期"/>
|
||||||
|
|||||||
@@ -28,6 +28,16 @@
|
|||||||
minWidth="50.0" prefWidth="180.0"/>
|
minWidth="50.0" prefWidth="180.0"/>
|
||||||
</columnConstraints>
|
</columnConstraints>
|
||||||
<rowConstraints>
|
<rowConstraints>
|
||||||
|
<RowConstraints fillHeight="false" minHeight="30.0" prefHeight="30.0"
|
||||||
|
vgrow="NEVER"/>
|
||||||
|
<RowConstraints fillHeight="false" minHeight="30.0" prefHeight="30.0"
|
||||||
|
vgrow="NEVER"/>
|
||||||
|
<RowConstraints fillHeight="false" minHeight="30.0" prefHeight="30.0"
|
||||||
|
vgrow="NEVER"/>
|
||||||
|
<RowConstraints fillHeight="false" minHeight="30.0" prefHeight="30.0"
|
||||||
|
vgrow="NEVER"/>
|
||||||
|
<RowConstraints fillHeight="false" minHeight="30.0" prefHeight="30.0"
|
||||||
|
vgrow="NEVER"/>
|
||||||
<RowConstraints fillHeight="false" minHeight="30.0" prefHeight="30.0"
|
<RowConstraints fillHeight="false" minHeight="30.0" prefHeight="30.0"
|
||||||
vgrow="NEVER"/>
|
vgrow="NEVER"/>
|
||||||
<RowConstraints fillHeight="false" minHeight="30.0" prefHeight="30.0"
|
<RowConstraints fillHeight="false" minHeight="30.0" prefHeight="30.0"
|
||||||
@@ -45,33 +55,50 @@
|
|||||||
<Label text="订单号#"/>
|
<Label text="订单号#"/>
|
||||||
<TextField fx:id="codeField" GridPane.columnIndex="1"/>
|
<TextField fx:id="codeField" GridPane.columnIndex="1"/>
|
||||||
<Label text="业务员" GridPane.rowIndex="1"/>
|
<Label text="业务员" GridPane.rowIndex="1"/>
|
||||||
<TextField fx:id="createdField" disable="true" promptText="yyyy-MM-dd"
|
<Label text="引用ID" GridPane.columnIndex="2" GridPane.rowIndex="0"/>
|
||||||
GridPane.columnIndex="1" GridPane.rowIndex="3"/>
|
<TextField fx:id="refIdField" GridPane.columnIndex="3" GridPane.rowIndex="0"/>
|
||||||
|
<Label text="合同" GridPane.rowIndex="9"/>
|
||||||
|
<TextField fx:id="contractField" GridPane.columnIndex="1" GridPane.rowIndex="9"/>
|
||||||
|
<TextField fx:id="employeeField" GridPane.columnIndex="1"
|
||||||
|
GridPane.rowIndex="1"/>
|
||||||
|
<Label text="税率" GridPane.columnIndex="2" GridPane.rowIndex="1"/>
|
||||||
|
<TextField fx:id="taxRateField" GridPane.columnIndex="3" GridPane.rowIndex="1"/>
|
||||||
<Label text="制单人" GridPane.rowIndex="2"/>
|
<Label text="制单人" GridPane.rowIndex="2"/>
|
||||||
<Label text="制单日期" GridPane.columnIndex="2" GridPane.rowIndex="2"/>
|
|
||||||
<Label text="审核人" GridPane.rowIndex="3"/>
|
|
||||||
<Label text="审核日期" GridPane.columnIndex="2" GridPane.rowIndex="3"/>
|
|
||||||
<TextField fx:id="makerField" GridPane.columnIndex="1"
|
<TextField fx:id="makerField" GridPane.columnIndex="1"
|
||||||
GridPane.rowIndex="2"/>
|
GridPane.rowIndex="2"/>
|
||||||
<TextField fx:id="makeDateField" GridPane.columnIndex="3"
|
<Label text="客户" GridPane.columnIndex="2" GridPane.rowIndex="2"/>
|
||||||
GridPane.rowIndex="2"/>
|
<TextField fx:id="customerField" GridPane.columnIndex="3" GridPane.rowIndex="2"/>
|
||||||
|
<Label text="制单日期" GridPane.rowIndex="3"/>
|
||||||
|
<TextField fx:id="makeDateField" GridPane.columnIndex="1"
|
||||||
|
GridPane.rowIndex="3"/>
|
||||||
|
<Label text="客户地址" GridPane.columnIndex="2" GridPane.rowIndex="3"/>
|
||||||
|
<TextField fx:id="customerAddressField" GridPane.columnIndex="3" GridPane.rowIndex="3"/>
|
||||||
|
<Label text="审核人" GridPane.rowIndex="4"/>
|
||||||
<TextField fx:id="verifierField" GridPane.columnIndex="1"
|
<TextField fx:id="verifierField" GridPane.columnIndex="1"
|
||||||
GridPane.rowIndex="3"/>
|
GridPane.rowIndex="4"/>
|
||||||
<TextField fx:id="verifierDateField" GridPane.columnIndex="3"
|
<Label text="修改人" GridPane.columnIndex="2" GridPane.rowIndex="4"/>
|
||||||
GridPane.rowIndex="3"/>
|
<TextField fx:id="modifierField" GridPane.columnIndex="3" GridPane.rowIndex="4"/>
|
||||||
<Label layoutX="20.0" layoutY="28.0" text="备注" GridPane.rowIndex="4"/>
|
<Label text="审核日期" GridPane.rowIndex="5"/>
|
||||||
|
<TextField fx:id="verifierDateField" GridPane.columnIndex="1"
|
||||||
|
GridPane.rowIndex="5"/>
|
||||||
|
<Label text="修改日期" GridPane.columnIndex="2" GridPane.rowIndex="5"/>
|
||||||
|
<TextField fx:id="modifierDateField" GridPane.columnIndex="3" GridPane.rowIndex="5"/>
|
||||||
|
<Label text="关闭人" GridPane.rowIndex="6"/>
|
||||||
|
<TextField fx:id="closerField" GridPane.columnIndex="1"
|
||||||
|
GridPane.rowIndex="6"/>
|
||||||
|
<Label text="关闭日期" GridPane.columnIndex="2" GridPane.rowIndex="6"/>
|
||||||
|
<TextField fx:id="closerDateField" GridPane.columnIndex="3" GridPane.rowIndex="6"/>
|
||||||
|
<Label layoutX="20.0" layoutY="28.0" text="备注" GridPane.rowIndex="7"/>
|
||||||
<TextArea fx:id="descriptionField" GridPane.columnIndex="1"
|
<TextArea fx:id="descriptionField" GridPane.columnIndex="1"
|
||||||
GridPane.columnSpan="3" GridPane.rowIndex="4"/>
|
GridPane.columnSpan="3" GridPane.rowIndex="7"/>
|
||||||
<HBox alignment="CENTER_RIGHT" spacing="5.0" GridPane.columnIndex="1"
|
<HBox alignment="CENTER_RIGHT" spacing="5.0" GridPane.columnIndex="1"
|
||||||
GridPane.columnSpan="3" GridPane.rowIndex="5">
|
GridPane.columnSpan="3" GridPane.rowIndex="8">
|
||||||
<children>
|
<children>
|
||||||
<Button fx:id="saveBtn" disable="true" mnemonicParsing="false"
|
<Button fx:id="saveBtn" disable="true" mnemonicParsing="false"
|
||||||
text="保存"/>
|
text="保存"/>
|
||||||
</children>
|
</children>
|
||||||
</HBox>
|
</HBox>
|
||||||
<Label fx:id="versionLabel" text="\@Version" GridPane.rowIndex="5"/>
|
<Label fx:id="versionLabel" text="\@Version" GridPane.rowIndex="8"/>
|
||||||
<TextField fx:id="employeeField" GridPane.columnIndex="1"
|
|
||||||
GridPane.rowIndex="1"/>
|
|
||||||
</children>
|
</children>
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0"/>
|
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0"/>
|
||||||
|
|||||||
@@ -20,4 +20,14 @@ public class SalesOrderVo implements IdentityEntity, ContractBasedVo, Serializab
|
|||||||
private LocalDate verifierDate;
|
private LocalDate verifierDate;
|
||||||
private String description;
|
private String description;
|
||||||
private Boolean active = false;
|
private Boolean active = false;
|
||||||
|
|
||||||
|
// 补充缺失的字段
|
||||||
|
private Integer refId;
|
||||||
|
private float taxRate;
|
||||||
|
private Integer customerId;
|
||||||
|
private String customerAddress;
|
||||||
|
private Integer modifierId;
|
||||||
|
private LocalDate modifierDate;
|
||||||
|
private Integer closerId;
|
||||||
|
private LocalDate closerDate;
|
||||||
}
|
}
|
||||||
@@ -160,9 +160,7 @@ public class SalesBillVoucherCtx extends AbstractYongYouU8Ctx {
|
|||||||
public void syncBySalesOrder(SalesOrder order, MessageHolder holder) {
|
public void syncBySalesOrder(SalesOrder order, MessageHolder holder) {
|
||||||
var voucherService = getSalesBillVoucherService();
|
var voucherService = getSalesBillVoucherService();
|
||||||
var voucherItemService = getSalesBillVoucherItemService();
|
var voucherItemService = getSalesBillVoucherItemService();
|
||||||
List<SalesBillVoucher> vouchers = voucherService.findAll((root, q, cb) -> {
|
List<SalesBillVoucher> vouchers = voucherService.findAllByOrder(order);
|
||||||
return cb.equal(root.get("order"), order);
|
|
||||||
}, Sort.unsorted());
|
|
||||||
holder.debug("查找到 " + vouchers.size() + " 条专用发票记录在数据库中");
|
holder.debug("查找到 " + vouchers.size() + " 条专用发票记录在数据库中");
|
||||||
Map<Integer, SalesBillVoucher> voucherMap = vouchers.stream()
|
Map<Integer, SalesBillVoucher> voucherMap = vouchers.stream()
|
||||||
.collect(Collectors.toMap(SalesBillVoucher::getRefId, item -> item));
|
.collect(Collectors.toMap(SalesBillVoucher::getRefId, item -> item));
|
||||||
|
|||||||
@@ -11,11 +11,16 @@ import java.util.Map;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Collectors;
|
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.ds.contract.service.ContractService;
|
||||||
import com.ecep.contract.vo.ContractVo;
|
import com.ecep.contract.vo.ContractVo;
|
||||||
import org.springframework.data.domain.Sort;
|
import org.springframework.data.domain.Sort;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import com.ecep.contract.MessageHolder;
|
import com.ecep.contract.MessageHolder;
|
||||||
import com.ecep.contract.constant.CloudServiceConstant;
|
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.contract.model.Contract;
|
||||||
import com.ecep.contract.ds.customer.model.SalesOrder;
|
import com.ecep.contract.ds.customer.model.SalesOrder;
|
||||||
import com.ecep.contract.ds.customer.model.SalesOrderItem;
|
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 com.ecep.contract.util.NumberUtils;
|
||||||
|
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -42,6 +49,69 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
|||||||
return saleOrdersService;
|
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() {
|
SalesOrderItemService getOrderItemService() {
|
||||||
if (orderItemService == null) {
|
if (orderItemService == null) {
|
||||||
orderItemService = getBean(SalesOrderItemService.class);
|
orderItemService = getBean(SalesOrderItemService.class);
|
||||||
@@ -49,22 +119,20 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
|||||||
return orderItemService;
|
return orderItemService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<SalesOrder> syncByContract(ContractVo contract, MessageHolder holder) {
|
public List<SalesOrder> syncByContract(ContractVo contract, MessageHolder holder) {
|
||||||
SaleOrdersService saleOrdersService = getSaleOrdersService();
|
SaleOrdersService saleOrdersService = getSaleOrdersService();
|
||||||
SalesOrderItemService orderItemService = getOrderItemService();
|
SalesOrderItemService orderItemService = getOrderItemService();
|
||||||
|
|
||||||
List<SalesOrder> orders = saleOrdersService.findAllByContract(contract);
|
List<SalesOrder> orders = saleOrdersService.findAllByContract(contract);
|
||||||
holder.debug("查找到 " + orders.size() + " 条销售订单记录在数据库中");
|
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 分组
|
// 按 order 分组
|
||||||
Map<SalesOrder, Map<String, SalesOrderItem>> itemMap = orders.stream()
|
Map<SalesOrder, Map<String, SalesOrderItem>> itemMap = orders.stream()
|
||||||
.collect(
|
.collect(
|
||||||
Collectors.toMap(Function.identity(), order -> orderItemService.findAllBySaleOrder(order).stream().collect(
|
Collectors.toMap(Function.identity(),
|
||||||
Collectors.toMap(SalesOrderItem::getCode, item -> item)
|
order -> orderItemService.findAllBySaleOrder(order).stream().collect(
|
||||||
))
|
Collectors.toMap(SalesOrderItem::getCode, item -> item))));
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// 查询 U8 数据库
|
// 查询 U8 数据库
|
||||||
List<Map<String, Object>> ds = repository.findAllSalesOrderItemByContractCode(contract.getCode());
|
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) {
|
private boolean applySalesOrderDetail(SalesOrder order, Map<String, Object> map, MessageHolder holder) {
|
||||||
String code = (String) map.get("cSOCode");
|
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");
|
String memo = (String) map.get("cMemo");
|
||||||
|
|
||||||
@@ -174,20 +257,48 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
|||||||
modified = true;
|
modified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateEmployeeByCode(order::getEmployee, order::setEmployee, (String) map.get("cPersonCode"), holder, "业务员")) {
|
if (updateEmployeeByCode(order::getEmployee, order::setEmployee, employeeCode, holder, "业务员")) {
|
||||||
modified = true;
|
modified = true;
|
||||||
}
|
}
|
||||||
if (updateEmployeeByName(order::getMaker, order::setMaker, (String) map.get("cMaker"), holder, "制单人")) {
|
if (updateEmployeeByName(order::getMaker, order::setMaker, makerName, holder, "制单人")) {
|
||||||
modified = true;
|
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;
|
modified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateLocalDate(order::getMakerDate, order::setMakerDate, (Timestamp) map.get("dcreatesystime"), holder, "制单日期")) {
|
if (updateLocalDate(order::getMakerDate, order::setMakerDate, makerDate, holder, "制单日期")) {
|
||||||
modified = true;
|
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;
|
modified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,11 +311,11 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
|||||||
return modified;
|
return modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean applySaleOrderItemDetail(SalesOrderItem item, Map<String, Object> map, MessageHolder holder) {
|
private boolean applySaleOrderItemDetail(SalesOrderItem item, Map<String, Object> map, MessageHolder holder) {
|
||||||
String code = String.valueOf(map.get("iSOsID"));
|
String code = String.valueOf(map.get("iSOsID"));
|
||||||
String spec = (String) map.get("cInvName");
|
String spec = (String) map.get("cInvName");
|
||||||
String title = (String) map.get("cInvName");
|
String title = (String) map.get("cInvName");
|
||||||
|
String contractItemRowId = (String) map.get("cContractRowGuid");
|
||||||
double quantity = (double) map.get("iQuantity");
|
double quantity = (double) map.get("iQuantity");
|
||||||
double taxRate = (double) map.get("iTaxRate");
|
double taxRate = (double) map.get("iTaxRate");
|
||||||
double taxPrice = (double) map.get("iTaxUnitPrice");
|
double taxPrice = (double) map.get("iTaxUnitPrice");
|
||||||
@@ -217,7 +328,6 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
|||||||
|
|
||||||
holder.debug("条目:" + title + " x " + amount);
|
holder.debug("条目:" + title + " x " + amount);
|
||||||
|
|
||||||
|
|
||||||
if (!Objects.equals(item.getCode(), code)) {
|
if (!Objects.equals(item.getCode(), code)) {
|
||||||
item.setCode(code);
|
item.setCode(code);
|
||||||
holder.info("代码修改为: " + code);
|
holder.info("代码修改为: " + code);
|
||||||
@@ -255,6 +365,13 @@ public class SalesOrderCtx extends AbstractYongYouU8Ctx {
|
|||||||
modified = true;
|
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)) {
|
if (!Objects.equals(item.getDescription(), memo)) {
|
||||||
item.setDescription(memo);
|
item.setDescription(memo);
|
||||||
modified = true;
|
modified = true;
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.ecep.contract.ds.contract.repository;
|
package com.ecep.contract.ds.contract.repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import com.ecep.contract.ds.customer.model.SalesOrder;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import com.ecep.contract.ds.MyRepository;
|
import com.ecep.contract.ds.MyRepository;
|
||||||
@@ -12,4 +14,5 @@ public interface SalesBillVoucherRepository extends MyRepository<SalesBillVouche
|
|||||||
|
|
||||||
Optional<SalesBillVoucher> findByCode(String code);
|
Optional<SalesBillVoucher> findByCode(String code);
|
||||||
|
|
||||||
|
List<SalesBillVoucher> findAllByOrder(SalesOrder order);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import com.ecep.contract.QueryService;
|
|||||||
import com.ecep.contract.SpringApp;
|
import com.ecep.contract.SpringApp;
|
||||||
import com.ecep.contract.ds.contract.repository.SalesOrderRepository;
|
import com.ecep.contract.ds.contract.repository.SalesOrderRepository;
|
||||||
import com.ecep.contract.ds.other.service.EmployeeService;
|
import com.ecep.contract.ds.other.service.EmployeeService;
|
||||||
|
import com.ecep.contract.ds.company.service.CompanyService;
|
||||||
import com.ecep.contract.ds.contract.model.Contract;
|
import com.ecep.contract.ds.contract.model.Contract;
|
||||||
import com.ecep.contract.ds.customer.model.SalesOrder;
|
import com.ecep.contract.ds.customer.model.SalesOrder;
|
||||||
import com.ecep.contract.service.VoableService;
|
import com.ecep.contract.service.VoableService;
|
||||||
@@ -112,6 +113,11 @@ public class SaleOrdersService extends EntityService<SalesOrder, SalesOrderVo, I
|
|||||||
model.setMakerDate(vo.getMakerDate());
|
model.setMakerDate(vo.getMakerDate());
|
||||||
model.setVerifierDate(vo.getVerifierDate());
|
model.setVerifierDate(vo.getVerifierDate());
|
||||||
model.setDescription(vo.getDescription());
|
model.setDescription(vo.getDescription());
|
||||||
|
model.setRefId(vo.getRefId());
|
||||||
|
model.setTaxRate(vo.getTaxRate());
|
||||||
|
model.setCustomerAddress(vo.getCustomerAddress());
|
||||||
|
model.setModifierDate(vo.getModifierDate());
|
||||||
|
model.setCloserDate(vo.getCloserDate());
|
||||||
|
|
||||||
// 处理关联对象
|
// 处理关联对象
|
||||||
if (vo.getContractId() == null) {
|
if (vo.getContractId() == null) {
|
||||||
@@ -138,6 +144,24 @@ public class SaleOrdersService extends EntityService<SalesOrder, SalesOrderVo, I
|
|||||||
model.setVerifier(SpringApp.getBean(EmployeeService.class).getById(vo.getVerifierId()));
|
model.setVerifier(SpringApp.getBean(EmployeeService.class).getById(vo.getVerifierId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vo.getCustomerId() == null) {
|
||||||
|
model.setCustomer(null);
|
||||||
|
} else {
|
||||||
|
model.setCustomer(SpringApp.getBean(CompanyService.class).getById(vo.getCustomerId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vo.getModifierId() == null) {
|
||||||
|
model.setModifier(null);
|
||||||
|
} else {
|
||||||
|
model.setModifier(SpringApp.getBean(EmployeeService.class).getById(vo.getModifierId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vo.getCloserId() == null) {
|
||||||
|
model.setCloser(null);
|
||||||
|
} else {
|
||||||
|
model.setCloser(SpringApp.getBean(EmployeeService.class).getById(vo.getCloserId()));
|
||||||
|
}
|
||||||
|
|
||||||
// active字段在SalesOrder实体类中不存在,不需要设置
|
// active字段在SalesOrder实体类中不存在,不需要设置
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.ecep.contract.ds.contract.service;
|
package com.ecep.contract.ds.contract.service;
|
||||||
|
|
||||||
|
import com.ecep.contract.ds.customer.model.SalesOrder;
|
||||||
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;
|
||||||
@@ -24,6 +25,8 @@ import com.ecep.contract.util.SpecificationUtils;
|
|||||||
import com.ecep.contract.vo.SalesBillVoucherVo;
|
import com.ecep.contract.vo.SalesBillVoucherVo;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购账单凭证服务
|
* 采购账单凭证服务
|
||||||
*/
|
*/
|
||||||
@@ -141,4 +144,8 @@ public class SalesBillVoucherService extends EntityService<SalesBillVoucher, Sal
|
|||||||
model.setVerifier(employeeService.getById(vo.getVerifierId()));
|
model.setVerifier(employeeService.getById(vo.getVerifierId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<SalesBillVoucher> findAllByOrder(SalesOrder order) {
|
||||||
|
return salesBillVoucherRepository.findAllByOrder(order);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.ecep.contract.ds.customer.model;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.ecep.contract.ds.company.model.Company;
|
||||||
import com.ecep.contract.ds.contract.model.Contract;
|
import com.ecep.contract.ds.contract.model.Contract;
|
||||||
import com.ecep.contract.ds.contract.model.ContractBasedEntity;
|
import com.ecep.contract.ds.contract.model.ContractBasedEntity;
|
||||||
import com.ecep.contract.model.BasedEntity;
|
import com.ecep.contract.model.BasedEntity;
|
||||||
@@ -53,9 +54,35 @@ public class SalesOrder implements IdentityEntity, BasedEntity, ContractBasedEnt
|
|||||||
@ToString.Exclude
|
@ToString.Exclude
|
||||||
private Employee employee;
|
private Employee employee;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单据编号
|
||||||
|
*/
|
||||||
@Column(name = "CODE")
|
@Column(name = "CODE")
|
||||||
private String code;
|
private String code;
|
||||||
|
|
||||||
|
@Column(name = "REF_ID")
|
||||||
|
private int refId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 税率
|
||||||
|
*/
|
||||||
|
@Column(name = "TAX_RATE")
|
||||||
|
private float taxRate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户
|
||||||
|
*/
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "CUSTOMER_ID")
|
||||||
|
@ToString.Exclude
|
||||||
|
private Company customer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户地址
|
||||||
|
*/
|
||||||
|
@Column(name = "CUSTOMER_ADDRESS")
|
||||||
|
private String customerAddress;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 制单人
|
* 制单人
|
||||||
*/
|
*/
|
||||||
@@ -79,8 +106,27 @@ public class SalesOrder implements IdentityEntity, BasedEntity, ContractBasedEnt
|
|||||||
/**
|
/**
|
||||||
* 审核日期
|
* 审核日期
|
||||||
*/
|
*/
|
||||||
@Column(name = "VERIFIER_DATE")
|
@Column(name = "VERIFIED_DATE")
|
||||||
private LocalDate verifierDate;
|
private LocalDate verifierDate;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "MODIFIER_ID")
|
||||||
|
@ToString.Exclude
|
||||||
|
private Employee modifier;
|
||||||
|
|
||||||
|
@Column(name = "MODIFIED_DATE")
|
||||||
|
private LocalDate modifierDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭人
|
||||||
|
*/
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "CLOSER_ID")
|
||||||
|
@ToString.Exclude
|
||||||
|
private Employee closer;
|
||||||
|
|
||||||
|
@Column(name = "CLOSED_DATE")
|
||||||
|
private LocalDate closerDate;
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
@@ -113,23 +159,40 @@ public class SalesOrder implements IdentityEntity, BasedEntity, ContractBasedEnt
|
|||||||
@Override
|
@Override
|
||||||
public SalesOrderVo toVo() {
|
public SalesOrderVo toVo() {
|
||||||
SalesOrderVo vo = new SalesOrderVo();
|
SalesOrderVo vo = new SalesOrderVo();
|
||||||
|
// 基本字段映射
|
||||||
vo.setId(id);
|
vo.setId(id);
|
||||||
|
vo.setCode(code);
|
||||||
|
vo.setRefId(refId);
|
||||||
|
vo.setTaxRate(taxRate);
|
||||||
|
vo.setCustomerAddress(customerAddress);
|
||||||
|
vo.setMakerDate(makerDate);
|
||||||
|
vo.setVerifierDate(verifierDate);
|
||||||
|
vo.setModifierDate(modifierDate);
|
||||||
|
vo.setCloserDate(closerDate);
|
||||||
|
vo.setDescription(description);
|
||||||
|
|
||||||
|
// 关联对象ID映射
|
||||||
if (contract != null) {
|
if (contract != null) {
|
||||||
vo.setContractId(contract.getId());
|
vo.setContractId(contract.getId());
|
||||||
}
|
}
|
||||||
vo.setCode(code);
|
|
||||||
if (employee != null) {
|
if (employee != null) {
|
||||||
vo.setEmployeeId(employee.getId());
|
vo.setEmployeeId(employee.getId());
|
||||||
}
|
}
|
||||||
if (maker != null) {
|
if (maker != null) {
|
||||||
vo.setMakerId(maker.getId());
|
vo.setMakerId(maker.getId());
|
||||||
}
|
}
|
||||||
vo.setMakerDate(makerDate);
|
|
||||||
if (verifier != null) {
|
if (verifier != null) {
|
||||||
vo.setVerifierId(verifier.getId());
|
vo.setVerifierId(verifier.getId());
|
||||||
}
|
}
|
||||||
vo.setVerifierDate(verifierDate);
|
if (customer != null) {
|
||||||
vo.setDescription(description);
|
vo.setCustomerId(customer.getId());
|
||||||
|
}
|
||||||
|
if (modifier != null) {
|
||||||
|
vo.setModifierId(modifier.getId());
|
||||||
|
}
|
||||||
|
if (closer != null) {
|
||||||
|
vo.setCloserId(closer.getId());
|
||||||
|
}
|
||||||
|
|
||||||
// active字段默认为false,在SalesOrderVo类中已经设置
|
// active字段默认为false,在SalesOrderVo类中已经设置
|
||||||
return vo;
|
return vo;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.ecep.contract.ds.customer.model;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.ecep.contract.ds.contract.model.ContractItem;
|
||||||
import com.ecep.contract.model.BasedEntity;
|
import com.ecep.contract.model.BasedEntity;
|
||||||
import com.ecep.contract.model.IdentityEntity;
|
import com.ecep.contract.model.IdentityEntity;
|
||||||
import com.ecep.contract.model.Voable;
|
import com.ecep.contract.model.Voable;
|
||||||
@@ -69,6 +70,11 @@ public class SalesOrderItem implements IdentityEntity, BasedEntity, Voable<Sales
|
|||||||
@Column(name = "EX_TAX_PRICE")
|
@Column(name = "EX_TAX_PRICE")
|
||||||
private double exclusiveTaxPrice;
|
private double exclusiveTaxPrice;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "CONTRACT_ITEM_ID")
|
||||||
|
@ToString.Exclude
|
||||||
|
private ContractItem contractItem;
|
||||||
|
|
||||||
@Column(name = "START_DATE")
|
@Column(name = "START_DATE")
|
||||||
private LocalDate startDate;
|
private LocalDate startDate;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user