using BaseOUDAL; using System.Data; using YLErp.Commons; using YLErp.QdpModule; namespace YLErp.BLL { public class Trade_VolBLL { public SearchListResult 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 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().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); } } }