203 lines
7.1 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|