diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java
index b35909df0..e6cc462bf 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java
@@ -427,10 +427,8 @@ public class ContractManageApplicationService {
/**
* 按单据类型取合同结算行上的计费单价(计费策略展开的 isFee 项)。
- *
多条结算明细共用同一计费策略(与 {@link #getSubjectAndPrice} 一致:按计费策略 id 先解析 {@link BillingRulesPO},
- * 再以 {@code billing_rules_id} 取计费参数)时只展开一次,避免前端重复单价列。
- * 同一策略的参数 JSON 中若存在重复的 isFee 槽位(相同 sort/chargingId),或历史数据多套规则 id 实际等价,
- * 返回列表会再做一次槽位级去重,避免出现两条「进出仓操作费单价」等同名列。
+ * 多条结算明细共用同一计费策略(accounting_strategy_id 相同)时,只展开一次策略参数,
+ * 避免前端出现重复的单价列。
*/
public List getPrice(String documentTypeCode, String settlementCustomersCode,Long organizationId,Long topOrganizationId) {
List result = new ArrayList<>();
@@ -444,64 +442,48 @@ public class ContractManageApplicationService {
.filter(item -> contractDetailContainsDocumentType(item.getDocumentTypeCode(), documentTypeCode))
.collect(Collectors.toList());
if (contractManageDetailPOs != null && contractManageDetailPOs.size() > 0) {
- Set expandedBillingRulesIds = new HashSet<>();
- /* 计费规则 + 公式槽位,避免参数 JSON 或多次展开重复同一单价列 */
- Set addedFeeSlots = new HashSet<>();
+ Set expandedAccountingStrategyIds = new HashSet<>();
for (ContractManageDetailPO contractManageDetailPO : contractManageDetailPOs) {
Long accountingStrategyId = contractManageDetailPO.getAccountingStrategyId();
- if (accountingStrategyId == null) {
+ if (accountingStrategyId == null || !expandedAccountingStrategyIds.add(accountingStrategyId)) {
continue;
}
- BillingRulesPO billingRulesPO = contractManageDetailMapper.getBillingRules(accountingStrategyId);
- if (billingRulesPO == null || billingRulesPO.getBillingRulesId() == null) {
- continue;
- }
- Long billingRulesId = billingRulesPO.getBillingRulesId();
- if (!expandedBillingRulesIds.add(billingRulesId)) {
- continue;
- }
- List billingParams = contractManageDetailMapper.getBillingParams(billingRulesId);
+ List billingParams = contractManageDetailMapper.getBillingParams(accountingStrategyId);
if (billingParams != null && billingParams.size() > 0) {
- BillingParamsPO billingParam = billingParams.get(0);
- String billingParamsJson = billingParam.getBillingParamsJson();
- String preSetRules = billingParam.getPreSetRules();
- Long billingParamsId = billingParam.getBillingParamsId();
- List