Files
zszq-trs/YLErpWeb/Controllers/DownloadController.cs
2024-05-09 14:06:26 +08:00

283 lines
13 KiB
C#

using System.Text;
using YLErp.Modules.TradeDalModule;
using YLErp.Office.ExcelModule;
namespace YLErp.Web.Controllers
{
/// <summary>
/// 这个控制器主要解决浏览器端模板文件被缓存而导致不能下载最新模板文件
/// </summary>
public class DownloadController : BaseController
{
const string MimeType_octet = "application/octet-stream";
/// <summary>
/// 下载模板
/// </summary>
[ResponseCache(NoStore = true)]
public ActionResult ImportTemplate(string id)
{
string filePath;
var result = GetOtcOptionImportTempate(id);
if (result != null)
{
return result;
}
switch (id)
{
case "结算价上传模板":
filePath = "/App_Docs/导入模板/结算价上传模板.xlsx";
break;
case "场内交易导入模板":
filePath = "/App_Docs/导入模板/场内交易导入模板.xlsx";
break;
case "通道业务交易导入模板":
filePath = "/App_Docs/导入模板/通道业务交易导入模板.csv";
break;
case "价差期权交易导入模板":
{
var template = StructureTradeImportService.GetCsvTemplate();
var data = Encoding.UTF8.GetBytes(template);
var buffer = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
return File(buffer, "text/comma-separated-values", "价差期权交易导入模板.csv");
}
case "批量了结模板":
filePath = "/App_Docs/导入模板/批量了结模板.xlsx";
break;
case "个股除权信息模板":
filePath = "/App_Docs/导入模板/个股除权信息模板.xlsx";
break;
case "黑名单客户模板":
filePath = "/App_Docs/导入模板/黑名单客户模板.xlsx";
break;
case "标的品种预付金参数导入模板":
filePath = "/App_Docs/导入模板/标的品种预付金参数导入模板.xlsx";
break;
case "标的资产预付金参数导入模板":
filePath = "/App_Docs/导入模板/标的资产预付金参数导入模板.xlsx";
break;
case "篮子标的导入模板":
filePath = "/App_Docs/导入模板/篮子标的导入模板.xlsx";
break;
case "个股黑(白)名单导入模板":
filePath = "/App_Docs/导入模板/个股黑(白)名单导入模板.xlsx";
break;
case "汇率维护模板":
filePath = PS.Config.Company == Configuration.CompanyEnum.中金
? "/App_Docs/导入模板/汇率维护模板(中金).xlsx" : "/App_Docs/导入模板/汇率维护模板.xlsx";
break;
case "历史回测维度序列模板":
filePath = "/App_Docs/导入模板/历史回测维度序列导入模板.xlsx";
break;
case "限额指标设置(标的汇总维度)":
filePath = "/App_Docs/导入模板/导入限额指标.xlsx";
break;
default: return ShowError("模板文件不存在");
}
filePath = Server.MapPath(filePath);
var fi = new FileInfo(filePath);
if (fi.Exists)
{
return PhysicalFile(filePath, MimeType_octet, fi.Name);
}
return ShowError("模板文件不存在");
}
/// <summary>
/// 获取场外期权交易导入模板
/// </summary>
private FileResult GetOtcOptionImportTempate(string id)
{
string filePath = null;
byte[] buffer = null;
switch (id)
{
case "场外期权交易导入模板":
//filePath = "/App_Docs/导入模板/场外期权交易导入模板.xlsx";
buffer = GenerateSpecialOptionImportTemplate(null, null);
break;
case "场外期权交易导入模板(香草)":
buffer = GenerateSpecialOptionImportTemplate("香草期权", new[] { "基本要素", "结构化交易" });
break;
case "场外期权交易导入模板(障碍)":
buffer = GenerateSpecialOptionImportTemplate("障碍期权", new[] { "基本要素", "障碍期权", "敲入观察日设置" });
break;
case "场外期权交易导入模板(双鲨)":
buffer = GenerateSpecialOptionImportTemplate("双鲨期权", new[] { "基本要素", "双鲨期权", "敲入观察日设置" });
break;
case "场外期权交易导入模板(二元)":
buffer = GenerateSpecialOptionImportTemplate("二元期权", new[] { "基本要素", "二元期权" });
break;
case "场外期权交易导入模板(亚式)":
buffer = GenerateSpecialOptionImportTemplate("亚式期权", new[] { "基本要素", "亚式期权" });
break;
case "场外期权交易导入模板(合成价差)":
buffer = GenerateSpecialOptionImportTemplate("合成价差期权", new[] { "基本要素", "组合标的" });
break;
case "场外期权交易导入模板(区间累积)":
buffer = GenerateSpecialOptionImportTemplate("区间累积期权", new[] { "基本要素", "区间累积期权" });
break;
case "场外期权交易导入模板(气囊结构)":
buffer = GenerateSpecialOptionImportTemplate("气囊结构", new[] { "基本要素", "气囊结构" });
break;
case "场外期权交易导入模板(收益增强)":
buffer = GenerateSpecialOptionImportTemplate("收益增强结构", new[] { "基本要素", "收益增强结构" });
break;
case "场外期权交易导入模板(凤凰)":
buffer = GenerateSpecialOptionImportTemplate("凤凰期权", new[] { "基本要素", "凤凰期权", "敲入观察日设置", "敲出观察日设置" });
break;
case "场外期权交易导入模板(雪球)":
buffer = GenerateSpecialOptionImportTemplate("雪球期权", new[] { "基本要素", "雪球期权", "敲入观察日设置", "敲出观察日设置" });
break;
case "场外期权交易导入模板(累计)":
buffer = GenerateSpecialOptionImportTemplate("累计期权", new[] { "基本要素", "累计期权", "敲出观察日设置" });
break;
case "场外期权交易导入模板(累计三段式)":
buffer = GenerateSpecialOptionImportTemplate("累计期权三段式", new[] { "基本要素", "累计期权三段式", "敲出观察日设置" });
break;
case "场外期权交易导入模板(现金流)":
buffer = GenerateSpecialOptionImportTemplate("现金流交易", new[] { "基本要素", "现金流交易" });
break;
case "场外期权交易导入模板(自定义)":
buffer = GenerateSpecialOptionImportTemplate("自定义交易", new[] { "基本要素", "了结信息" });
break;
case "场外期权交易导入模板(Risky)":
buffer = GenerateSpecialOptionImportTemplate("Risky期权", new[] { "基本要素", "Risky期权" });
break;
default: return null;
}
if (filePath != null)
{
return PhysicalFile(filePath, MimeType_octet, id + ".xlsx");
}
if (buffer != null)
{
return File(buffer, MimeType_octet, id + ".xlsx");
}
return null;
}
private byte[] GenerateSpecialOptionImportTemplate(string tradeType, string[] reservedGroups)
{
var templateFilePath = Server.MapPath("~/App_Docs/导入模板/场外期权交易导入模板.xlsx");
using (var ms = new MemoryStream(0))
{
var fileBytes = System.IO.File.ReadAllBytes(templateFilePath);
ms.Write(fileBytes, 0, fileBytes.Length);
var excelWrap = new ExcelBookWrap(ms, "场外期权交易导入模板.xlsx");
var sheetWrap = excelWrap.GetSheet(1);
var rowWrap = sheetWrap.GetRow(1);
var cols = rowWrap.GetUsedCols();
foreach (var col in cols)
{
var val = col.GetValue().TrimToEmpty();
if (reservedGroups != null && !reservedGroups.Contains(val)&&!string.IsNullOrEmpty(val))
{
var colRange = col.GetRelatedColumnRange();
sheetWrap.BatchColumnCommand(val != "了结信息" ? ExcelBatchColumnCommand.hide : ExcelBatchColumnCommand.expand, colRange);
}
}
//设置结构类型下拉选项
//rowWrap = sheetWrap.GetRow(2);
//var cell = rowWrap.GetUsedCols().Where(n => n.GetValue().TrimToNull() == "结构类型").FirstOrDefault();
//if (!cell.IsEmpty)
//{
// var letter = cell.GetColumnLetter();
// sheetWrap.SetAllowedValues($"{letter}3:{letter}65536", new[] { tradeType });
//}
if (PS.Config.ErpElement.SaleMode == YLErp.Configuration.Enums.SaleMode.CustomerManager)
{
rowWrap = sheetWrap.GetRow(2);
cols = rowWrap.GetUsedCols();
foreach (var col in cols)
{
var val = col.GetValue().TrimToEmpty();
if (val == "销售员")
{
col.SetValue("客户经理");
}
}
var sheetWrap2 = excelWrap.GetSheet(2);
rowWrap = sheetWrap2.GetRow(43);
cols = rowWrap.GetUsedCols();
foreach (var col in cols)
{
var val = col.GetValue().TrimToEmpty();
if (val == "销售员")
{
col.SetValue("客户经理");
}
if (val == "多个销售员时用半角‘,’分隔")
{
col.SetValue("多个客户经理时用半角‘,’分隔");
}
}
}
if ((tradeType == "累计期权" || tradeType == null))
{
rowWrap = sheetWrap.GetRow(2);
cols = rowWrap.GetUsedCols();
foreach (var col in cols)
{
var val = col.GetValue().TrimToEmpty();
if (val == "看涨乘数")
{
if (PS.Config.ErpElement.AccumulatorShowMultiplier1)
{
col.SetValue("杠杆倍数");
}
}
else if (val == "杠杆倍数")
{
if (!PS.Config.ErpElement.AccumulatorShowMultiplier1)
{
col.SetValue("看涨乘数");
}
}
else if (val == "看跌乘数")
{
if (PS.Config.ErpElement.AccumulatorShowMultiplier1)
{
sheetWrap.BatchColumnCommand(ExcelBatchColumnCommand.hide, col.GetColumnIndex(), col.GetColumnIndex());
}
else
{
sheetWrap.BatchColumnCommand(ExcelBatchColumnCommand.expand, col.GetColumnIndex(), col.GetColumnIndex());
}
}
}
}
if (tradeType != null)
{
excelWrap.DeleteSheet("导入字段说明");
}
excelWrap.Save();
return ms.ToArray();
}
}
}
}