Files
zszq-trs/YLErpDAL/BLL/Trade_VolBLL.cs
T
2024-05-09 14:06:26 +08:00

203 lines
7.1 KiB
C#

using BaseOUDAL;
using System.Data;
using YLErp.Commons;
using YLErp.QdpModule;
namespace YLErp.BLL
{
public class Trade_VolBLL
{
public SearchListResult<trade_volModel> SearchTradeVolList(trade_volReq req)
{
var db = new YLContext();
var query = from source in db.trade_vol
join tradeModel in db.trade on source.TradeNumber equals tradeModel.TradeNumber into tradeInto
from t in tradeInto.DefaultIfEmpty()
select new trade_volModel
{
id = source.id,
TradeNumber = source.TradeNumber,
ValueDate = source.ValueDate,
VolType = source.VolType,
Vol = source.Vol,
IsValid = source.IsValid,
ClientId = t.ClientId,
ClientName = t.ClientName,
OptName = source.OptName,
OptDate = source.OptDate
};
if (req.DateFromValueDate != DateTime.MinValue)
{
query = query.Where(d => d.ValueDate >= req.DateFromValueDate);
}
if (req.DateToValueDate != DateTime.MinValue)
{
DateTime valuedateTemp = req.DateToValueDate.AddDays(1);
query = query.Where(d => d.ValueDate < valuedateTemp);
}
if (!string.IsNullOrEmpty(req.TradeNumber))
{
query = query.Where(d => d.TradeNumber.Contains(req.TradeNumber));
}
if (req.ClientId != 0)
{
query = query.Where(d => d.ClientId == req.ClientId);
}
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "id";
req.sord = "desc";
}
return query.ToSearchList(req);
}
public void SaveTradeVol(trade_volReqModel req)
{
var db = new YLContext();
if (req.ValueDate.Value == DateTime.MinValue)
{
throw new ServiceException("计算时间不能为空");
}
if (QdpCalendarHelper.IsHoliday(req.ValueDate.Value))
{
throw new ServiceException("计算时间不能为节假日");
}
if (req.ValueDate.Value>valuedateBLL.ValueDate)
{
throw new ServiceException("计算时间不能大于系统时间");
}
if (string.IsNullOrEmpty(req.TradeNumber))
{
throw new ServiceException("交易编号不能为空");
}
if (req.Vol == null)
{
throw new ServiceException("波动率设置不能为空");
}
var tradeModel = db.trade.Where(a => a.TradeNumber == req.TradeNumber && a.ValidState != "InValid").FirstOrDefault();
if (tradeModel == null)
{
throw new ServiceException("交易编号不在系统中交易中");
}
var trade_vol = db.trade_vol.Where(a => a.TradeNumber == req.TradeNumber && req.ValueDate.Value == a.ValueDate && a.IsValid).FirstOrDefault();
if (trade_vol != null)
{
trade_vol.TradeNumber = req.TradeNumber;
trade_vol.ValueDate = req.ValueDate.Value;
trade_vol.Vol = req.Vol.Value;
trade_vol.OptId = req.OptId;
trade_vol.OptName = req.OptName;
trade_vol.OptDate = req.OptDate;
}
else
{
db.trade_vol.Add(new trade_vol
{
ValueDate = req.ValueDate.Value,
TradeNumber = req.TradeNumber,
Vol = req.Vol.Value,
VolType = Enums.VolTypeEnum.MARGIN_VOL,
IsValid = true,
OptId = req.OptId,
OptName = req.OptName,
OptDate = req.OptDate,
});
}
db.SaveChanges();
}
public void SaveVolPrice(List<trade_volReqModel> reqList,int UserId,string UserName)
{
var db = new YLContext();
var trade_volIds= reqList.Select(a => a.id).ToList();
var trade_vols = db.trade_vol.Where(a => trade_volIds.Contains(a.id)).ToList();
trade_vols.ForEach(a => {
var req = reqList.Where(b => b.id == a.id).FirstOrDefault();
if (req!=null)
{
a.Vol = req.Vol.Value;
a.OptId = UserId;
a.OptName= UserName;
a.OptDate = DateTime.Now;
}
});
db.SaveChanges();
}
public void ImportFromExcel(Stream streamIn, int UserId, string UserName, out int totalNum, out int successNum)
{
totalNum = 0;
successNum = 0;
var rowIndex = 0;
try
{
var ds = Office.ExcelHelper.ReadExcelAsDataSet(streamIn, new[] { 0 }, 0);
if (ds.Tables.Count < 1 || ds.Tables[0].Rows.Count < 2)
{
throw new ServiceException("读取导入数据失败:数据为空") { Tag = "111" };
}
var table = ds.Tables[0];
var reader = new DataRowReader(table, 0);
rowIndex = 1;
totalNum = table.Rows.Count - rowIndex;
foreach (var row in table.Rows.Cast<DataRow>().Skip(1))
{
rowIndex++;
if (row.ItemArray.All(n => string.IsNullOrWhiteSpace(n?.ToString())))
{
totalNum--;
continue;
}
reader.SetDataRow(row);
HandleData(reader, UserId, UserName);
successNum++;
}
}
catch (ServiceException se)
{
if (se.Tag != null)
{
throw;
}
throw new ServiceException($"已成功导入{successNum}条;\n第{rowIndex}行,{se.Message}");
}
catch (Exception ex)
{
LogFactory.GetLogger().Error(ex);
throw new ServiceException($"已成功导入{successNum}条,\n第{rowIndex}行,发生错误:{ex.Message}", ex);
}
}
public void HandleData(DataRowReader reader, int UserId, string UserName)
{
trade_volReqModel req = new trade_volReqModel();
req.TradeNumber = reader.GetString("交易编号", true);
req.ValueDate = reader.GetDate("计算日期", true);
req.Vol = reader.GetDouble("波动率", true);
req.OptId = UserId;
req.OptName = UserName;
req.OptDate = DateTime.Now;
SaveTradeVol(req);
}
}
}