diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java
index e50c442e8..c73322b87 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java
@@ -31,6 +31,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -53,7 +54,8 @@ public class ExpenseAccountApplicationService {
/**
* 入库/出库费用登记等场景:按仓储合同「仓库进出仓单」结算行取科目(二级编码优先,否则一级),再关联费用科目主数据。
- *
科目范围以合同结算设置为准,不按费用科目主数据的 in_order_display/out_order_display 再筛,避免合同有 7 条主数据未勾「入库显示」却只剩几条的情况。
+ * 科目范围以合同结算设置为准;若 {@code expenseAccountDO.inOrderDisplay} 或 {@code expenseAccountDO.outOrderDisplay} 非空,
+ * 再按主数据「入库单是否固定显示 / 出库单是否固定显示」(0-否 1-是)与入参相等过滤,二者同时传则同时满足(AND)。
* settlementCustomersCode 不传或为空时使用通用仓储合同。
*/
public List queryListFromContractWarehouseInOutSettlement(ExpenseAccountDO expenseAccountDO, String settlementCustomersCode) {
@@ -71,19 +73,40 @@ public class ExpenseAccountApplicationService {
ContractManageApplicationService.DOCUMENT_TYPE_CODE_WAREHOUSE_IN_OUT_ORDER);
log.info("按合同取费用科目编码:topOrgIdForExpense={}, 命中结算行科目数={}", topOrgIdForExpense,
orderedCodes != null ? orderedCodes.size() : 0);
+ boolean filterIn = expenseAccountDO.getInOrderDisplay() != null;
+ boolean filterOut = expenseAccountDO.getOutOrderDisplay() != null;
+ if (filterIn || filterOut) {
+ log.info("合同科目叠加主数据出入库显示过滤:inOrderDisplay={}, outOrderDisplay={}",
+ expenseAccountDO.getInOrderDisplay(), expenseAccountDO.getOutOrderDisplay());
+ }
List result = new ArrayList<>();
for (String code : orderedCodes) {
if (StringUtils.isEmpty(code)) {
continue;
}
ExpenseAccountPO po = expenseAccountDomainService.getInfoByCode2(code.trim(), topOrgIdForExpense);
- if (po != null && po.getExpenseAccountId() != null) {
+ if (po != null && po.getExpenseAccountId() != null && passWarehouseInOutDisplayFilter(po, expenseAccountDO)) {
result.add(po);
}
}
return result;
}
+ /**
+ * 合同路径下可选:与主数据 in_order_display / out_order_display 一致才保留(入参为 null 的维度不参与过滤)。
+ */
+ private static boolean passWarehouseInOutDisplayFilter(ExpenseAccountPO po, ExpenseAccountDO filter) {
+ if (filter.getInOrderDisplay() != null
+ && !Objects.equals(po.getInOrderDisplay(), filter.getInOrderDisplay())) {
+ return false;
+ }
+ if (filter.getOutOrderDisplay() != null
+ && !Objects.equals(po.getOutOrderDisplay(), filter.getOutOrderDisplay())) {
+ return false;
+ }
+ return true;
+ }
+
/**
* 分页查询费用科目列表
*/
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountDTO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountDTO.java
index d0f4045fe..11ba9b86f 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountDTO.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountDTO.java
@@ -164,7 +164,7 @@ public class ExpenseAccountDTO extends BaseVOEntity{
/**
* 为 true 时从仓储合同「结算设置」取费用科目(入库/出库费用登记等)
*/
- @ApiModelProperty("是否按合同结算设置查询费用科目(入库/出库费用登记,出库建议配合 outOrderDisplay=1)")
+ @ApiModelProperty("是否按合同结算设置查询费用科目(入库/出库费用登记;为 true 时可传 inOrderDisplay=1 或 outOrderDisplay=1 再按主数据入库/出库显示过滤)")
private Boolean contractSettlementQuery;
@ApiModelProperty("结算主体编码(通常为货主编码);不传则按通用仓储合同的结算设置取科目")
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/expenseAccount/ExpenseAccountApi.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/expenseAccount/ExpenseAccountApi.java
index e35106693..dfdec8e29 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/expenseAccount/ExpenseAccountApi.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/expenseAccount/ExpenseAccountApi.java
@@ -53,9 +53,8 @@ public class ExpenseAccountApi extends BaseController{
*
* 入库/出库费用登记等场景传 {@code contractSettlementQuery=true}(与单据类型「仓库进出仓单」合同结算行一致),
* 科目来源、结算主体为空走通用合同等逻辑入库与出库相同。
- * 该路径仅以合同结算行为准拉取费用科目主数据,不会再按 {@code inOrderDisplay}/{@code outOrderDisplay} 二次过滤,
- * 以免合同配置了多条但主数据未勾选「入库/出库显示」导致条数被裁掉;
- * 若在其它场景需要按展示位收窄列表,请勿传 {@code contractSettlementQuery=true},走默认 {@code queryList} 分页查询即可。
+ * 先按合同结算行取科目,再关联主数据;若请求中传入 {@code inOrderDisplay} 或 {@code outOrderDisplay}(0-否 1-是),
+ * 则再按主数据「入库单 / 出库单是否固定显示」与入参相等过滤(二者都传则同时满足)。不传则不在此维度过滤。
*/
@ApiOperation("查询费用科目列表")
@GetMapping("/list")
@@ -71,7 +70,9 @@ public class ExpenseAccountApi extends BaseController{
if (Boolean.TRUE.equals(expenseAccountDTO.getContractSettlementQuery())) {
ExpenseAccountDO contractQueryDO = new ExpenseAccountDO();
BeanUtils.copyProperties(expenseAccountDTO, contractQueryDO);
- logger.info("按合同结算设置查询费用科目,settlementCustomersCode={}", expenseAccountDTO.getSettlementCustomersCode());
+ logger.info("按合同结算设置查询费用科目,settlementCustomersCode={},inOrderDisplay={},outOrderDisplay={}",
+ expenseAccountDTO.getSettlementCustomersCode(),
+ expenseAccountDTO.getInOrderDisplay(), expenseAccountDTO.getOutOrderDisplay());
List contractList =
expenseAccountApplicationService.queryListFromContractWarehouseInOutSettlement(
contractQueryDO, expenseAccountDTO.getSettlementCustomersCode());