101 lines
3.9 KiB
C#
101 lines
3.9 KiB
C#
using System.Data;
|
|
using YLErp.Commons;
|
|
|
|
namespace YLErp.Modules.UnderlyingModule
|
|
{
|
|
public class UnderlyingImportService : YLBaseService
|
|
{
|
|
public UnderlyingImportService(OptUserInfo userInfo) : base(userInfo) { }
|
|
|
|
public void ImportExcel(Stream streamIn, out int totalNum, out int successNum)
|
|
{
|
|
totalNum = 0;
|
|
successNum = 0;
|
|
|
|
int rowIndex = 0;
|
|
try
|
|
{
|
|
var ds = Office.ExcelHelper.ReadExcelAsDataSet(streamIn, new[] { 0 }, 1);
|
|
|
|
if (ds.Tables.Count < 1 || ds.Tables[0].Rows.Count < 1)
|
|
{
|
|
throw new ServiceException("读取导入数据失败:数据为空") { Tag = "111" };
|
|
}
|
|
|
|
var table = ds.Tables[0];
|
|
var reader = new DataRowReader(table);
|
|
|
|
totalNum = table.Rows.Count - rowIndex;
|
|
|
|
foreach (var row in table.Rows.Cast<DataRow>())
|
|
{
|
|
if (row.ItemArray.All(n => string.IsNullOrWhiteSpace(n?.ToString())))
|
|
{
|
|
totalNum--;
|
|
continue;
|
|
}
|
|
|
|
reader.SetDataRow(row);
|
|
|
|
using (var trans = BeginTransaction())
|
|
{
|
|
//映射导入数据
|
|
var um = MapUnderlying(reader);
|
|
|
|
//保存数据
|
|
new UnderlyingDalService(OptUser).SaveUnderlyingData(um);
|
|
successNum++;
|
|
|
|
trans.Commit();
|
|
}
|
|
rowIndex++;
|
|
}
|
|
}
|
|
catch (ServiceException se)
|
|
{
|
|
if (se.Tag != null) throw;
|
|
throw new ServiceException($"第{rowIndex + 2}行,发生错误:{se.Message}");
|
|
}
|
|
}
|
|
|
|
private underlying_manager MapUnderlying(DataRowReader reader)
|
|
{
|
|
var umVariety = reader.GetString("标的品种", true);
|
|
var variety = DataCacheProvider.GetVarietyDataSource().AsQueryable().Where(o => o.VarietyName == umVariety || o.VarietyCode == umVariety).FirstOrDefault();
|
|
if (variety == null)
|
|
{
|
|
throw new Exception("未找到品种:" + umVariety);
|
|
}
|
|
var instrumentTypeCn = reader.GetString("标的小类(资产类型)", true);
|
|
//var markShortName = reader.GetString("交易所", true);
|
|
//var market = DataCacheProvider.GetMarketDataSource().AsQueryable().Where(o => o.MarketShortName == markShortName || o.MarketName== markShortName || o.ExchangeNo == markShortName).FirstOrDefault();
|
|
//if (market == null)
|
|
//{
|
|
// throw new Exception("未找到交易所:" + markShortName);
|
|
//}
|
|
|
|
var um = new underlying_manager()
|
|
{
|
|
//MarketCode = market.ExchangeNo,
|
|
UnderlyingCode = reader.GetString("标的代码", true),
|
|
UnderlyingName = reader.GetString("标的名称", true),
|
|
UnderlyingEnName = reader.GetString("标的英文名", false),
|
|
UnderlyingTypeId = variety.id,
|
|
UnderlyingInstrumentType = ConsGlobal.InstrumentType.GetFromDesc(instrumentTypeCn),
|
|
BBGTicker = reader.GetString("BBGTicker", false),
|
|
ContractSize = reader.GetDouble("合约乘数", false) ?? 0,
|
|
MaturityDate = reader.GetDate("标的到期日", false),
|
|
CloseDate = reader.GetDate("标的交割日", false),
|
|
UnderlyingDesc = reader.GetString("描述", false),
|
|
LaunchState = "1",
|
|
UnderlyingStatus = "正常运行",
|
|
OptId = UserId,
|
|
OptName = UserName,
|
|
OptDate = DateTime.Now
|
|
};
|
|
|
|
return um;
|
|
}
|
|
}
|
|
}
|