using BaseOUDAL; namespace YLErp.Modules.UnderlyingModule { /// /// 分红率服务 /// public class UnderlyingDividendService : YLBaseService { public UnderlyingDividendService(OptUserInfo userInfo) : base(userInfo) { } /// /// 获取最新分红率 /// public SearchListResult GetLatestList(UnderlyingDividendQueryModel req) { var predicat = PredicateBuilder.Create(n => (n.UnderlyingInstrumentType == "Stock" || n.UnderlyingInstrumentType == "StockIndex")); if (!string.IsNullOrWhiteSpace(req.UnderlyingCode)) { predicat = predicat.And(n => n.UnderlyingCode.Contains(req.UnderlyingCode)); } if (!string.IsNullOrWhiteSpace(req.UnderlyingName)) { predicat = predicat.And(n => n.UnderlyingName.Contains(req.UnderlyingName)); } var query = DbContext.underlying_manager .Where(predicat) .Select(n => new UnderlyingDividendDto { id = n.id, UnderlyingId = n.id, UnderlyingCode = n.UnderlyingCode, UnderlyingName = n.UnderlyingName, DividendRate = n.DividendRate ?? 0 }); if (string.IsNullOrEmpty(req.sidx)) { query = query.OrderBy(n => n.UnderlyingCode); } return query.ToSearchList(req); } /// /// 获取历史分红率 /// public IEnumerable GetHisList(string underlyingCode) { if (string.IsNullOrEmpty(underlyingCode)) { return Enumerable.Empty(); } var query = from m in DbContext.underlying_manager join n in DbContext.UnderlyingDividend on m.id equals n.UnderlyingId where m.UnderlyingCode == underlyingCode orderby n.ValueDate descending select new UnderlyingDividendDto { id = n.id, UnderlyingId = n.id, UnderlyingCode = m.UnderlyingCode, UnderlyingName = m.UnderlyingName, DividendRate = n.DividendRate, ValueDate = n.ValueDate, OptDate = n.OptDate, OptId = n.OptId, OptName = n.OptName }; return query.ToArray(); } /// /// 获取最新分红率 /// public UnderlyingDividendDto GetLatestDetail(string underlyingCode) { var query = DbContext.underlying_manager .Where(n => n.UnderlyingCode == underlyingCode) .Select(n => new UnderlyingDividendDto { id = n.id, UnderlyingId = n.id, UnderlyingCode = n.UnderlyingCode, UnderlyingName = n.UnderlyingName, DividendRate = n.DividendRate ?? 0 }); return query.FirstOrDefault(); } /// /// 保存分红率 /// public UnderlyingDividend SaveData(UnderlyingDividendDto model) { if (string.IsNullOrEmpty(model?.UnderlyingCode)) { throw new ServiceException("股票代码不能为空"); } var udm = DbContext.underlying_manager.FirstOrDefault(n => n.UnderlyingCode == model.UnderlyingCode); if (udm == null) { throw new ServiceException("股票信息不存在"); } udm.DividendRate = model.DividendRate; var valueDate = BLL.valuedateBLL.ValueDate; if (valueDate < DateTime.Today) valueDate = DateTime.Today; var dbModel = DbContext.UnderlyingDividend.FirstOrDefault(n => n.UnderlyingId == udm.id && n.ValueDate == valueDate); if (dbModel == null) { dbModel = new UnderlyingDividend { UnderlyingId = udm.id, ValueDate = valueDate }; DbContext.UnderlyingDividend.Add(dbModel); } dbModel.DividendRate = model.DividendRate; dbModel.OptId = model.OptId; dbModel.OptName = model.OptName; dbModel.OptDate = DateTime.Now; DbContext.SaveChanges(); return dbModel; } } /// /// /// public class UnderlyingDividendQueryModel : BaseSearchReq { public string UnderlyingName { get; set; } public string UnderlyingCode { get; set; } } }