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());