From f6533cd3f2bad84ea8d7b97ad05bb3a7eae2cb8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Fri, 15 Aug 2025 17:36:55 +0800 Subject: [PATCH 01/27] =?UTF-8?q?TRS-ZS-564=20=E6=8A=A5=E9=80=81=E6=9C=88?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../导出模板/月报基础数据债券收益互换.xlsx | Bin 0 -> 24512 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 YLErpWeb/App_Docs/导出模板/月报基础数据债券收益互换.xlsx diff --git a/YLErpWeb/App_Docs/导出模板/月报基础数据债券收益互换.xlsx b/YLErpWeb/App_Docs/导出模板/月报基础数据债券收益互换.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9affa739e6e1dc2aa5825f9ed12bb071f042bc6f GIT binary patch literal 24512 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�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 literal 0 HcmV?d00001 From d8643aab26e3716a8284c14ceb4e603e247847d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Fri, 15 Aug 2025 17:42:58 +0800 Subject: [PATCH 02/27] =?UTF-8?q?TRS-ZS-564=20=E6=9C=88=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Framework/YLErp.Cache/YLRedisCache.cs | 6 +- .../ExtendReport/ExtendReportBaseService.cs | 4 + .../ZheShang/SwapTradeMothReport.cs | 149 +++++++++ .../ZheShang/SwapTradeMothReportModel.cs | 116 +++++++ YLErpWeb/App/Startup.cs | 11 +- YLErpWeb/App_Data/Menus.txt | 1 + .../导出模板/月报基础数据债券收益互换.xlsx | Bin 24512 -> 24474 bytes .../Controllers/supervise_reportController.cs | 2 +- .../supervise_report/ExtendReport.cshtml | 308 +++++++++--------- YLErpWeb/YLErpWeb.csproj | 3 + 10 files changed, 436 insertions(+), 164 deletions(-) create mode 100644 YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs create mode 100644 YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReportModel.cs diff --git a/Framework/YLErp.Cache/YLRedisCache.cs b/Framework/YLErp.Cache/YLRedisCache.cs index 6097729a..c88e6e24 100644 --- a/Framework/YLErp.Cache/YLRedisCache.cs +++ b/Framework/YLErp.Cache/YLRedisCache.cs @@ -183,7 +183,11 @@ namespace YLErp.Cache public bool BatchDelete(string pattern) { var keys = QueryKeys(pattern); - return db.KeyDelete(keys.ToArray())>0; + foreach (var key in keys) + { + db.KeyDelete(key); // 逐个删除,规避跨槽位问题 + } + return true; } /// diff --git a/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ExtendReportBaseService.cs b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ExtendReportBaseService.cs index 7581a03a..f7461754 100644 --- a/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ExtendReportBaseService.cs +++ b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ExtendReportBaseService.cs @@ -3,6 +3,7 @@ using YLErp.Model; using YLErp.Modules.SuperviseReportModule.ExtendReport.Common; using YLErp.Modules.SuperviseReportModule.ExtendReport.GeLin; using YLErp.Modules.SuperviseReportModule.ExtendReport.ZheQi; +using YLErp.Modules.SuperviseReportModule.ExtendReport.ZheShang; namespace YLErp.Modules.SuperviseReportModule.ExtendReport { @@ -48,6 +49,9 @@ namespace YLErp.Modules.SuperviseReportModule.ExtendReport case "客户资金记录报表": service = new CustomerFundsReport(optUser, req); break; + case "月报基础数据债券收益互换": + service = new SwapTradeMothReport(optUser, req); + break; default: throw new ServiceException("报表未实现"); } diff --git a/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs new file mode 100644 index 00000000..a3025d88 --- /dev/null +++ b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs @@ -0,0 +1,149 @@ +using BaseOUDAL; +using CsvHelper; +using Org.BouncyCastle.Ocsp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using YLErp.DBModels; +using YLErp.DBModels.Consts; +using YLErp.DBModels.Enums; +using YLErp.Model; +using YLErp.Modules.SuperviseReportModule.ExtendReport.ZheQi; + +namespace YLErp.Modules.SuperviseReportModule.ExtendReport.ZheShang +{ + public class SwapTradeMothReport: SimpleExtendReportBaseService + { + public SwapTradeMothReport(OptUserInfo userInfo, SuperviseReportReq req) : base(userInfo, req) + { + } + public override string TemplateName => "月报基础数据债券收益互换.xlsx"; + public override string TargetFileName => "月报基础数据债券收益互换"+ base.RequestInfo.ValueDate.ToString("yyyyMM") +".xlsx"; + public override string[] SheetNames => new[] { "本月末存量业务明细" }; + public override object SearchReportInfo(string sheetName) + { + var dealList = new List(); + var predicate = PredicateBuilder.Create(n => !n.Invalid && n.PosiQuantity > 0); + var tradePredicate = PredicateBuilder.Create(n => n.TradeType=="收益互换" + && n.ValidState != "InValid"); + // 获取当月最后一次日期 + var currentMonth = new DateTime(base.RequestInfo.ValueDate.Year, base.RequestInfo.ValueDate.Month, 1); + var nextMonth = currentMonth.AddMonths(1); + var valueDate = DbContext.eodStatus + .Where(t => t.Status == "已收盘" && t.ValueDate >= currentMonth && t.ValueDate < nextMonth) + .OrderByDescending(t => t.ValueDate) + .Select(t => t.ValueDate) + .FirstOrDefault(); + + // 如果没有找到当月的收盘日期,则使用请求中的日期 + if (valueDate == default(DateTime)) + { + valueDate = base.RequestInfo.ValueDate; + } + predicate = predicate.And(x => x.ValueDate == valueDate); + tradePredicate = tradePredicate.And(x => valueDate >= x.StartDate); + var positionQuery = DbContext.eod_swap_position.Where(predicate); + var tradeQuery = DbContext.trade.Where(tradePredicate); + var query = from position in positionQuery + join td in tradeQuery on position.SwapTradeId equals td.id + join tcrConfirm in DbContext.trade_contract_r.Where(O => O.Type == ContractTypeEnum.Trade && O.IsValid) on td.id equals tcrConfirm.TradeId into tcrConfirms + from tcrConfirm in tcrConfirms.DefaultIfEmpty() + select new EodSwapPositionResponse + { + position = position, + ClientName = td.ClientName, + ConfrimNo = tcrConfirm.ContractCode, + TradeNumber = td.TradeNumber, + StructureType = td.StructureType, + UnwindDate = td.UnWindDate, + TradeStatus = td.TradeStatus + }; + var list= query.ToList(); + var eodSwapList= DbContext.eod_swap.Where(s=>s.ValueDate==valueDate).AsNoTracking().ToList(); + foreach (var item in list) + { + var obj = new SwapTradeMothReportModel(); + + // 获取标的名称 + string underlyingName = ""; + if (!string.IsNullOrEmpty(item.position?.UnderlyingCode)) + { + var underlying = DbContext.underlying_manager.FirstOrDefault(s => s.UnderlyingCode == item.position.UnderlyingCode); + underlyingName = underlying?.UnderlyingName ?? ""; + } + + // 填充 SwapTradeMothReportModel 对象 + obj.NameOfSecuritiesCompany = ""; // 报送机构名称 + obj.NameOfCounterparty = item.ClientName; // 交易对手方名称 + obj.NameOfCounterpartyProduct = ""; // 交易对手产品名称,如果有需要从其他地方获取 + obj.TransactionConfirmationNumber = item.ConfrimNo; // 交易确认书编号 + var eodSwap= eodSwapList.FirstOrDefault(s => s.SwapTradeId == item.position.SwapTradeId); + obj.NotionalPrincipalAmountL = eodSwap.NotionalValueLong; + obj.SNotionalPrincipalAmount = eodSwap.NotionalValueShort; + obj.BusinessType = obj.NotionalPrincipalAmountL>0? "11":"12"; + obj.LongPositionContractValue = obj.NotionalPrincipalAmountL > 0? eodSwap.PostionValue:0; + obj.ShortPositionContractValue = obj.SNotionalPrincipalAmount > 0 ? eodSwap.PostionValue:0; + // 设置维持保证金比例 + var maitainMargin = eodSwap.PostionMarginGain+ eodSwap.PostionMarginLoss; + var MaitainMarginRation= eodSwap.NotionalValue==0?0: maitainMargin / eodSwap.NotionalValue; + obj.MaitainMarginRation =Math.Round(MaitainMarginRation*100,2,MidpointRounding.AwayFromZero).ToString()+"%"; // 需要从其他地方获取维持保证金比例 + /** + * 校验规则: + 当选择“场外期权”时,“期权费(非年化)”、“期权标的小类(场外期权填写)” 和“期权类型” 三项必填; + 当选择“收益互换”类型时,“收益互换标的小类(收益互换填写)”必填 + + 11:收益互换(客户多头) + 12:收益互换(客户空头) + 13:多空组合收益互换 + 14:其他收益互换 + 02:场外期权 + */ + + // 名义本金/多头名义本金和空头名义本金 + if (item.position != null) + { + // 设置起始日和到期日 + obj.StartDay = item.position.PosiStartDate.ToString("yyyy-MM-dd"); + obj.DueDate = item.position.PosiMatuirityDate.Value.ToString("yyyy-MM-dd"); + // 设置标的信息 + obj.UndrlygAssetCode = item.position.UnderlyingCode; + obj.UndrlygAssetName = underlyingName; // 使用前面获取的标的名称 + obj.SumInvestmentTargetType = ""; // 标的类型,可能需要根据实际情况调整 + obj.UndrlygAssetTradgPlc = ""; // 标的交易场所,可能需要根据实际情况调整 + /** + * 校验规则:当“业务类型”为“收益互换”时,必填 + 0:股票 + 1:股指 + 2:北交所/新三板挂牌股票 + 3:香港股票 + 4:香港股指 + 5:基金及基金专户 + 6:债券 + 7:黄金期货 + 8:国债期货 + 9:股指期货 + 10:其他期货 + 11:黄金现货 + 12:其他现货 + 13:境外期货 + 14:境外现货 + 15:境外股票 + 16:境外股指 + 17:汇率 + 18:利率 + 99:其他标的 + */ + obj.ExchangeSumInvestmentTargetType = "6"; // 收益互换标的小类 + } + dealList.Add(obj); + } + return new + { + DataDate = RequestInfo.ValueDate.ToString("yyyy-MM"), + DealList = dealList + }; + } + } +} diff --git a/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReportModel.cs b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReportModel.cs new file mode 100644 index 00000000..e2dff822 --- /dev/null +++ b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReportModel.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace YLErp.Modules.SuperviseReportModule.ExtendReport.ZheShang +{ + public class SwapTradeMothReportModel + { + /// + /// 报送机构名称(全称) + /// + public string NameOfSecuritiesCompany { get; set; } + + /// + /// 交易对手方名称(全称) + /// + public string NameOfCounterparty { get; set; } + + /// + /// 交易对手产品名称 + /// + public string NameOfCounterpartyProduct { get; set; } + + /// + /// 交易确认书编号(报告库编号) + /// + public string TransactionConfirmationNumber { get; set; } + + /// + /// 业务类型 (如场外期权/收益互换) + /// + public string BusinessType { get; set; } + + /// + /// 名义本金/多头名义本金 (元) + /// + public decimal NotionalPrincipalAmountL { get; set; } + + /// + /// 空头名义本金(元) (多空组合填写) + /// + public decimal? SNotionalPrincipalAmount { get; set; } + + /// + /// 起始日(T日) + /// + public string StartDay { get; set; } + + /// + /// 到期日 + /// + public string DueDate { get; set; } + + /// + /// 标的类型 + /// + public string SumInvestmentTargetType { get; set; } + + /// + /// 标的名称 + /// + public string UndrlygAssetName { get; set; } + + /// + /// 标的编码 + /// + public string UndrlygAssetCode { get; set; } + + /// + /// 标的交易场所 + /// + public string UndrlygAssetTradgPlc { get; set; } + + /// + /// 场外期权标的小类 (当业务类型为场外期权时填写) + /// + public string OptionSumInvestmentTargetType { get; set; } + + /// + /// 收益互换标的小类 (当业务类型为收益互换时填写) + /// + public string ExchangeSumInvestmentTargetType { get; set; } + + /// + /// 期权费(非年化)(%) (场外期权填写) + /// + public decimal? OptionFee { get; set; } + + /// + /// 期权类型 (场外期权填写) + /// + public string OptionType { get; set; } + + /// + /// 本月末维持保证金比例(%) + /// + public string MaitainMarginRation { get; set; } + + /// + /// 标的相关系数 (特殊字段,根据备注"不填"处理) + /// + public decimal? CorrelationCoefficient { get; set; } = null; + + /// + /// 多头合约价值(元) + /// + public decimal LongPositionContractValue { get; set; } + + /// + /// 空头合约价值(元) + /// + public decimal ShortPositionContractValue { get; set; } + } +} diff --git a/YLErpWeb/App/Startup.cs b/YLErpWeb/App/Startup.cs index f2a3e36d..a1b8d0b1 100644 --- a/YLErpWeb/App/Startup.cs +++ b/YLErpWeb/App/Startup.cs @@ -53,14 +53,11 @@ namespace YLErp.Web GlobalConfig.EnableExtendSetting = true; GlobalConfig.ProjectTitle = "场外衍生品业务管理系统"; break; - case Configuration.CompanyEnum.浙期: + case Configuration.CompanyEnum.浙商: + GlobalConfig.ExtendReportType.Add("月报基础数据债券收益互换", 2); + break; case Configuration.CompanyEnum.方顿: - - if (PS.Config.Company == Configuration.CompanyEnum.浙期) - { - GlobalConfig.ExtendReportType.Add("成交明细汇总", 1); - } - GlobalConfig.ExtendReportType.Add("风险资本准备计算表", 1); + GlobalConfig.ExtendReportType.Add("风险资本准备计算表", 1); break; case Configuration.CompanyEnum.格林大华: GlobalConfig.ExtendReportType.Add("客户持仓信息", 3); diff --git a/YLErpWeb/App_Data/Menus.txt b/YLErpWeb/App_Data/Menus.txt index 689f0137..2157c45f 100644 --- a/YLErpWeb/App_Data/Menus.txt +++ b/YLErpWeb/App_Data/Menus.txt @@ -25,6 +25,7 @@ {Name:"交易确认书",Rights:["结算管理-交易确认书"],Url:"TradeConfirmBook/ConfirmBookListByClient"}, {Name:"结算确认书",Rights:["结算管理-结算确认书"],Url:"swaptrade2/tradeEndConfirmList"}, {Name:"每日估值报告",Rights:["结算管理-每日估值报告"],Url:"clientbalance/TradeMarketReport"}, + {Name:"其他报告",Rights:["结算管理-其他报告"],Url:"supervise_report/ExtendReport"}, ] }, {Name:"监管报告",Rights:["监管报告"],Icon:"menu-icon iconteleven" diff --git a/YLErpWeb/App_Docs/导出模板/月报基础数据债券收益互换.xlsx b/YLErpWeb/App_Docs/导出模板/月报基础数据债券收益互换.xlsx index 9affa739e6e1dc2aa5825f9ed12bb071f042bc6f..a72c617e76ab7877bff9ea8ecb8fb532e0203c6b 100644 GIT binary patch literal 24474 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 literal 24512 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�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 diff --git a/YLErpWeb/Controllers/supervise_reportController.cs b/YLErpWeb/Controllers/supervise_reportController.cs index d4488948..6b54a5cb 100644 --- a/YLErpWeb/Controllers/supervise_reportController.cs +++ b/YLErpWeb/Controllers/supervise_reportController.cs @@ -1394,7 +1394,7 @@ namespace YLErp.Web.Controllers { Directory.CreateDirectory(targetPath); } - + ExcelPackage.LicenseContext= LicenseContext.NonCommercial; var targetFileName = Path.Combine(targetPath, service.TargetFileName); var path = ExcelTemplate.GeneratePDFFromExeclTemplate(sourcePath, sourceFileName, modelDict, targetPath, targetFileName, null, null, null, false); diff --git a/YLErpWeb/Views/supervise_report/ExtendReport.cshtml b/YLErpWeb/Views/supervise_report/ExtendReport.cshtml index ed917b48..b5a7fb92 100644 --- a/YLErpWeb/Views/supervise_report/ExtendReport.cshtml +++ b/YLErpWeb/Views/supervise_report/ExtendReport.cshtml @@ -9,7 +9,7 @@ defaultType = GlobalConfig.ExtendReportType.FirstOrDefault().Key, }; } -@section CSS{ +@section CSS { } - @section JS{ +@section JS{ - + } -
- - -
- @Html.SearchDate("ValueDate", "日期") -
-
- @Html.ShortInput("ValueMonthly", "月份") -
-
- @Html.SearchDate("StartDate", "开始日期")@Html.SearchDate("EndDate", "结束日期") -
-
- @Html.SearchDateRange("ValueDate1", "发生时间") - @Html.MyAceDropdownInput("ClientId", "客户名称", CurUser.GetClientSelectItems(),false) -
- @MyControls.Btn("导出", "exportToFile()") +
+ + +
+ @Html.SearchDate("ValueDate", "日期")
+
+ + +
+
+ @Html.SearchDate("StartDate", "开始日期")@Html.SearchDate("EndDate", "结束日期") +
+ @MyControls.Btn("导出", "exportToFile()") +
diff --git a/YLErpWeb/YLErpWeb.csproj b/YLErpWeb/YLErpWeb.csproj index 7b0a1442..b637f139 100644 --- a/YLErpWeb/YLErpWeb.csproj +++ b/YLErpWeb/YLErpWeb.csproj @@ -106,6 +106,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest From d92c5e311f50b455846eb4f0ae7163c71f097ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Mon, 18 Aug 2025 14:12:26 +0800 Subject: [PATCH 03/27] =?UTF-8?q?redis=20=E9=9B=86=E7=BE=A4=E9=94=AE?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Framework/YLErp.Cache/YLRedisCache.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Framework/YLErp.Cache/YLRedisCache.cs b/Framework/YLErp.Cache/YLRedisCache.cs index c88e6e24..e53240e3 100644 --- a/Framework/YLErp.Cache/YLRedisCache.cs +++ b/Framework/YLErp.Cache/YLRedisCache.cs @@ -182,10 +182,17 @@ namespace YLErp.Cache /// public bool BatchDelete(string pattern) { - var keys = QueryKeys(pattern); - foreach (var key in keys) + var endpoints = _redisConnector.GetEndPoints(); // 获取所有节点 + var patterns = GenerateKey(pattern); + foreach (var endpoint in endpoints) { - db.KeyDelete(key); // 逐个删除,规避跨槽位问题 + var server = _redisConnector.GetServer(endpoint); + var keys = server.Keys(pattern: patterns); + // 逐键删除(规避跨槽位) + foreach (var key in keys) + { + db.KeyDelete(key); + } } return true; } From ff6ae955c65cbf0a84730abf58d1437412871e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Mon, 18 Aug 2025 15:55:52 +0800 Subject: [PATCH 04/27] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ZheShang/SwapTradeMothReport.cs | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs index a3025d88..118f2d62 100644 --- a/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs +++ b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs @@ -80,28 +80,27 @@ namespace YLErp.Modules.SuperviseReportModule.ExtendReport.ZheShang obj.NameOfCounterpartyProduct = ""; // 交易对手产品名称,如果有需要从其他地方获取 obj.TransactionConfirmationNumber = item.ConfrimNo; // 交易确认书编号 var eodSwap= eodSwapList.FirstOrDefault(s => s.SwapTradeId == item.position.SwapTradeId); + // 名义本金/多头名义本金和空头名义本金 obj.NotionalPrincipalAmountL = eodSwap.NotionalValueLong; obj.SNotionalPrincipalAmount = eodSwap.NotionalValueShort; + /** + * 校验规则: + 当选择“场外期权”时,“期权费(非年化)”、“期权标的小类(场外期权填写)” 和“期权类型” 三项必填; + 当选择“收益互换”类型时,“收益互换标的小类(收益互换填写)”必填 + + 11:收益互换(客户多头) + 12:收益互换(客户空头) + 13:多空组合收益互换 + 14:其他收益互换 + 02:场外期权 + */ obj.BusinessType = obj.NotionalPrincipalAmountL>0? "11":"12"; obj.LongPositionContractValue = obj.NotionalPrincipalAmountL > 0? eodSwap.PostionValue:0; obj.ShortPositionContractValue = obj.SNotionalPrincipalAmount > 0 ? eodSwap.PostionValue:0; // 设置维持保证金比例 var maitainMargin = eodSwap.PostionMarginGain+ eodSwap.PostionMarginLoss; var MaitainMarginRation= eodSwap.NotionalValue==0?0: maitainMargin / eodSwap.NotionalValue; - obj.MaitainMarginRation =Math.Round(MaitainMarginRation*100,2,MidpointRounding.AwayFromZero).ToString()+"%"; // 需要从其他地方获取维持保证金比例 - /** - * 校验规则: - 当选择“场外期权”时,“期权费(非年化)”、“期权标的小类(场外期权填写)” 和“期权类型” 三项必填; - 当选择“收益互换”类型时,“收益互换标的小类(收益互换填写)”必填 - - 11:收益互换(客户多头) - 12:收益互换(客户空头) - 13:多空组合收益互换 - 14:其他收益互换 - 02:场外期权 - */ - - // 名义本金/多头名义本金和空头名义本金 + obj.MaitainMarginRation =Math.Round(MaitainMarginRation*100,2,MidpointRounding.AwayFromZero).ToString()+"%"; if (item.position != null) { // 设置起始日和到期日 From eb4a51110ecd5406788ed33162a898bee3b27beb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Wed, 20 Aug 2025 16:02:42 +0800 Subject: [PATCH 05/27] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExtendReport/ZheShang/SwapTradeMothReport.cs | 12 +++++++++++- YLErpWeb/Views/supervise_report/ExtendReport.cshtml | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs index 118f2d62..738d3e65 100644 --- a/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs +++ b/YLErpDAL/Modules/SuperviseReportModule/ExtendReport/ZheShang/SwapTradeMothReport.cs @@ -109,7 +109,17 @@ namespace YLErp.Modules.SuperviseReportModule.ExtendReport.ZheShang // 设置标的信息 obj.UndrlygAssetCode = item.position.UnderlyingCode; obj.UndrlygAssetName = underlyingName; // 使用前面获取的标的名称 - obj.SumInvestmentTargetType = ""; // 标的类型,可能需要根据实际情况调整 + /** + * 0:权益类 + 1:大宗商品 + 2:利率 + 3:信用类 + 4:汇率 + 5:混合类 + 99:其他 + 说明:对于多类别资产组合,单一资产类别占比大于等于80%的,分类为该类别,各资产类别占比均小于80%的,为混合类 + */ + obj.SumInvestmentTargetType = "2"; // 标的类型,可能需要根据实际情况调整 obj.UndrlygAssetTradgPlc = ""; // 标的交易场所,可能需要根据实际情况调整 /** * 校验规则:当“业务类型”为“收益互换”时,必填 diff --git a/YLErpWeb/Views/supervise_report/ExtendReport.cshtml b/YLErpWeb/Views/supervise_report/ExtendReport.cshtml index b5a7fb92..e0707c97 100644 --- a/YLErpWeb/Views/supervise_report/ExtendReport.cshtml +++ b/YLErpWeb/Views/supervise_report/ExtendReport.cshtml @@ -1,5 +1,5 @@ @{ - ViewBag.Title = "其他报表"; + ViewBag.Title = "其他报告"; Layout = "~/Views/Shared/_MainLayout.cshtml"; var pageObj = new { From b2097466e9aa9184fba7c4ed5cf59f02dd1eb986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Mon, 1 Sep 2025 09:45:23 +0800 Subject: [PATCH 06/27] =?UTF-8?q?OA=E6=94=BE=E5=BC=80=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConfirmBookListByClient.cshtml | 2 +- .../app/trade/tradeConfirmBookListByClient.js | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/YLErpWeb/Views/TradeConfirmBook/ConfirmBookListByClient.cshtml b/YLErpWeb/Views/TradeConfirmBook/ConfirmBookListByClient.cshtml index 1acc2292..dae3ef1a 100644 --- a/YLErpWeb/Views/TradeConfirmBook/ConfirmBookListByClient.cshtml +++ b/YLErpWeb/Views/TradeConfirmBook/ConfirmBookListByClient.cshtml @@ -69,7 +69,7 @@ } @MyControls.Btn("批量下载交易确认书", "BatchDownLoadDoc()") - @* *@ + @if (PS.GetErpConfig().IsAutoSealAndUploadFiles && !PS.GetErpConfig().IsAutoSealAfterGeneratedBook) { @MyControls.Btn("批量确认书用印", "BatchSealContracts()") diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js index 9238fd46..4dcb8b62 100644 --- a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js +++ b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js @@ -37,16 +37,16 @@ const colModelGrid = (new function () { return html; } }, - // { label: 'OA状态', name: 'OAStatus', width: 100, align: 'center' }, - //{ label: 'OA-URL', name: 'OAURL', width: 150, align: 'center', - // formatter: function (cellValue, options, rowObject) { - // if (cellValue && cellValue.length > 0) { - // return '
查看'; - // } - // return ''; - // } - //}, - //{ label: 'OA消息', name: 'OAMessage', width: 150, align: 'left' }, + { label: 'OA状态', name: 'OAStatus', width: 100, align: 'center' }, + { label: 'OA-URL', name: 'OAURL', width: 150, align: 'center', + formatter: function (cellValue, options, rowObject) { + if (cellValue && cellValue.length > 0) { + return '查看'; + } + return ''; + } + }, + { label: 'OA消息', name: 'OAMessage', width: 150, align: 'left' }, { label: '交易数量', name: 'tradeCount', width: 80, align: 'center' }, { label: 'tradeIds', name: 'tradeIds', hidden: true, optionHide: true }]; this.upload = function (encryptId, sendMail) { @@ -166,7 +166,7 @@ $(function () { // $("#batchSendMailBtn").click(BatchSendMail); initJqGrid(); SendEmailHub() - // SendOAHub(); // 初始化OA发送功能 + SendOAHub(); // 初始化OA发送功能 }); // 初始化jqGrid函数 @@ -259,8 +259,8 @@ function showToolName(cellValue, options, rowObject) { html += "".template(rowObject.ContractCode, canUpload); // 添加发送OA按钮 - //html += "" - // .template(rowObject.id); + html += "" + .template(rowObject.id); return html; } From a42dd6e090262cbbf0915a690a664e2017088459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Mon, 1 Sep 2025 17:26:14 +0800 Subject: [PATCH 07/27] =?UTF-8?q?OA=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Modules/TradeModule/TradeOAService.cs | 9 +++++++-- YLErpWeb/appsettings.local.json | 2 +- YLErpWeb/appsettings.uat.json | 9 ++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/YLErpDAL/Modules/TradeModule/TradeOAService.cs b/YLErpDAL/Modules/TradeModule/TradeOAService.cs index d1418c2d..9c4dfac5 100644 --- a/YLErpDAL/Modules/TradeModule/TradeOAService.cs +++ b/YLErpDAL/Modules/TradeModule/TradeOAService.cs @@ -1,3 +1,4 @@ +using BaseOUDAL; using Qdp.Foundation.Utilities; using YLErp.DBModels; using YLErp.DBModels.Consts; @@ -110,7 +111,11 @@ namespace YLErp.Modules.TradeModule // 获取OA配置 var oaConfigSection = AppManager.GetConfiguration().GetSection("oa_confg"); var baseUrl = oaConfigSection["BaseUrl"]; - var loginName = UserInfo.OaAccount; + var loginName = string.Empty; + using (var adminDb = new ErpBaseContext()) { + var userInfo=adminDb.SystemUsers.FirstOrDefault(x=>x.Id==UserInfo.UserId); + loginName= userInfo?.OaAccount; + } var systemKey = oaConfigSection["SystemKey"]; var objectClass = oaConfigSection["ObjectClass"]; var urgent = int.Parse(oaConfigSection["Urgent"] ?? "1"); @@ -239,7 +244,7 @@ namespace YLErp.Modules.TradeModule logger.Info($"OA接口参数:{JsonHelper.Serialize(oaRequest)}"); // 调用OA接口 var httpClient = new HttpClientWrap(baseUrl); - var response = httpClient.PostJson("/fileDraft", oaRequest, null); + var response = httpClient.PostJson("/ZSZQ/fileDraft", oaRequest, null);// fileDraft logger.Info($"OA接口返回:{response}"); // 解析响应 var responseObj = JsonHelper.Deserialize(response); diff --git a/YLErpWeb/appsettings.local.json b/YLErpWeb/appsettings.local.json index 4e435ca1..06a13f3a 100644 --- a/YLErpWeb/appsettings.local.json +++ b/YLErpWeb/appsettings.local.json @@ -80,6 +80,6 @@ "SystemKey": "M001", //OA系统key "ObjectClass": "ZSZQ_ZDNX", //OA文件类别 "Urgent": 1, //紧急程度,1一般 2紧急 3加急 - "Issend": 1 //流程是否自动发送,0不发送,1自动发送下一步 + "Issend": 0 //流程是否自动发送,0不发送,1自动发送下一步 } } diff --git a/YLErpWeb/appsettings.uat.json b/YLErpWeb/appsettings.uat.json index 186bb9db..c26cc1d6 100644 --- a/YLErpWeb/appsettings.uat.json +++ b/YLErpWeb/appsettings.uat.json @@ -73,5 +73,12 @@ "Schema": "YILIAN" }, "SendKafakaCron": "10 0 * * *", - "MaxThreadPercent": 0.6 //占系统资源最多60%的线程数量 + "MaxThreadPercent": 0.6, //占系统资源最多60%的线程数量 + "oa_confg": { + "BaseUrl": "http://10.52.130.11", + "SystemKey": "fF2U9HXs7dm6Hjz5X", //OA系统key + "ObjectClass": "ZSZQ_CWYSPJYQRSDZWF", //OA文件类别 + "Urgent": 1, //紧急程度,1一般 2紧急 3加急 + "Issend": 0 //流程是否自动发送,0不发送,1自动发送下一步 + } } From 725b4d4de4eb50e4a33b325f166d5faed64ef6d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Tue, 2 Sep 2025 13:42:43 +0800 Subject: [PATCH 08/27] =?UTF-8?q?oa=E8=BF=94=E5=9B=9E=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Modules/TradeModule/TradeOAService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/YLErpDAL/Modules/TradeModule/TradeOAService.cs b/YLErpDAL/Modules/TradeModule/TradeOAService.cs index 9c4dfac5..aaca2422 100644 --- a/YLErpDAL/Modules/TradeModule/TradeOAService.cs +++ b/YLErpDAL/Modules/TradeModule/TradeOAService.cs @@ -78,7 +78,8 @@ namespace YLErp.Modules.TradeModule { oaResult.status = "提交成功"; oaResult.oa_fileid = oaResp.data?.fileid; - oaResult.oa_msg = oaResp.data?.url; + oaResult.oa_msg = oaResp.message; + oaResult.oa_url = oaResp.data?.url; } else { From dd6d190c71c2b0396660e587439cdb96f3ff569e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Tue, 2 Sep 2025 15:56:15 +0800 Subject: [PATCH 09/27] =?UTF-8?q?OA=E8=81=94=E8=B0=83=EF=BC=8C=E9=9C=80?= =?UTF-8?q?=E8=A6=81utf8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Modules/ApiModule/HttpClientWrap.cs | 5 +++-- YLErpDAL/Modules/TradeModule/TradeOAService.cs | 2 +- .../app/trade/tradeConfirmBookListByClient.js | 16 ++++++++-------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/YLErpDAL/Modules/ApiModule/HttpClientWrap.cs b/YLErpDAL/Modules/ApiModule/HttpClientWrap.cs index bfa45e77..6a4ebcf6 100644 --- a/YLErpDAL/Modules/ApiModule/HttpClientWrap.cs +++ b/YLErpDAL/Modules/ApiModule/HttpClientWrap.cs @@ -1,6 +1,7 @@ using System.Net; using System.Net.Http; using System.Net.Http.Headers; +using System.Text; namespace YLErp.Modules.ApiModule { @@ -83,7 +84,7 @@ namespace YLErp.Modules.ApiModule public string PostJson(string apiPath, object postData, Action requestHandle) { var str = JsonHelper.Serialize(postData) ?? string.Empty; - using (var content = new StringContent(str)) + using (var content = new StringContent(str, Encoding.UTF8, "application/json")) using (var request = new HttpRequestMessage() { Method = HttpMethod.Post, @@ -93,7 +94,7 @@ namespace YLErp.Modules.ApiModule { request.Headers.Add("Accept-Encoding", "gzip"); requestHandle?.Invoke(request); - content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); + // content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); LogFactory.GetLogger().Info($"url:{apiPath}\r\npostData:{str}\r\n{content.ToJson()}"); try { diff --git a/YLErpDAL/Modules/TradeModule/TradeOAService.cs b/YLErpDAL/Modules/TradeModule/TradeOAService.cs index aaca2422..df255cbd 100644 --- a/YLErpDAL/Modules/TradeModule/TradeOAService.cs +++ b/YLErpDAL/Modules/TradeModule/TradeOAService.cs @@ -216,7 +216,7 @@ namespace YLErp.Modules.TradeModule loginname = loginName, systemkey = systemKey, objectclass = objectClass, - title = $"交易确认书OA申请-{trade.ClientName}-{contractCode}", + title = $"关于场外利率债收益互换交易的审批盖章申请({trade.TradeDate.Value.ToString("yyyyMMdd")}-{trade.ClientName})", urgent = urgent, issend = issend, copyattfileid = "", diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js index 4dcb8b62..b114ab5b 100644 --- a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js +++ b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js @@ -38,14 +38,14 @@ const colModelGrid = (new function () { } }, { label: 'OA状态', name: 'OAStatus', width: 100, align: 'center' }, - { label: 'OA-URL', name: 'OAURL', width: 150, align: 'center', - formatter: function (cellValue, options, rowObject) { - if (cellValue && cellValue.length > 0) { - return '查看'; - } - return ''; - } - }, + //{ label: 'OA-URL', name: 'OAURL', width: 150, align: 'center', + // formatter: function (cellValue, options, rowObject) { + // if (cellValue && cellValue.length > 0) { + // return '查看'; + // } + // return ''; + // } + //}, { label: 'OA消息', name: 'OAMessage', width: 150, align: 'left' }, { label: '交易数量', name: 'tradeCount', width: 80, align: 'center' }, { label: 'tradeIds', name: 'tradeIds', hidden: true, optionHide: true }]; From f888c6b193905ac23e3ceec6a852a045423239b6 Mon Sep 17 00:00:00 2001 From: gongpei Date: Tue, 2 Sep 2025 18:00:26 +0800 Subject: [PATCH 10/27] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=B7=B2=E6=B3=A8=E9=94=80=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/BLL_System/ViewUser.cs | 1 + YLErpWeb/Controllers/SystemController.cs | 24 ++++++++++++-- YLErpWeb/Views/System/UserEdit.cshtml | 2 +- YLErpWeb/Views/System/UserIndex.cshtml | 41 ++++++++++++++++-------- 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/YLErpDAL/BLL_System/ViewUser.cs b/YLErpDAL/BLL_System/ViewUser.cs index 4179b09e..319e62bb 100644 --- a/YLErpDAL/BLL_System/ViewUser.cs +++ b/YLErpDAL/BLL_System/ViewUser.cs @@ -17,6 +17,7 @@ namespace BaseOUDAL get { if (State == 0) return "正常"; + if (State == 2) return "已注销"; return "禁用"; } } diff --git a/YLErpWeb/Controllers/SystemController.cs b/YLErpWeb/Controllers/SystemController.cs index 06118809..5b7d0681 100644 --- a/YLErpWeb/Controllers/SystemController.cs +++ b/YLErpWeb/Controllers/SystemController.cs @@ -1,11 +1,22 @@ -using Dapper; +using BaseOUDAL; +using Dapper; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; +using Org.BouncyCastle.Asn1.Ocsp; +using System; +using System.Collections.Generic; using System.Data; +using System.Linq; using YLErp.Abstract; using YLErp.BLL; +using YLErp.DBModels; using YLErp.DBModels.Consts; using YLErp.Modules.DictionaryModule; using YLErp.Modules.SystemModule; +using YLErp.Web.Models; namespace YLErp.Web.Controllers { @@ -667,7 +678,7 @@ namespace YLErp.Web.Controllers r.Password = null; return View(r); } - + [MyAuthorize("系统管理-用户管理")] public ActionResult UserLevelView(int id) { @@ -852,6 +863,15 @@ namespace YLErp.Web.Controllers } } + public JsonResult accountDelete(int accountIds) + { + var r = basedb.SystemUsers.Find(accountIds); + r.State = 2; + basedb.SaveChanges(); + new SysUserService(CurUser).UpdateState(accountIds, 2); + return JsonSuccess("注销账户成功", r); + } + public JsonResult accountAble(int accountIds) { var r = basedb.SystemUsers.Find(accountIds); diff --git a/YLErpWeb/Views/System/UserEdit.cshtml b/YLErpWeb/Views/System/UserEdit.cshtml index 85e60d8a..0689f9c8 100644 --- a/YLErpWeb/Views/System/UserEdit.cshtml +++ b/YLErpWeb/Views/System/UserEdit.cshtml @@ -169,7 +169,7 @@
- @Html.DropDownListFor(model => model.State, new SelectListItem[] { new SelectListItem { Text = "正常", Value = "0" }, new SelectListItem { Text = "禁用", Value = "1" } }) + @Html.DropDownListFor(model => model.State, new SelectListItem[] { new SelectListItem { Text = "正常", Value = "0" }, new SelectListItem { Text = "禁用", Value = "1" }, new SelectListItem { Text = "已注销", Value = "2" } })
diff --git a/YLErpWeb/Views/System/UserIndex.cshtml b/YLErpWeb/Views/System/UserIndex.cshtml index a012d7be..243d23f7 100644 --- a/YLErpWeb/Views/System/UserIndex.cshtml +++ b/YLErpWeb/Views/System/UserIndex.cshtml @@ -11,7 +11,7 @@ }; } -@section JS{ +@section JS {