using OfficeOpenXml; using OfficeOpenXml.Style; using System.Data; using YLErp.Commons; using YLErp.Modules.SuperviseReportModule.CFMMC.Model; using YLErp.Modules.SuperviseReportModule.CFMMC.Service; using YLErp.Modules.SuperviseReportModule.ExtendReport; using YLErp.Modules.SuperviseReportModule.SAC.Common; using YLErp.Modules.SuperviseReportModule.SAC.Model; using YLErp.Modules.SuperviseReportModule.SAC.Service; using YLErp.Modules.SuperviseReportModule.XingZhengReport.Service; using YLErp.Modules.TempFilesModule; using YLErp.Office; using YLErp.Office.ExcelModule; using YLErp.QdpModule; using ExcelHelper = YLErp.Commons.ExcelHelper; namespace YLErp.Web.Controllers { /// /// 监管报告 /// public class supervise_reportController : BaseController { #region 成交报送 [MyAuthorize("监管报告-成交报送报表")] public ActionResult supervise_today_report() { ViewBag.valueDate = BLL.Eod.EodOperationBase.GetLastSettlementDate(valuedateBLL.ValueDate).ToString("yyyy-MM-dd"); return View(); } public JsonResult superviseTodayReportQuery(SuperviseReportReq req) { var sList = new SuperviseReportTodayService(req, CurUser).SearchReportList(); return Json(sList); } public JsonResult SendSuperviseTodayReport(SuperviseReportReq req) { req.page = 1; req.rows = 100000; SearchListResult sList = null; try { sList = new SuperviseReportTodayService(req, CurUser).SearchReportList(); } catch (Exception ex) { return JsonError("生成失败", ex.Message); } var datas = sList.rows.ToList(); var sourcePath = Server.MapPath("~/App_Docs"); var sourceFileName = Path.Combine(sourcePath, "导出模板", "监管成交报告.xlsm"); var sourceFileName_Template = Path.Combine(sourcePath, "导出模板", $"监管成交报告-{req.DataSource}.xlsm"); if (System.IO.File.Exists(sourceFileName_Template)) { sourceFileName = sourceFileName_Template; } var targetPath = Path.Combine(sourcePath, req.ValueDate.ToString("yyyyMMdd")); if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } var targetFileName = Path.Combine(targetPath, $"{valuedateBLL.ResetValueDate().SupervisePrefix}otctrddata{req.ValueDate.ToString("yyyyMMdd")}.xlsm"); var modelDict = new Dictionary { {"成交报送模板", datas} }; var path = ExcelTemplate.GeneratePDFFromExeclTemplate(sourcePath, sourceFileName, modelDict, targetPath, targetFileName, null, null, null, false, callback: (sheet) => { if (!datas.Any()) { sheet.First().InsertRow(4, 1, 3);//此模板无数据则插入空行,注意样式 } }); //补丁,返回一个相对地址 var relativePath = path.Substring(path.IndexOf("App_Docs") - 1); return JsonSuccess("生成成功", relativePath); } #endregion #region 持仓报送 [MyAuthorize("监管报告-持仓报送报表")] public ActionResult supervise_position_report() { ViewBag.valueDate = BLL.Eod.EodOperationBase.GetLastSettlementDate(valuedateBLL.ValueDate).ToString("yyyy-MM-dd"); return View(); } public JsonResult supervisePositionReportQuery(SuperviseReportReq req) { var sList = new SuperviseReportPositionService(req, CurUser).SearchReportList(); return Json(sList); } public JsonResult SendSupervisePositionReport(SuperviseReportReq req) { req.page = 1; req.rows = 100000; SearchListResult sList = null; try { sList = new SuperviseReportPositionService(req, CurUser).SearchReportList(); } catch (Exception ex) { return JsonError("生成失败", ex.Message); } var datas = sList.rows.ToList(); //sList.ForEach(O => { if (O.IsMoneynessOption == "是") { O.Strike = (O.InitialSpotPrice * O.Strike); O.IsMoneynessOption = "否"; } }); //获取盯市报告模板信息 var sourcePath = Server.MapPath("~/App_Docs"); var sourceFileName = Path.Combine(sourcePath, "导出模板", "监管持仓报告.xlsm"); var sourceFileName_Template = Path.Combine(sourcePath, "导出模板", $"监管持仓报告-{req.DataSource}.xlsm"); if (System.IO.File.Exists(sourceFileName_Template)) { sourceFileName = sourceFileName_Template; } var targetPath = Path.Combine(sourcePath, req.ValueDate.ToString("yyyyMMdd")); if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } var targetFileName = Path.Combine(targetPath, $"{valuedateBLL.ResetValueDate().SupervisePrefix}otcposdata{req.ValueDate:yyyyMMdd}.xlsm"); var modelDict = new Dictionary { {"持仓报送模板", datas} }; var path = ExcelTemplate.GeneratePDFFromExeclTemplate(sourcePath, sourceFileName, modelDict, targetPath, targetFileName, null, null, null, false, callback: (sheet) => { if (!datas.Any()) { sheet.First().InsertRow(3, 1, 2);//此模板无数据则插入空行,注意样式 } }); //补丁,返回一个相对地址 var relativePath = path.Substring(path.IndexOf("App_Docs") - 1); return JsonSuccess("生成成功", relativePath); } #endregion #region 风险自查报送 public ActionResult risk_check_report() { ViewBag.valueDate = QdpCalendarHelper.GetNonHolidayDefore(valuedateBLL.ValueDate.AddDays(-1)).ToString("yyyy-MM-dd"); return View(); } public JsonResult SendRiskCheckReport(SuperviseReportReq req) { var bll = new tradeBLL(); var sumModel = bll.SearchRiskCheckReportSumInfo(req); var listModel = bll.SearchRiskCheckReportListInfo(req); //获取当日预付金追加情况记录 sumModel.MarginList = listModel.Where(x => x.Margin > 0).GroupBy(x => x.ClientName).Select(x => new RiskCheckReportItem() { ClientName = x.Key, Margin = x.Average(y => y.Margin) }).ToList(); //获取客户当日有追保记录,前一个工作日也有追保记录,该客户属于风险情况,记录作日的追保信息 req.ValueDate = QdpCalendarHelper.GetNonHolidayDefore(req.ValueDate); var PreDayListModel = bll.SearchRiskCheckReportListInfo(req); sumModel.RiskMarginList = PreDayListModel.Where(x => x.Margin > 0 && listModel.Select(y => y.ClientName).Contains(x.ClientName)).GroupBy(x => x.ClientName).Select(x => new RiskCheckReportItem() { ClientName = x.Key, Margin = x.Average(y => y.Margin) }).ToList(); if (sumModel.RiskMarginList.Any()) { sumModel.RiskMarginListTitle = "今日客户出现风险情况如下:"; } else { sumModel.RiskMarginListTitle = "今日无客户出现风险情况"; } //获取盯市报告模板信息 var sourcePath = Server.MapPath("~/App_Docs"); var settleDocName = "风险自查模板.xlsx"; var sourceFileName = Path.Combine(sourcePath, "导出模板", settleDocName); var targetPath = Path.Combine(sourcePath, req.ValueDate.ToString("yyyyMMdd")); if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } var targetFileName = Path.Combine(targetPath, $"风险自查报告-{req.ValueDate.ToString("yyyyMMdd")}.xlsx"); var modelDict = new Dictionary { {"希腊字母", sumModel}, {"场外期权头寸", listModel} }; var mergeInfo = new Dictionary(); var ClientNameList = listModel.Select(x => x.ClientName).Distinct(); foreach (var name in ClientNameList) { var count = listModel.Where(x => x.ClientName == name).Count(); mergeInfo.Add(name, count); } Action generateExcelCallback = (sheets) => { var index = 1; foreach (var dic in mergeInfo) { sheets["场外期权头寸"].Cells[index + 1, 1, index + dic.Value, 1].Merge = true; sheets["场外期权头寸"].Cells[index + 1, 2, index + dic.Value, 2].Merge = true; sheets["场外期权头寸"].Cells[index + 1, 3, index + dic.Value, 3].Merge = true; sheets["场外期权头寸"].Cells[index + 1, 4, index + dic.Value, 4].Merge = true; sheets["场外期权头寸"].Cells[index + 1, 5, index + dic.Value, 5].Merge = true; sheets["场外期权头寸"].Cells[index + 1, 6, index + dic.Value, 6].Merge = true; sheets["场外期权头寸"].Cells[index + 1, 7, index + dic.Value, 7].Merge = true; sheets["场外期权头寸"].Cells[index + 1, 8, index + dic.Value, 8].Merge = true; index += dic.Value; } if (listModel.Where(x => x.Margin > 0).Count() == 0) { sheets["希腊字母"].InsertRow(14, 1, 14); sheets["希腊字母"].SetValue(14, 1, "今日业务运营正常,无风险处理"); sheets["希腊字母"].Cells[14, 1, 14, 1].Style.Border.BorderAround(ExcelBorderStyle.Thin); sheets["希腊字母"].Cells[14, 1, 14, 2].Style.Border.BorderAround(ExcelBorderStyle.Thin); sheets["希腊字母"].Cells[14, 1, 14, 3].Style.Border.BorderAround(ExcelBorderStyle.Thin); sheets["希腊字母"].Cells[14, 1, 14, 4].Style.Border.BorderAround(ExcelBorderStyle.Thin); sheets["希腊字母"].Cells[14, 1, 14, 5].Style.Border.BorderAround(ExcelBorderStyle.Thin); } }; var path = ExcelTemplate.GeneratePDFFromExeclTemplate(sourcePath, sourceFileName, modelDict, targetPath, targetFileName, null, null, null, false, callback: generateExcelCallback); //补丁,返回一个相对地址 var relativePath = path.Substring(path.IndexOf("App_Docs") - 1); return JsonSuccess("生成成功", relativePath); } #endregion #region 客户资金报送-试点 [MyAuthorize("监管报告-客户资金报表")] public ActionResult supervise_ClientCash_Report() { ViewBag.valueDate = BLL.Eod.EodOperationBase.GetLastSettlementDate(valuedateBLL.ValueDate).ToString("yyyy-MM-dd"); return View(); } public JsonResult superviseClientCashReportQuery(SuperviseReportReq req) { var sList = new SuperviseReportClientCashService(CurUser).SearchSuperviseReportList(req); return Json(sList); } public FileContentResult SendSuperviseClientCashReport(SuperviseReportReq req) { req.page = 1; req.rows = 100000; SearchListResult sList = null; try { sList = new SuperviseReportClientCashService(CurUser).SearchSuperviseReportList(req); } catch (Exception ex) { throw new Exception("生成失败", ex); } var list = new List>(); var properties = typeof(SuperviseReportClientCashModel).GetProperties(); foreach (var item in sList.rows) { var row = new Dictionary(); foreach (var prop in properties) { row[prop.Name] = prop.GetValue(item); } list.Add(new ExpandoDictionary(row)); } var sourcePath = Server.MapPath("~/App_Docs"); var settleDocName = "客户资金报告模板.xlsx"; var sourceFileName = Path.Combine(sourcePath, "导出模板", settleDocName); var buffer = ExcelGenerator.UseTemplateGenerator(sourceFileName).AddVariable(new { valuedate = req.ValueDate, list }).GenerateBytes(); return File(buffer, xlsxMimeType, $"客户资金表-{PS.Config.CompanyFullName}-{req.ValueDate:yyyyMMdd}.xlsx"); } #endregion #region 客户资金报送 [MyAuthorize("监管报告-客户资金报表")] public ActionResult supervise_ClientCash_Report_old() { ViewBag.valueDate = BLL.Eod.EodOperationBase.GetLastSettlementDate(valuedateBLL.ValueDate).ToString("yyyy-MM-dd"); return View(); } public JsonResult superviseClientCashReportQuery_old(SuperviseReportReq req) { var sList = new SuperviseReportClientCashService(CurUser).SearchSuperviseReportList_old(req); return Json(sList); } public JsonResult SendSuperviseClientCashReport_old(SuperviseReportReq req) { req.rows = 100000; var sList = new SuperviseReportClientCashService(CurUser).SearchSuperviseReportList_old(req); //获取盯市报告模板信息 var sourcePath = Server.MapPath("~/App_Docs"); var settleDocName = "客户资金报告模板_old.xlsx"; var sourceFileName = Path.Combine(sourcePath, "导出模板", settleDocName); var targetPath = Path.Combine(sourcePath, req.ValueDate.ToString("yyyyMMdd")); if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } var targetFileName = Path.Combine(targetPath, $"客户资金表V2-{PS.Config.CompanyFullName}-{req.ValueDate.ToString("yyyyMMdd")}.xlsx"); object obj = new { valuedate = req.ValueDate.ToString("yyyy年MM月dd日"), list = sList.rows }; var modelDict = new Dictionary { {"Sheet1", obj} }; var path = ExcelTemplate.GeneratePDFFromExeclTemplate(sourcePath, sourceFileName, modelDict, targetPath, targetFileName, null, null, null, false, callback: (sheet) => { if (!sList.rows.Any()) { sheet.First().InsertRow(6, 1, 5);//此模板无数据则插入空行,注意样式 } }); //补丁,返回一个相对地址 var relativePath = path.Substring(path.IndexOf("App_Docs") - 1); return JsonSuccess("生成成功", relativePath); } #endregion #region 长江客户资金数据采集 [MyAuthorize("监管报告-衍生品客户资金表")] public ActionResult supervise_ClientCash() { ViewBag.valueDate = valuedateBLL.ValueDate.ToString("yyyy-MM-dd"); return View(); } public JsonResult superviseClientCashQuery(SuperviseReportReq req) { var sList = new Modules.SuperviseReportModule.ChangJiangReport.Service.SuperviseReportClientCashService(CurUser).SearchSuperviseReportList(req); return Json(sList); } public JsonResult BatchSuperviseClientCash(List Ids, DateTime ValueDate, bool IsAll, string Type) { new Modules.SuperviseReportModule.ChangJiangReport.Service.SuperviseReportClientCashService(CurUser).BatchSuperviseClientCash(Ids, ValueDate, IsAll, Type); return JsonSuccess(""); } #endregion #region 长江场外业务持仓情况数据采集 [MyAuthorize("监管报告-衍生品客户资金表")] public ActionResult supervise_position() { ViewBag.valueDate = valuedateBLL.ValueDate.ToString("yyyy-MM-dd"); return View(); } public JsonResult supervisePositionQuery(SuperviseReportReq req) { var sList = new Modules.SuperviseReportModule.ChangJiangReport.Service.SuperviseReportPositionService(CurUser).SearchSuperviseReportList(req); return Json(sList); } public JsonResult BatchSupervisePosition(List Ids, DateTime ValueDate, bool IsAll, string Type) { new Modules.SuperviseReportModule.ChangJiangReport.Service.SuperviseReportPositionService(CurUser).BatchSupervisePosition(Ids, ValueDate, IsAll, Type); return JsonSuccess(""); } #endregion #region 长江信用风险数据采集 [MyAuthorize("监管报告-衍生品信用风险表")] public ActionResult supervise_CreditRisk() { ViewBag.valueDate = valuedateBLL.ValueDate.ToString("yyyy-MM-dd"); return View(); } public JsonResult superviseCreditRiskQuery(SuperviseReportReq req) { var sList = new Modules.SuperviseReportModule.ChangJiangReport.Service.SuperviseReportCreditRiskService(CurUser).SearchSuperviseReportList(req); return Json(sList); } public JsonResult HandleSuperviseCreditRisk(int Id, DateTime ValueDate, string Type) { new Modules.SuperviseReportModule.ChangJiangReport.Service.SuperviseReportCreditRiskService(CurUser).HandleSuperviseCreditRisk(Id, ValueDate, Type); return JsonSuccess(""); } #endregion #region 兴证期权数据采集 [MyAuthorize("监管报告-集团期权数据采集")] public ActionResult supervise_OtcOption() { ViewBag.valueDate = BLL.Eod.EodOperationBase.GetLastSettlementDate(valuedateBLL.ValueDate).ToString("yyyy-MM-dd"); return View(); } public JsonResult supervise_OtcOptionQuery(SuperviseReportReq req) { var service = new SuperviseReportOptionService(CurUser, req); var sList = req.DataSource == "系统" ? service.SearchReportList() : service.SearchReportList_Db(); var sum = new Dictionary() { { "SumCtrNomnVal", 0 }, { "SumRealNomnVal", 0 }, { "SumInsmScal", 0 }, { "SumShare", 0 }, { "SumPremFix", 0 }, { "SumRangePrft", 0 }, { "SumMaktVal", 0 }, { "SumDelta", 0 }, }; foreach (var item in sList.rows) { sum["SumCtrNomnVal"] += item.CtrNomnVal.Normalize(); sum["SumRealNomnVal"] += item.RealNomnVal.Normalize(); sum["SumInsmScal"] += item.InsmScal.Normalize(); sum["SumShare"] += item.Share.Normalize(); sum["SumPremFix"] += item.PremFix.Normalize(); sum["SumRangePrft"] += item.RangePrft.Normalize(); sum["SumMaktVal"] += item.MaktVal.Normalize(); sum["SumDelta"] += item.Delta.Normalize(); } sList.Sum = sum; return Json(sList); } public JsonResult SendSupervise_OtcOption(SuperviseReportReq req) { req.page = 1; req.rows = 100000; SearchListResult sList = null; try { var service = new SuperviseReportOptionService(CurUser, req); if (req.DataSource == "系统") { sList = service.SearchReportList(); } else { sList = service.SearchReportList_Db(); } var sum = new Dictionary() { { "SumCtrNomnVal", 0 }, { "SumRealNomnVal", 0 }, { "SumInsmScal", 0 }, { "SumShare", 0 }, { "SumPremFix", 0 }, { "SumRangePrft", 0 }, { "SumMaktVal", 0 }, { "SumDelta", 0 }, }; foreach (var item in sList.rows) { sum["SumCtrNomnVal"] += item.CtrNomnVal.Normalize(); sum["SumRealNomnVal"] += item.RealNomnVal.Normalize(); sum["SumInsmScal"] += item.InsmScal.Normalize(); sum["SumShare"] += item.Share.Normalize(); sum["SumPremFix"] += item.PremFix.Normalize(); sum["SumRangePrft"] += item.RangePrft.Normalize(); sum["SumMaktVal"] += item.MaktVal.Normalize(); sum["SumDelta"] += item.Delta.Normalize(); } sList.Sum = sum; } catch (Exception ex) { return JsonError("生成失败", ex.Message); } var datas = new { List = sList.rows.ToList(), Sum = sList.Sum }; //获取盯市报告模板信息 var sourcePath = Server.MapPath("~/App_Docs"); var settleDocName = "兴证期权数据采集模板.xlsx"; var sourceFileName = Path.Combine(sourcePath, "导出模板", settleDocName); var targetPath = Path.Combine(sourcePath, req.ValueDate.ToString("yyyyMMdd")); if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } var targetFileName = Path.Combine(targetPath, $"OtcOption_{req.ValueDate.ToString("yyyyMMdd")}.xlsx"); var modelDict = new Dictionary { {"Sheet1", datas} }; var path = ExcelTemplate.GeneratePDFFromExeclTemplate(sourcePath, sourceFileName, modelDict, targetPath, targetFileName, null, null, null, false, callback: (sheet) => { if (!datas.List.Any()) { sheet.First().InsertRow(3, 1, 2);//此模板无数据则插入空行,注意样式 } }); //补丁,返回一个相对地址 var relativePath = path.Substring(path.IndexOf("App_Docs") - 1); return JsonSuccess("生成成功", relativePath); } public JsonResult ImportSupervise_OtcOption(IFormFile file) { try { var dc = new List(); #region 列配置 dc.Add(new ExcelHelper.DataColumnModel("hold_dt", nameof(SuperviseReportOptionModel.ValueDate)));// 持仓日期 dc.Add(new ExcelHelper.DataColumnModel("group_org_cd", nameof(SuperviseReportOptionModel.GroupCode)));// 集团机构代码 dc.Add(new ExcelHelper.DataColumnModel("org_name", nameof(SuperviseReportOptionModel.OrgName)));// 部门名称 dc.Add(new ExcelHelper.DataColumnModel("asset_cd", nameof(SuperviseReportOptionModel.AssetCode)));// 资产代码 dc.Add(new ExcelHelper.DataColumnModel("prtfl_cd", nameof(SuperviseReportOptionModel.PrtflCode)));// 投组代码 dc.Add(new ExcelHelper.DataColumnModel("cmb_cd", nameof(SuperviseReportOptionModel.CmbCode)));// 组合代码 dc.Add(new ExcelHelper.DataColumnModel("opt_prft_type_cd", nameof(SuperviseReportOptionModel.OptPrftTypeCd)));// 期权收益类型代码 dc.Add(new ExcelHelper.DataColumnModel("opt_struct_name", nameof(SuperviseReportOptionModel.OptStructName)));// 结构类型 dc.Add(new ExcelHelper.DataColumnModel("call_put_cd", nameof(SuperviseReportOptionModel.CallPutCd)));// 看涨看跌代码 dc.Add(new ExcelHelper.DataColumnModel("otc_deri_type", nameof(SuperviseReportOptionModel.OtcDeriType)));// 场外衍生品类型 dc.Add(new ExcelHelper.DataColumnModel("cfrm_achv_no", nameof(SuperviseReportOptionModel.CfrmAchvNo)));// 交易确认书编号 dc.Add(new ExcelHelper.DataColumnModel("cutp", nameof(SuperviseReportOptionModel.Cutp)));// 对手方 dc.Add(new ExcelHelper.DataColumnModel("relp_flag", nameof(SuperviseReportOptionModel.RelpFlag)));// 关联方标志 dc.Add(new ExcelHelper.DataColumnModel("rgt_duty_cd", nameof(SuperviseReportOptionModel.RgtDutyCd)));// 权利义务代码 dc.Add(new ExcelHelper.DataColumnModel("bgn_dt", nameof(SuperviseReportOptionModel.BgnDt)));// 开始日期 dc.Add(new ExcelHelper.DataColumnModel("expr_dt", nameof(SuperviseReportOptionModel.ExprDt)));// 到期日期 dc.Add(new ExcelHelper.DataColumnModel("tgt_cd", nameof(SuperviseReportOptionModel.TgtCd)));// 标的代码 dc.Add(new ExcelHelper.DataColumnModel("tgt_name", nameof(SuperviseReportOptionModel.TgtName)));// 标的名称 dc.Add(new ExcelHelper.DataColumnModel("tgt_exch_cd", nameof(SuperviseReportOptionModel.TgtExchCd)));// 标的交易所代码 dc.Add(new ExcelHelper.DataColumnModel("tgt_ast_type_cd", nameof(SuperviseReportOptionModel.TgtAstTypeCd)));// 标的资产类型代码 dc.Add(new ExcelHelper.DataColumnModel("valid_hedg_flag", nameof(SuperviseReportOptionModel.ValidHedgFlag)));// 有效对冲标志 dc.Add(new ExcelHelper.DataColumnModel("hedg_type_cd", nameof(SuperviseReportOptionModel.HedgTypeCd)));// 对冲类型代码 dc.Add(new ExcelHelper.DataColumnModel("ctr_nomn_val", nameof(SuperviseReportOptionModel.CtrNomnVal), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 合约名义本金 dc.Add(new ExcelHelper.DataColumnModel("real_nomn_val", nameof(SuperviseReportOptionModel.RealNomnVal), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 真实名义价值 dc.Add(new ExcelHelper.DataColumnModel("insm_scal", nameof(SuperviseReportOptionModel.InsmScal), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 投资规模 dc.Add(new ExcelHelper.DataColumnModel("prtc_rate", nameof(SuperviseReportOptionModel.PrtcRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 参与率 dc.Add(new ExcelHelper.DataColumnModel("tgt_bp_prc", nameof(SuperviseReportOptionModel.TgtBpPrc), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 标的期初价格 dc.Add(new ExcelHelper.DataColumnModel("share", nameof(SuperviseReportOptionModel.Share), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 份数 dc.Add(new ExcelHelper.DataColumnModel("prem_fix", nameof(SuperviseReportOptionModel.PremFix), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 权利金 dc.Add(new ExcelHelper.DataColumnModel("exer_mod", nameof(SuperviseReportOptionModel.ExerMod)));// 行权方式 dc.Add(new ExcelHelper.DataColumnModel("bp_obsv_day", nameof(SuperviseReportOptionModel.BpObsvDay)));// 期初观察日 dc.Add(new ExcelHelper.DataColumnModel("ep_obsv_day", nameof(SuperviseReportOptionModel.EpObsvDay)));// 期末观察日 dc.Add(new ExcelHelper.DataColumnModel("obsv_freq", nameof(SuperviseReportOptionModel.ObsvFreq)));// 观察频率 dc.Add(new ExcelHelper.DataColumnModel("exec_pric_rati_2", nameof(SuperviseReportOptionModel.ExecPricRati2), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 执行价格比例1 dc.Add(new ExcelHelper.DataColumnModel("exec_pric_rati_1", nameof(SuperviseReportOptionModel.ExecPricRati1), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 执行价格比例2 dc.Add(new ExcelHelper.DataColumnModel("exec_pric_2", nameof(SuperviseReportOptionModel.ExecPric2), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 执行价格1 dc.Add(new ExcelHelper.DataColumnModel("exec_pric_1", nameof(SuperviseReportOptionModel.ExecPric1), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 执行价格2 dc.Add(new ExcelHelper.DataColumnModel("exec_pric_3", nameof(SuperviseReportOptionModel.ExecPric3), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 执行价格3 dc.Add(new ExcelHelper.DataColumnModel("exec_pric_4", nameof(SuperviseReportOptionModel.ExecPric4), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 执行价格4 dc.Add(new ExcelHelper.DataColumnModel("barri_pric_rati_2", nameof(SuperviseReportOptionModel.BarriPricRati2), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 低障碍价格比例 dc.Add(new ExcelHelper.DataColumnModel("barri_pric_rati_1", nameof(SuperviseReportOptionModel.BarriPricRati1), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 高障碍价格比例 dc.Add(new ExcelHelper.DataColumnModel("barri_pric_2", nameof(SuperviseReportOptionModel.BarriPric2), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 障碍价格1 dc.Add(new ExcelHelper.DataColumnModel("barri_pric_1", nameof(SuperviseReportOptionModel.BarriPric1), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 障碍价格2 dc.Add(new ExcelHelper.DataColumnModel("highr_than_exec_prc_prft_rate", nameof(SuperviseReportOptionModel.HighrThanExecPrcPrftRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 高于执行价格收益率 dc.Add(new ExcelHelper.DataColumnModel("lowr_than_exec_prc_prft_rate", nameof(SuperviseReportOptionModel.LowrThanExecPrcPrftRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 低于执行价格收益率 dc.Add(new ExcelHelper.DataColumnModel("knock_in_prft_rate", nameof(SuperviseReportOptionModel.KnockInPrftRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 敲入收益率 dc.Add(new ExcelHelper.DataColumnModel("knock_out_prft_rate", nameof(SuperviseReportOptionModel.KnockOutPrftRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 敲出收益率 dc.Add(new ExcelHelper.DataColumnModel("range_prft", nameof(SuperviseReportOptionModel.RangePrft), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 区间收益 dc.Add(new ExcelHelper.DataColumnModel("crrc_cd", nameof(SuperviseReportOptionModel.CrrcCd)));// 货币代码 dc.Add(new ExcelHelper.DataColumnModel("makt_val", nameof(SuperviseReportOptionModel.MaktVal), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 市值 dc.Add(new ExcelHelper.DataColumnModel("delta", nameof(SuperviseReportOptionModel.Delta), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// Delta dc.Add(new ExcelHelper.DataColumnModel("vega", nameof(SuperviseReportOptionModel.Vega), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// Vega dc.Add(new ExcelHelper.DataColumnModel("gamma", nameof(SuperviseReportOptionModel.Gamma), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// Gamma dc.Add(new ExcelHelper.DataColumnModel("risk_free_rate", nameof(SuperviseReportOptionModel.RiskFreeRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 无风险利率 dc.Add(new ExcelHelper.DataColumnModel("divid_rate", nameof(SuperviseReportOptionModel.DividRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 连续股息率 dc.Add(new ExcelHelper.DataColumnModel("volat", nameof(SuperviseReportOptionModel.Volat), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 波动率 dc.Add(new ExcelHelper.DataColumnModel("cur_crdt_risk_exps", nameof(SuperviseReportOptionModel.CurCrdtRiskExps), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 当期信用风险敞口 dc.Add(new ExcelHelper.DataColumnModel("potnt_crdt_risk_exps", nameof(SuperviseReportOptionModel.PotntCrdtRiskExps), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 潜在信用风险敞口 dc.Add(new ExcelHelper.DataColumnModel("rpt_dt", nameof(SuperviseReportOptionModel.RptDt)));// 填报日期 dc.Add(new ExcelHelper.DataColumnModel("rpt_psn", nameof(SuperviseReportOptionModel.RptPsn)));// 填报人 #endregion using var openStream = file.OpenReadStream(); var dict = new ExcelHelper().ExcelToListT(dc.ToArray(), openStream, columnRowIndex: 2); if (dict.Count == 0) { return JsonSuccess("记录不存在"); } var list = dict.First().Value.Where(O => !O.ValueDate.IsNullOrWhiteSpace()).ToList(); if (list.Count == 0) { return JsonSuccess("记录不存在"); } new SuperviseReportOptionService(CurUser, null).ImportInfoToDb(list); } catch (Exception ex) { return JsonError("导入失败", ex.Message); } return JsonSuccess("导入成功"); } #endregion #region 兴证互换数据采集 [MyAuthorize("监管报告-集团互换数据采集")] public ActionResult supervise_EquitySwap() { ViewBag.valueDate = BLL.Eod.EodOperationBase.GetLastSettlementDate(valuedateBLL.ValueDate).ToString("yyyy-MM-dd"); return View(); } public JsonResult supervise_EquitySwapQuery(SuperviseReportReq req) { var service = new SuperviseReportSwapService(CurUser, req); var sList = req.DataSource == "系统" ? service.SearchReportList() : service.SearchReportList_Db(); var sum = new Dictionary() { { "SumNomnVal", 0 }, { "SumShare", 0 }, { "SumSrvlNomnVal", 0 }, { "SumXyzqPrftPay", 0 }, }; foreach (var item in sList.rows) { sum["SumNomnVal"] += item.NomnVal.Normalize(); sum["SumShare"] += item.Share.Normalize(); sum["SumSrvlNomnVal"] += item.SrvlNomnVal.Normalize(); sum["SumXyzqPrftPay"] += item.XyzqPrftPay.Normalize(); } sList.Sum = sum; return Json(sList); } public JsonResult SendSupervise_EquitySwap(SuperviseReportReq req) { req.page = 1; req.rows = 100000; SearchListResult sList = null; try { var service = new SuperviseReportSwapService(CurUser, req); if (req.DataSource == "系统") { sList = service.SearchReportList(); } else { sList = service.SearchReportList_Db(); } var sum = new Dictionary() { { "SumNomnVal", 0 }, { "SumShare", 0 }, { "SumSrvlNomnVal", 0 }, { "SumXyzqPrftPay", 0 }, }; foreach (var item in sList.rows) { sum["SumNomnVal"] += item.NomnVal.Normalize(); sum["SumShare"] += item.Share.Normalize(); sum["SumSrvlNomnVal"] += item.SrvlNomnVal.Normalize(); sum["SumXyzqPrftPay"] += item.XyzqPrftPay.Normalize(); } sList.Sum = sum; } catch (Exception ex) { return JsonError("生成失败", ex.Message); } var datas = new { List = sList.rows.ToList(), Sum = sList.Sum }; //获取盯市报告模板信息 var sourcePath = Server.MapPath("~/App_Docs"); var settleDocName = "兴证互换数据采集模板.xlsx"; var sourceFileName = Path.Combine(sourcePath, "导出模板", settleDocName); var targetPath = Path.Combine(sourcePath, req.ValueDate.ToString("yyyyMMdd")); if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } var targetFileName = Path.Combine(targetPath, $"EquitySwap_{req.ValueDate.ToString("yyyyMMdd")}.xlsx"); var modelDict = new Dictionary { {"Sheet1", datas} }; var path = ExcelTemplate.GeneratePDFFromExeclTemplate(sourcePath, sourceFileName, modelDict, targetPath, targetFileName, null, null, null, false, callback: (sheet) => { if (!datas.List.Any()) { sheet.First().InsertRow(3, 1, 2);//此模板无数据则插入空行,注意样式 } }); //补丁,返回一个相对地址 var relativePath = path.Substring(path.IndexOf("App_Docs") - 1); return JsonSuccess("生成成功", relativePath); } public JsonResult ImportSupervise_EquitySwap(IFormFile file) { try { var dc = new List(); #region 列配置 dc.Add(new ExcelHelper.DataColumnModel("hold_dt", nameof(SuperviseReportSwapModel.ValueDate)));// 持仓日期 dc.Add(new ExcelHelper.DataColumnModel("group_org_cd", nameof(SuperviseReportSwapModel.GroupCode)));// 集团机构代码 dc.Add(new ExcelHelper.DataColumnModel("org_name", nameof(SuperviseReportSwapModel.OrgName)));// 部门名称 dc.Add(new ExcelHelper.DataColumnModel("asset_cd", nameof(SuperviseReportSwapModel.AssetCode)));// 资产代码 dc.Add(new ExcelHelper.DataColumnModel("prtfl_cd", nameof(SuperviseReportSwapModel.PrtflCode)));// 投组代码 dc.Add(new ExcelHelper.DataColumnModel("cmb_cd", nameof(SuperviseReportSwapModel.CmbCode)));// 组合代码 dc.Add(new ExcelHelper.DataColumnModel("hold_acct", nameof(SuperviseReportSwapModel.HoldAcct)));// 持仓账户 dc.Add(new ExcelHelper.DataColumnModel("cfrm_achv_no", nameof(SuperviseReportSwapModel.CfrmAchvNo)));// 交易确认书编号 dc.Add(new ExcelHelper.DataColumnModel("cutp", nameof(SuperviseReportSwapModel.Cutp)));// 对手方 dc.Add(new ExcelHelper.DataColumnModel("cutp_no", nameof(SuperviseReportSwapModel.CutpNo)));// 对手方编号 dc.Add(new ExcelHelper.DataColumnModel("eqy_flag", nameof(SuperviseReportSwapModel.EqyFlag)));// 权益标志 dc.Add(new ExcelHelper.DataColumnModel("insm_tgt", nameof(SuperviseReportSwapModel.InsmTgt)));// 投资标的 dc.Add(new ExcelHelper.DataColumnModel("tgt_secu_cd", nameof(SuperviseReportSwapModel.TgtSecuCd)));// 标的证券代码 dc.Add(new ExcelHelper.DataColumnModel("exch_cd", nameof(SuperviseReportSwapModel.ExchCd)));// 交易所代码 dc.Add(new ExcelHelper.DataColumnModel("nomn_val", nameof(SuperviseReportSwapModel.NomnVal), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 名义本金 dc.Add(new ExcelHelper.DataColumnModel("share", nameof(SuperviseReportSwapModel.Share), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 份数 dc.Add(new ExcelHelper.DataColumnModel("bgn_dt", nameof(SuperviseReportSwapModel.BgnDt)));// 开始日期 dc.Add(new ExcelHelper.DataColumnModel("expr_dt", nameof(SuperviseReportSwapModel.ExprDt)));// 到期日期 dc.Add(new ExcelHelper.DataColumnModel("ahed_end_dt", nameof(SuperviseReportSwapModel.AhedEndDt)));// 提前终止日期 dc.Add(new ExcelHelper.DataColumnModel("valtn_days", nameof(SuperviseReportSwapModel.ValtnDays), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 估值天数 dc.Add(new ExcelHelper.DataColumnModel("fix_prft_pay_type", nameof(SuperviseReportSwapModel.FixPrftPayType)));// 固定收益支付类型 dc.Add(new ExcelHelper.DataColumnModel("fix_prft_rate", nameof(SuperviseReportSwapModel.FixPrftRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 固定收益率 dc.Add(new ExcelHelper.DataColumnModel("flot_prft_pay_day", nameof(SuperviseReportSwapModel.FlotPrftPayDay)));// 浮动收益支付类型 dc.Add(new ExcelHelper.DataColumnModel("enh_prft_rate", nameof(SuperviseReportSwapModel.EnhPrftRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 增强收益率 dc.Add(new ExcelHelper.DataColumnModel("relp_flag", nameof(SuperviseReportSwapModel.RelpFlag)));// 关联方标志 dc.Add(new ExcelHelper.DataColumnModel("xyzq_prft_pay", nameof(SuperviseReportSwapModel.XyzqPrftPay), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 兴证收益支付 dc.Add(new ExcelHelper.DataColumnModel("prtc_rate", nameof(SuperviseReportSwapModel.PrtcRate), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 参与率 dc.Add(new ExcelHelper.DataColumnModel("crrc_cd", nameof(SuperviseReportSwapModel.CrrcCd)));// 货币代码 dc.Add(new ExcelHelper.DataColumnModel("hedg_type_cd", nameof(SuperviseReportSwapModel.HedgTypeCd)));// 对冲类型代码 dc.Add(new ExcelHelper.DataColumnModel("valid_hedg_flag", nameof(SuperviseReportSwapModel.ValidHedgFlag)));// 有效对冲标志 dc.Add(new ExcelHelper.DataColumnModel("srvl_nomn_val", nameof(SuperviseReportSwapModel.SrvlNomnVal), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 监管名义价值 dc.Add(new ExcelHelper.DataColumnModel("tgt_bp_prc", nameof(SuperviseReportSwapModel.TgtBpPrc), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 标的期初价格 dc.Add(new ExcelHelper.DataColumnModel("cur_crdt_risk_exps", nameof(SuperviseReportSwapModel.CurCrdtRiskExps), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 当期信用风险敞口 dc.Add(new ExcelHelper.DataColumnModel("potnt_crdt_risk_exps", nameof(SuperviseReportSwapModel.PotntCrdtRiskExps), (cv, obj) => ConvertToDoubleNull(cv?.ToString())));// 潜在信用风险敞口 dc.Add(new ExcelHelper.DataColumnModel("rpt_dt", nameof(SuperviseReportSwapModel.RptDt)));// 填报日期 dc.Add(new ExcelHelper.DataColumnModel("rpt_psn", nameof(SuperviseReportSwapModel.RptPsn)));// 填报人 #endregion using var openStream = file.OpenReadStream(); var dict = new ExcelHelper().ExcelToListT(dc.ToArray(), openStream, columnRowIndex: 2); if (dict.Count == 0) { return JsonSuccess("记录不存在"); } var list = dict.First().Value.Where(O => !O.ValueDate.IsNullOrWhiteSpace()).ToList(); if (list.Count == 0) { return JsonSuccess("记录不存在"); } new SuperviseReportSwapService(CurUser, null).ImportInfoToDb(list); } catch (Exception ex) { return JsonError("导入失败", ex.Message); } return JsonSuccess("导入成功"); } #endregion #region 场外信用额度月报 [MyAuthorize("监管报告-监管月报")] public ActionResult supervise_Monthly_Report() { ViewBag.valueDate = BLL.Eod.EodOperationBase.GetLastSettlementDate(valuedateBLL.ValueDate).ToString("yyyy-MM"); ViewBag.reportTypes = new Dictionary() { //{"基差贸易及仓单服务业务MR001-007","BasisTradeWarehouseReceiptService"}, //{"合作套保业务MR008-010","Hedging"}, {"商品衍生品交易MR008-009","FutrueTrade"}, {"金融衍生品交易MR010-011","FinanceTrade"}, //{"期货交易-一般法人账户MR019","GeneralAccount"}, //{"期货交易-特殊法人账户MR020","SpecialAccount"}, //{"场内期权交易MR021","ExchangeTrade"}, //{"场内期权做市业务MR022","ExchangeMarket"}, //{"主要经营与财务指标MR023-024","MainBusinessFinancialIndicators"}, {"场外衍生品业务客户情况MR012","Credit"}, //{"关注类客户MR026-027","ConcernedClient"}, //{"期货做市业务MR028","FutrueMarket"}, }; return View(); } public FileContentResult SendSuperviseMonthlyReport(DateTime date, List reportTypes) { var req = new SuperviseReportReq(); req.ValueDate = date; req.page = 1; req.rows = 100000; var dict = new Dictionary(); try { var userinfo = CurUser.Clone(); var futrueTradeTask = Task.Run(() => { return new SuperviseReportMonthlyService(userinfo).SearchSuperviseTradeReportList(date, true); }); var finalceTradeTask = Task.Run(() => { return new SuperviseReportMonthlyService(userinfo).SearchSuperviseTradeReportList(date, false); }); var creditTask = Task.Run(() => { return new SuperviseReportMonthlyService(userinfo).SearchSuperviseCreditReportList(req); }); dict["Credit"] = creditTask.Result; //不存在任何行时,添加一条空记录,生成一个空白行,否则生成时会报"Range is invalid" dict["CreditTable"] = creditTask.Result.CreditTable.Any() ? creditTask.Result.CreditTable.ToList() : new List() { new SuperviseReportMonthlyCreditRowModel() }; dict["FutrueTrade"] = futrueTradeTask.Result; dict["FinalceTrade"] = finalceTradeTask.Result; } catch (Exception ex) { throw new Exception("生成失败", ex); } var sourcePath = Server.MapPath("~/App_Docs"); var settleDocName = "风险管理公司月度报表RM-MR.V4.1-2001模板.xlsx"; var sourceFileName = Path.Combine(sourcePath, "导出模板", settleDocName); var buffer = ExcelGenerator.UseTemplateGenerator(sourceFileName).AddVariable(dict).GenerateBytes(); return File(buffer, xlsxMimeType, $"风险管理公司月度报表RM-MR.V4.1-{date.ToString("yyMM")} -{PS.Config.CompanyFullName}.xlsx"); } public ActionResult supervise_Credit_Report(DateTime date) { ViewBag.valueDate = date.ToString("yyyy-MM-dd"); return View("~/Views/supervise_report/MonthlyReportPart/supervise_Credit_Report.cshtml"); } public JsonResult superviseCreditReportQuery(SuperviseReportReq req) { var sList = new SuperviseReportMonthlyService(CurUser).SearchSuperviseCreditReportList(req); return Json(sList); } public ActionResult supervise_MonthlyTrade_Report(DateTime date) { ViewBag.valueDate = date.ToString("yyyy-MM-dd"); var model = new SuperviseReportMonthlyService(CurUser).SearchSuperviseTradeReportList(date, true); return View("~/Views/supervise_report/MonthlyReportPart/supervise_MonthlyTrade_Report.cshtml", model); } public ActionResult supervise_FinanceTrade_Report(DateTime date) { ViewBag.valueDate = date.ToString("yyyy-MM-dd"); var model = new SuperviseReportMonthlyService(CurUser).SearchSuperviseTradeReportList(date, false); return View("~/Views/supervise_report/MonthlyReportPart/supervise_FinanceTrade_Report.cshtml", model); } #endregion #region 证券业报送 [MyAuthorize("监管报告-证券业报送")] public ActionResult supervise_SAC_Report() { if (PS.Config.ErpElement.SecuritiesEnvironment) { ViewBag.valueDate = valuedateBLL.ValueDate.ToString("yyyy-MM-dd"); var monthList = new List(); var quarterList = new List(); for (var i = 0; i < PS.Config.ErpElement.ReportMaxMonth; i++) { var date = DateTime.Today.AddMonths(-i); monthList.Add(new SelectListItem() { Text = date.ToString("yyyy年MM月"), Value = date.ToString("yyyy-MM-01"), Selected = (i == 1) }); if (i % 3 == 0) { var quarter = (date.Month - 1) / 3 + 1; quarterList.Add(new SelectListItem() { Text = $"{date.ToString("yyyy年")}{quarter}季度", Value = date.ToString("yyyy-MM-01"), Selected = i == 3 }); } } quarterList.Add(new SelectListItem() { Text = $"半年报", Value = DateTime.Today.AddMonths(-6).ToString("yyyy-MM-15") }); ViewBag.monthList = monthList; ViewBag.quarterList = quarterList; return View(); } else { return ShowError("页面不存在"); } } public JsonResult superviseSACReportQuery(ReportInfo req) { if (PS.Config.ErpElement.SecuritiesEnvironment) { try { List filePath = new ReportService(CurUser).Execute(req); return Json(Return.Success(filePath.Select(O => O.FileTag))); } catch (ServiceException ex) { var errFilePath = ""; if (ex.Tag != null && ex.Tag is ExceptionExtensionInfo) { var obj = (ExceptionExtensionInfo)ex.Tag; if (obj.Tag.Count > 0) { string key = Guid.NewGuid().ToString(); Server.CacheProvider.Set(key, obj.Tag, DateTime.Now.AddMinutes(1)); ex.Tag = key; } errFilePath = obj.ErrFilePath; } if (ex.Tag != null) { Server.CacheProvider.Set($"File_{ex.Tag}", errFilePath, DateTime.Now.AddMinutes(1)); } return Json(Return.Fail(ex.Message, ex.Tag)); } catch (Exception ex) { LogFactory.GetLogger().Error(ex); return Json(Return.Fail(ex.Message)); } } else { return JsonError(); } } /// /// 报告预览 /// /// /// /// /// public ActionResult supervisePreview(string fileTag, string fileType) { var sacList = new ReportService(CurUser).GetSupervisePreview(fileTag, fileType); ViewBag.ShowMessage = false; return View(sacList); } /// /// 报告错误信息展示 /// /// /// public ActionResult superviseErrorInfo(string key) { var sacInfoList = Server.CacheProvider.Get(key) as List; var path = Server.CacheProvider.Get($"File_{key}") as string; ViewBag.ShowMessage = true; ViewBag.DownloadPath = path; return View("supervisePreview", sacInfoList); } public JsonResult QuerySACReportInfo(DateTime date) { var info = new ReportService(CurUser).QueryReportInfo(date); return Json(info); } public ActionResult exportDetails(string encryptId, string fileTag) { var id = DecryptInt(encryptId); var service = new ReportService(CurUser); var info = service.QueryDetails(id); if (info.Count == 0) { throw new ServiceException("报送记录不存在"); } var dict = new Dictionary>(); foreach (var item in info) { if (item["ExceId"] != "-") { continue; } try { dict[item["FileTag"] + "_Send"] = service.GetSupervisePreview(item["FileTag"], "send"); } catch { } try { dict[item["FileTag"] + "_Recv"] = service.GetSupervisePreview(item["FileTag"], "recv"); } catch { } } if (dict.Count == 0) { throw new ServiceException("报送记录不存在"); } var dc = new DataSet(); foreach (var item in dict) { var dt = new DataTable(item.Key.Substring(32)); dt.Columns.Add("字段描述"); dt.Columns.Add("字段名"); dt.Columns.Add("值"); AddRows(item.Value, dt); dc.Tables.Add(dt); } new Commons.ExcelHelper().DataSetToExcel(dc, true, out var buffer); return File(buffer, "application/ms-excel", $"{fileTag}.xlsx"); } private void AddRows(List list, DataTable dt) { foreach (var item in list) { dt.Rows.Add(new[] { item.FieldName_CN, item.FieldName, item.FieldValue }); AddRows(item.SubMaps, dt); } } [MyAuthorize("监管报告-证券业报送")] public JsonResult QueryDetails(string encryptId) { var id = DecryptInt(encryptId); var info = new ReportService(CurUser).QueryDetails(id); return Json(info); } public JsonResult QuyerSACReportHistory(BaseSearchReq req) { if (string.IsNullOrWhiteSpace(req.sidx)) { req.sidx = "ReportDate,OptDate"; req.sord = "desc"; } var query = new ReportService(CurUser).QueryReportHistoryFromDb(); if (!CurUser.Roles.Any(O => O.Name == "系统管理员") && PS.GetErpConfig().NeedIsolateSACInfo) { query = query.Where(O => O.optUserId == UserId); } query = query.Where(O => O.ReportType == DBModels.Enums.SuperviseReportTypeEnum.SAC); var fileInfos = query.ToSearchList(req); if (fileInfos?.rows != null) { foreach (var item in fileInfos.rows) { item.ReportReponsePath = System.Text.RegularExpressions.Regex.Replace(item.ReportReponsePath, @"^.+(?=\WApp_Docs\WDownload)", "").Replace("\\", "/"); item.OptName = UserBLL.GetNameById((int?)item.optUserId); } } return Json(fileInfos); } public JsonResult SendReport(string fileId) { var id = DecryptInt(fileId); return Json(new ReportService(CurUser).SentReport(id)); } public JsonResult DeleteReport(string fileTag) { return Json(new ReportService(CurUser).DeleteReport(fileTag)); } [MyAuthorize("监管报告-证券业报送")] [DisableRequestSizeLimit] public JsonResult UploadSACReportFile(string fileType, DateTime date) { LogFactory.GetLogger("UploadEventReportFile").Info("开始上传:"); List fileInfos = new List(); if (date < DateTime.Now.AddYears(-1)) { LogFactory.GetLogger("UploadEventReportFile").Info("初始化报告日期"); if (fileType != "季度报告") { date = DateTime.Today; } else { return Json(Return.Fail("上传失败,请选择文件日期")); } } if (fileType == "季度报告") { LogFactory.GetLogger("UploadEventReportFile").Info("检查季度报告类型"); if (date.Day == 15) { fileType = "半年报"; } } try { var service = new TempFilesService(CurUser); LogFactory.GetLogger("UploadEventReportFile").Info("文件数量:" + Request.Form.Files.Count); for (var i = 0; i < Request.Form.Files.Count; i++) { var file = Request.Form.Files[i]; var filePath = $"/App_Docs/Download/Report/{UserId}/{fileType}/{date.ToString("yyyyMMdd")}/"; string absPath = Server.MapPath(filePath); LogFactory.GetLogger("UploadEventReportFile").Info("保存地址:" + absPath); if (!Directory.Exists(absPath)) { Directory.CreateDirectory(absPath); } var name = $"{date.ToString("yyyyMMdd")}{file.FileName}"; var fileName = Path.Combine(absPath, name); file.SaveAs(fileName); fileInfos.Add(new tempfile() { createDate = date, fileType = fileType, fileName = name, filePath = filePath, optDate = DateTime.Now, optUserName = CurUser.UserName, validStatus = true }); LogFactory.GetLogger("UploadEventReportFile").Info($"文件 {i + 1} 保存成功"); var fileLength = new FileInfo(fileName).Length; if (fileType == "报送模板" && Path.GetExtension(name).ToLower() == ".zip") { LogFactory.GetLogger("UploadEventReportFile").Info($"处理报送模板"); if (fileLength > ReportStatusModel.MaxFileLength)//小于200MB { return Json(Return.Fail("上传失败,单次上传模板文件大小不应超过200MB")); } var pathName = Path.GetFileNameWithoutExtension(fileName); var temp = Path.Combine(absPath, pathName); if (Directory.Exists(temp)) { Directory.Delete(temp, true); } LogFactory.GetLogger("UploadEventReportFile").Info($"解压"); var outPath = ZipHelper.unZipFile(fileName, absPath, out string msg); if (msg.StartsWith("解压成功")) { LogFactory.GetLogger("UploadEventReportFile").Info($"成功"); var aPath = Path.Combine(outPath, "附件"); if (Directory.Exists(aPath)) { var files = Directory.EnumerateFiles(aPath); foreach (var item in files) { if (new FileInfo(item).Length > ReportStatusModel.MaxAnnexLength)//小于30MB { return Json(Return.Fail("上传失败,模板文件中单个附件文件大小不应超过30MB")); } } } } else { LogFactory.GetLogger("UploadEventReportFile").Info($"失败"); LogFactory.GetLogger("UploadEventReportFile").Error(msg); return Json(Return.Fail("上传失败,该文件无法正常解压!")); } } else { if (fileLength > ReportStatusModel.MaxAnnexLength)//小于30MB { return Json(Return.Fail("上传失败,单个附件文件大小不应超过30MB")); } List files = null; switch (fileType) { case "重大事项报告": case "其他事项报告": files = service.QueryTempFile(date, fileType); break; case "季度报告": case "半年报": ReportBaseService.GetQuarterRange(date, out var minDate, out var maxDate); files = service.QueryTempFile(minDate, maxDate, "季度报告"); break; default: break; } foreach (var item in files) { if (item.fileName == name) { continue; } var path = Server.MapPath(item.filePath); if (System.IO.File.Exists(path)) { fileLength += new FileInfo(Server.MapPath(item.filePath)).Length; } } if (fileLength > ReportStatusModel.MaxFileLength)//小于200MB { return Json(Return.Fail("上传失败,周期内已上传附件文件总大小不应超过200MB")); } } } new TempFilesService(CurUser).SaveTempFile(fileInfos); LogFactory.GetLogger("UploadEventReportFile").Info($"入库完成;处理完成;"); return Json(Return.Success("上传成功")); } catch (Exception ex) { LogFactory.GetLogger("UploadEventReportFile").Error(ex); } return Json(Return.Fail("上传失败")); } [MyAuthorize("监管报告-证券业报送")] public JsonResult UploadFile(string fileType) { LogFactory.GetLogger("UploadFile").Info("开始上传修改编号附件"); try { var service = new TempFilesService(CurUser); LogFactory.GetLogger("UploadFile").Info("文件数量:" + Request.Form.Files.Count); for (var i = 0; i < Request.Form.Files.Count; i++) { var file = Request.Form.Files[i]; if (fileType == "修改编号") { using var inputStream = file.OpenReadStream(); ReportService.EditContractNumber(inputStream); } string filePath = $"/App_Docs/Download/Report/{UserId}/{fileType}/{DateTime.Now.ToString("yyyyMMdd")}/"; string absPath = Server.MapPath(filePath); LogFactory.GetLogger("UploadFile").Info("保存地址:" + absPath); if (!Directory.Exists(absPath)) { Directory.CreateDirectory(absPath); } var name = $"{DateTime.Now.ToString("yyyyMMddHHmmssfff")}{file.FileName}"; var fileName = Path.Combine(absPath, name); file.SaveAs(fileName); LogFactory.GetLogger("UploadFile").Info($"文件 {i + 1} 保存成功:{fileName}"); } LogFactory.GetLogger("UploadFile").Info($"入库完成;处理完成;"); return Json(Return.Success("修改成功")); } catch (Exception ex) { LogFactory.GetLogger("UploadFile").Error(ex); return Json(Return.Fail("修改失败" + ex.Message)); } } public JsonResult QueryEventReportFile(BaseSearchReq req) { if (string.IsNullOrWhiteSpace(req.sidx)) { req.sidx = "optDate"; req.sord = "desc"; } var service = new TempFilesService(CurUser); service.QueryAllFile = CurUser.Roles.Any(O => O.Name == "系统管理员") || !PS.GetErpConfig().NeedIsolateSACInfo; var query = service.QueryTempFileFromDb(DateTime.MinValue, DateTime.MinValue); var fileInfos = query.ToSearchList(req); return Json(fileInfos); } public JsonResult DelEventReportFile(string encryptId) { try { var service = new TempFilesService(CurUser); service.QueryAllFile = CurUser.Roles.Any(O => O.Name == "系统管理员"); service.DeleteTempFile(encryptId); return JsonSuccess(); } catch (Exception ex) { return JsonError(ex.Message); } } public JsonResult QueryReportDesc() { var query = new ReportService(CurUser).QueryReportDesc(); return Json(Return.Success(query)); } public JsonResult SaveReportDesc(Dictionary> obj) { try { new ReportService(CurUser).SaveReportDesc(obj); return Json(Return.Success("保存成功")); } catch (Exception ex) { LogFactory.GetLogger("SaveReportDesc").Error(ex); return Json(Return.Fail("保存失败!")); } } #endregion #region 其他报告 [MyAuthorize("结算管理-其他报告")] public ActionResult ExtendReport() { if (GlobalConfig.ExtendReportType != null && GlobalConfig.ExtendReportType.Count > 0) { return View(); } else { return ShowError("受支持的报告类型不存在"); } } /// /// 其他报告导出 /// /// /// public JsonResult SendExtendReport(SuperviseReportReq req) { req.page = 1; req.rows = 100000; var service = ExtendReportBaseService.ServiceFactory(CurUser, req); Dictionary modelDict = null; try { modelDict = service.SearchReportInfo(); } catch (Exception ex) { LogFactory.GetLogger("SendExtendReport").Error(ex); return JsonError("生成失败: " + ex.Message); } //获取报告模板信息 var sourcePath = Server.MapPath("~/App_Docs"); var sourceFileName = Path.Combine(sourcePath, "导出模板", service.TemplateName); var targetPath = Path.Combine(sourcePath, req.ValueDate.ToString("yyyyMMdd")); if (!Directory.Exists(targetPath)) { 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); //补丁,返回一个相对地址 var relativePath = path.Substring(path.IndexOf("App_Docs") - 1); return JsonSuccess("生成成功", relativePath); //switch (req.DataSource) //{ // case "成交明细汇总": // var modelDict = new Dictionary { { "交易确认", datas } }; // var path = ExcelTemplate.GeneratePDFFromExeclTemplate(sourcePath, sourceFileName, modelDict, targetPath, targetFileName, null, null, null, false); // //补丁,返回一个相对地址 // var relativePath = path.Substring(path.IndexOf("App_Docs") - 1); // return JsonSuccess("生成成功", relativePath); // case "风险资本准备计算表": // WordHelper.GenerateFromTemplate(sourceFileName, datas as Dictionary, targetFileName); // return JsonSuccess("生成成功", Path.Combine(@"\App_Docs", req.ValueDate.ToString("yyyyMMdd"), service.TargetFileName)); // default: // return JsonError("报表未实现"); //} } #endregion public double? ConvertToDoubleNull(string str) { return double.TryParse(str, out var v) ? v : null; } public ActionResult ExportDetailsV2(string encryptId, string fileTag) { var id = DecryptInt(encryptId); var path = $"~/App_Docs/Download/Report/Output/{CurUser.UserId}/{fileTag}报送文件{DateTime.Now:yyyyMMddHHmmss}.zip"; var absPath = OtcAppContext.MapPath(path); new ReportService(CurUser).ExportDetailsV2(id, fileTag, path); return File(System.IO.File.ReadAllBytes(absPath), "application/zip", Path.GetFileName(path)); } /// /// 是否上传过模板 /// /// public JsonResult IsUploadFile(DateTime ReportDate) { var tempFilesService = new TempFilesService(CurUser); var path = tempFilesService.QueryTempFile(ReportDate, "报送模板").Select(O => O.filePath).FirstOrDefault(); return Json(!string.IsNullOrWhiteSpace(path)); } public ActionResult DownloadReportFile(string path) { var result = OtcAppContext.MapPath(path); var bytes = System.IO.File.ReadAllBytes(result); return File(bytes, "application/zip", $"报送文件{DateTime.Now:yyyyMMddHHmmss}.zip"); } } }