1461 lines
71 KiB
C#
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");
|
|
}
|
|
}
|
|
} |