出入库费用查询过滤
This commit is contained in:
+25
-2
@@ -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 {
|
||||
|
||||
/**
|
||||
* 入库/出库费用登记等场景:按仓储合同「仓库进出仓单」结算行取科目(二级编码优先,否则一级),再关联费用科目主数据。
|
||||
* <p>科目范围以合同结算设置为准,不按费用科目主数据的 in_order_display/out_order_display 再筛,避免合同有 7 条主数据未勾「入库显示」却只剩几条的情况。</p>
|
||||
* <p>科目范围以合同结算设置为准;若 {@code expenseAccountDO.inOrderDisplay} 或 {@code expenseAccountDO.outOrderDisplay} 非空,
|
||||
* 再按主数据「入库单是否固定显示 / 出库单是否固定显示」(0-否 1-是)与入参相等过滤,二者同时传则同时满足(AND)。</p>
|
||||
* settlementCustomersCode 不传或为空时使用通用仓储合同。
|
||||
*/
|
||||
public List<ExpenseAccountPO> 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<ExpenseAccountPO> 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询费用科目列表
|
||||
*/
|
||||
|
||||
+1
-1
@@ -164,7 +164,7 @@ public class ExpenseAccountDTO extends BaseVOEntity{
|
||||
/**
|
||||
* 为 true 时从仓储合同「结算设置」取费用科目(入库/出库费用登记等)
|
||||
*/
|
||||
@ApiModelProperty("是否按合同结算设置查询费用科目(入库/出库费用登记,出库建议配合 outOrderDisplay=1)")
|
||||
@ApiModelProperty("是否按合同结算设置查询费用科目(入库/出库费用登记;为 true 时可传 inOrderDisplay=1 或 outOrderDisplay=1 再按主数据入库/出库显示过滤)")
|
||||
private Boolean contractSettlementQuery;
|
||||
|
||||
@ApiModelProperty("结算主体编码(通常为货主编码);不传则按通用仓储合同的结算设置取科目")
|
||||
|
||||
+5
-4
@@ -53,9 +53,8 @@ public class ExpenseAccountApi extends BaseController{
|
||||
*
|
||||
* <p>入库/出库费用登记等场景传 {@code contractSettlementQuery=true}(与单据类型「仓库进出仓单」合同结算行一致),
|
||||
* 科目来源、结算主体为空走通用合同等逻辑<strong>入库与出库相同</strong>。
|
||||
* 该路径<strong>仅以合同结算行</strong>为准拉取费用科目主数据,<strong>不会</strong>再按 {@code inOrderDisplay}/{@code outOrderDisplay} 二次过滤,
|
||||
* 以免合同配置了多条但主数据未勾选「入库/出库显示」导致条数被裁掉;
|
||||
* 若在其它场景需要按展示位收窄列表,请勿传 {@code contractSettlementQuery=true},走默认 {@code queryList} 分页查询即可。</p>
|
||||
* 先按合同结算行取科目,再关联主数据;若请求中传入 {@code inOrderDisplay} 或 {@code outOrderDisplay}(0-否 1-是),
|
||||
* 则再按主数据「入库单 / 出库单是否固定显示」与入参相等过滤(二者都传则同时满足)。不传则不在此维度过滤。</p>
|
||||
*/
|
||||
@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<ExpenseAccountPO> contractList =
|
||||
expenseAccountApplicationService.queryListFromContractWarehouseInOutSettlement(
|
||||
contractQueryDO, expenseAccountDTO.getSettlementCustomersCode());
|
||||
|
||||
Reference in New Issue
Block a user