Files
zszq-trs/YLErpWeb/Controllers/supervise_reportController.cs
T
2025-08-15 17:42:58 +08:00

1461 lines
71 KiB
C#

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
{
/// <summary>
/// 监管报告
/// </summary>
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<SuperviseReportTodayModel> 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<string, object>
{
{"成交报送模板", 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<SuperviseReportPositionModel> 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<string, object>
{
{"持仓报送模板", 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<string, object>
{
{"希腊字母", sumModel},
{"场外期权头寸", listModel}
};
var mergeInfo = new Dictionary<string, int>();
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<ExcelWorksheets> 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<SuperviseReportClientCashModel> sList = null;
try
{
sList = new SuperviseReportClientCashService(CurUser).SearchSuperviseReportList(req);
}
catch (Exception ex)
{
throw new Exception("生成失败", ex);
}
var list = new List<ExpandoDictionary<string, object>>();
var properties = typeof(SuperviseReportClientCashModel).GetProperties();
foreach (var item in sList.rows)
{
var row = new Dictionary<string, object>();
foreach (var prop in properties)
{
row[prop.Name] = prop.GetValue(item);
}
list.Add(new ExpandoDictionary<string, object>(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<string, object>
{
{"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<int> 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<int> 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<string, double>()
{
{ "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<SuperviseReportOptionModel> sList = null;
try
{
var service = new SuperviseReportOptionService(CurUser, req);
if (req.DataSource == "系统")
{
sList = service.SearchReportList();
}
else
{
sList = service.SearchReportList_Db();
}
var sum = new Dictionary<string, double>()
{
{ "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<string, object>
{
{"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<ExcelHelper.DataColumnModel>();
#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<SuperviseReportOptionModel>(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<string, double>()
{
{ "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<SuperviseReportSwapModel> sList = null;
try
{
var service = new SuperviseReportSwapService(CurUser, req);
if (req.DataSource == "系统")
{
sList = service.SearchReportList();
}
else
{
sList = service.SearchReportList_Db();
}
var sum = new Dictionary<string, double>()
{
{ "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<string, object>
{
{"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<ExcelHelper.DataColumnModel>();
#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<SuperviseReportSwapModel>(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<string, string>()
{
//{"基差贸易及仓单服务业务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<string> reportTypes)
{
var req = new SuperviseReportReq();
req.ValueDate = date;
req.page = 1;
req.rows = 100000;
var dict = new Dictionary<string, object>();
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<SuperviseReportMonthlyCreditRowModel>() { 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<SelectListItem>();
var quarterList = new List<SelectListItem>();
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<SuperviseReport> 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();
}
}
/// <summary>
/// 报告预览
/// </summary>
/// <param name="fileName"></param>
/// <param name="fileTag"></param>
/// <param name="fileType"></param>
/// <returns></returns>
public ActionResult supervisePreview(string fileTag, string fileType)
{
var sacList = new ReportService(CurUser).GetSupervisePreview(fileTag, fileType);
ViewBag.ShowMessage = false;
return View(sacList);
}
/// <summary>
/// 报告错误信息展示
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public ActionResult superviseErrorInfo(string key)
{
var sacInfoList = Server.CacheProvider.Get(key) as List<SacInfo>;
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<string, List<SacInfo>>();
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<SacInfo> 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<tempfile> fileInfos = new List<tempfile>();
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<tempfile> 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<string, Dictionary<string, string>> 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("受支持的报告类型不存在");
}
}
/// <summary>
/// 其他报告导出
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public JsonResult SendExtendReport(SuperviseReportReq req)
{
req.page = 1;
req.rows = 100000;
var service = ExtendReportBaseService.ServiceFactory(CurUser, req);
Dictionary<string, object> 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<string, object> { { "交易确认", 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<string, object>, 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));
}
/// <summary>
/// 是否上传过模板
/// </summary>
/// <returns></returns>
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");
}
}
}