using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YLErp.Helpers
{
///
/// 债券价格展示态 ↔ 入库态 统一转换入口。
/// ============================================================================
/// 背景:债券价格习惯用"面值的百分比"报价(如全价 99.50 = 面值 100 的 99.5%)。
/// 入库时统一存为小数形式(0.995),展示时再 ×100 还原为 99.5。
///
/// 过去这组转换散落在 11+ 个文件、87 处,多数用 ConsGlobal.bondPriceMultiple/
/// bondShowPriceMultiple,但有 4 处用字面量 *0.01m / *100 绕过常量(改常量值时不会跟随,
/// 极易引入 Bug)。本类收敛所有调用入口,杜绝散落。
///
/// 命名口径(见《互换价格字段命名规范决策文档》):
/// ToStorage = 展示态(99.5) → 入库态(0.995) 即 × bondPriceMultiple(0.01)
/// ToDisplay = 入库态(0.995) → 展示态(99.5) 即 × bondShowPriceMultiple(100)
/// ============================================================================
///
public static class BondPriceConverter
{
///
/// 展示态 → 入库态。债券报价(如 99.5)转为库内小数(0.995)。
/// 用于:成交流水导入、EOD 价格缓存、债券付息计算等入库/计算场景。
///
/// 展示态价格(面值百分比形式,如 99.5)
/// 入库态价格(小数形式,如 0.995)
public static decimal ToStorage(decimal displayPrice)
{
return displayPrice * ConsGlobal.bondPriceMultiple;
}
///
/// 入库态 → 展示态。库内小数(0.995)转为债券报价(99.5)。
/// 用于:列表查询、详情展示、报表导出等展示场景。
///
/// 入库态价格(小数形式,如 0.995)
/// 展示态价格(面值百分比形式,如 99.5)
public static decimal ToDisplay(decimal storagePrice)
{
return storagePrice * ConsGlobal.bondShowPriceMultiple;
}
/// 可空重载:null 保持 null 语义(与原 *= ConsGlobal.bondPriceMultiple 行为一致)
public static decimal? ToStorage(decimal? displayPrice)
{
return displayPrice.HasValue ? displayPrice.Value * ConsGlobal.bondPriceMultiple : displayPrice;
}
/// 可空重载:null 保持 null 语义(与原 *= ConsGlobal.bondShowPriceMultiple 行为一致)
public static decimal? ToDisplay(decimal? storagePrice)
{
return storagePrice.HasValue ? storagePrice.Value * ConsGlobal.bondShowPriceMultiple : storagePrice;
}
}
}