250c41b9259c3b2bd3d12aa8601d6bcac8685c2d
为后续拆三类腿做准备,新增 FR007 取价的独立接口层(参考 QuantLib IborIndex
分层),本次零生产代码改动,全部为新增小文件。
新增文件(取价接缝,供后续 SwapDealService 6 处 inline 取价迁移用):
- Framework/YLErp.Core/Interest/IIndexFixer.cs
接口定义:给定取价日和标的代码返回当日利率,取价与计息解耦
- Framework/YLErp.Core/Interest/IndexFixerBase.cs
取价日计算工具:收敛原散落 6 处的 GetNonHolidayDefore(date.AddDays(rule))
- YLErpDAL/Modules/SwapModule/Fr007IndexFixer.cs
生产实现 + GetFixingOrThrow 辅助方法,独立文件便于单测
测试清理(删除基于错误假设的测试):
- 删除 SwapFixedInterestLegClosePercentBugTest.cs 整个文件
该文件假设'固定值腿利息应随平仓比例线性缩放',但固定值是合同写死的、
永远不随平仓比例变化。d1badfe4 的'修复'本身才是错的,当前分支已正确回退
- 修正 SwapUnwindPrepayPrincipalBugTdd.cs 固定值测试方法
断言从'应=Fix×0.5'改为'恒=Fix不随比例变化',对齐正确的业务定义
已知失败(非本次引入,留待后续与拆腿一起修):
- BondTrsAutoSwapScenarioTest 的 AS_001/004/008/009/010/011 共 6 个
原因:SaveAutoSwapDeal 直接调 AddClientCashInCashOut(非virtual)绕过
AddClientCash(virtual)封装,无库环境抛'客户信息未找到'。
从 096d2609 引入时即失败,需 AddClientCashInCashOut 加 virtual + 客户数据
mock,与拆腿那次可测性改造一起做
场外交易管理系统 (YLErp TRS)
一个基于 ASP.NET Core 的场外衍生品交易管理系统,支持场外期权、权益互换(TRS)、利率互换等多种场外衍生品业务的全生命周期管理。
项目简介
本项目是一个完整的金融场外交易管理系统(OTC - Over The Counter),主要用于金融机构管理场外衍生品交易,包括客户管理、交易录入、风险管理、结算对账、资金监控等核心功能。系统支持多公司配置,可适配不同券商和期货公司的业务需求。
核心功能
- 客户管理:完整的客户信息管理,包括客户基本信息、适当性评估、KYC 合规、资质管理等
- 交易管理:支持场外期权、权益互换、利率互换等多种衍生品交易的全流程管理
- 风险管理:实时风险监控、保证金管理、限额控制、风险预警
- 结算对账:日终结算、交易确认书生成、结算报告、外部对账
- 资金管理:出入金管理、资金监控、预付金管理、授信管理
- 报表分析:多维度统计分析、监管报表、数据导出
技术栈
- 后端框架:ASP.NET Core 6.0
- 前端技术:Razor Views + jQuery + jqGrid + SignalR
- ORM:Entity Framework Core 6.0
- 数据库:Oracle / MySQL
- 缓存:Redis
- 消息队列:Kafka
- 依赖注入:Autofac
- 日志:NLog
- 验证码:Lazy.Captcha.Core
- Excel/Word:YLErp.Office, EPPlus, NPOI
环境要求
开发环境
- 操作系统:Windows 10/11 或 Linux (CentOS/Ubuntu)
- .NET SDK:.NET 6.0 SDK
- IDE:Visual Studio 2022 (推荐) 或 VS Code
- 数据库:
- Oracle Database 11g 或更高版本(主数据库)
- MySQL 5.7 或更高版本(辅助数据库)
- 缓存:Redis 5.0 或更高版本
- 消息队列:Kafka 2.0 或更高版本
运行时环境
- 操作系统:Windows Server 2016+ 或 Linux (CentOS 7+/Ubuntu 18.04+)
- 运行时:ASP.NET Core 6.0 Runtime
- 内存:建议 4GB 以上
- 磁盘:建议 50GB 以上可用空间
安装步骤
1. 克隆代码
git clone http://infra.yiliantech.com/gitlab/otc-dev/otcdms.git
cd zszq-trs
2. 配置数据库
Oracle 数据库配置
- 安装 Oracle Database
- 创建数据库用户并授权
-- 示例 SQL
CREATE USER ylclient IDENTIFIED BY password;
GRANT CONNECT, RESOURCE TO ylclient;
- 执行数据库初始化脚本
# 数据库脚本位于 Framework/YLErp.Core/DBScripts/
sqlplus ylclient/password @Framework/YLErp.Core/DBScripts/init.sql
MySQL 数据库配置
- 安装 MySQL Server
- 创建数据库
CREATE DATABASE yldb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'yluser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON yldb.* TO 'yluser'@'%';
FLUSH PRIVILEGES;
3. 配置应用设置
- 复制并修改配置文件
cd YLErpWeb
cp appsettings.json appsettings.local.json
- 编辑
appsettings.local.json,添加数据库连接字符串等配置
{
"ConnectionStrings": {
"ylclient": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User Id=ylclient;Password=yourpassword;",
"yldb": "Server=localhost;Port=3306;Database=yldb;User=yluser;Password=yourpassword;"
},
"RedisConfig": {
"ConnectionString": "localhost:6379,password=,defaultDatabase=0"
},
"KafkaConfig": {
"BootstrapServers": "localhost:9092",
"GroupId": "ylerp-group"
}
}
4. 安装依赖
# 使用 dotnet restore 恢复 NuGet 包
dotnet restore YLerpbase.sln
# 或使用 Visual Studio 打开解决方案,IDE 会自动恢复
5. 编译项目
方式一:使用 Visual Studio
- 打开
YLerpbase.sln - 选择配置为
Release - 右键解决方案 → "生成解决方案"
方式二:使用命令行
# 编译整个解决方案
dotnet build YLerpbase.sln --configuration Release
# 或使用提供的编译脚本
.\Publish.bat
6. 配置第三方依赖
- 第三方定价库:将
ThirdPartyLibs/目录下的 DLL 文件复制到编译输出目录 - Excel 模板:确保
YLErpWeb/App_Docs/目录下的导入/导出模板文件完整
7. 运行项目
开发环境运行
cd YLErpWeb
dotnet run
或在 Visual Studio 中按 F5 启动调试
生产环境部署
Windows:
# 发布项目
dotnet publish YLErpWeb/YLErpWeb.csproj --configuration Release --output ./publish
# 运行发布的应用程序
cd publish
dotnet YLErpWeb.dll
Linux:
# 使用 MSBuild 发布(参考 Publish.bat 中的配置)
dotnet publish YLErpWeb/YLErpWeb.csproj --configuration Release --runtime linux-x64 --self-contained false
# 使用启动脚本
cp YLErpWeb/start.prod.sh ./publish/
cd publish
chmod +x start.prod.sh
./start.prod.sh
使用示例
启动应用
应用启动后,默认监听端口 5000(开发环境),访问:
Getting started
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
不同公司的配置会影响:
- 界面显示字段
- 业务流程
- 报表模板
- 接口对接
权限配置
权限通过 Authorization 属性控制,主要权限标识:
// 示例:控制器权限控制
[Authorize(Policy = "客户管理-客户查看")]
public class ClientController : Controller
{
// ...
}
常见问题
编译错误
问题:找不到引用的 DLL 文件
解决:
- 确保
ThirdPartyLibs/目录存在且包含所有必需的 DLL - 检查项目文件中的
<HintPath>路径是否正确 - 执行
dotnet restore重新恢复依赖
数据库连接失败
问题:无法连接到 Oracle 数据库
解决:
- 检查 Oracle 服务是否启动
- 验证连接字符串格式
- 确保已安装 Oracle.ManagedDataAccess.Core 包
- 检查防火墙设置
NPE 空指针异常
问题:运行时出现 NullReferenceException
解决:
- 检查配置文件是否完整
- 确保数据库表结构正确
- 查看日志文件定位具体错误位置
缓存连接失败
问题:Redis 连接超时
解决:
- 检查 Redis 服务是否运行
- 验证 Redis 连接字符串
- 检查 Redis 防火墙配置
- 确认 Redis 密码是否正确
开发指南
代码规范
- 遵循 C# 编码规范
- 使用 XML 文档注释
- Controller 方法添加权限注释
- 新增功能编写单元测试
提交规范
提交信息格式:
<类型>: <简短描述>
详细描述(可选)
类型:
- feat: 新功能
- fix: Bug 修复
- docs: 文档更新
- style: 代码格式
- refactor: 重构
- test: 测试相关
- chore: 构建/工具相关
分支策略
master:主分支,生产环境代码develop:开发分支feature/*:功能分支hotfix/*:紧急修复分支
测试
运行单元测试:
dotnet test UnitTestProject/UnitTestProject.csproj
贡献指南
欢迎提交 Issue 和 Pull Request!
贡献流程
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'feat: Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
代码审查
- 确保 CI 测试通过
- 代码符合项目规范
- 添加必要的单元测试
- 更新相关文档
报告 Bug
提交 Issue 时请提供:
- 环境信息(操作系统、.NET 版本)
- 复现步骤
- 错误日志
- 预期行为
许可证
本项目为内部项目,版权归公司所有。
联系方式
- 项目负责人:[请填写]
- 技术支持:[请填写]
- GitLab:http://infra.yiliantech.com/gitlab/otc-dev/otcdms
附录
相关文档
- 客户列表功能分析文档
- 出入金和资金记录详细需求文档
- 项目文档/ - 更多技术文档
外部依赖
- EF Core 文档:https://docs.microsoft.com/ef/core/
- ASP.NET Core 文档:https://docs.microsoft.com/aspnet/core/
- Kafka 文档:https://kafka.apache.org/documentation/
- Redis 文档:https://redis.io/documentation
更新日志
请查看项目文档目录下的更新日志文件。
最后更新:2026-03-20
Languages
C#
48%
JavaScript
38.9%
HTML
10.8%
CSS
2.2%