Files
zszq-trs/YLErpDAL/Modules/UnderlyingModule/UnderlyingImportService.cs
T
2024-05-09 14:06:26 +08:00

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;
}
}
}