/// <summary> /// 输入值是否在当前字段范围内 /// </summary> /// <param name="value">输入值</param> /// <param name="fieldRange">字段范围</param> /// <returns>是否在当前字段范围内</returns> public static bool CheckScaleFieldRange(decimal value, QH_CFBailScaleValue fieldRange) { bool result = false; if (!fieldRange.Start.HasValue && !fieldRange.Ends.HasValue) { return(result); } if (fieldRange.Start.HasValue) { result = fieldRange.LowerLimitIfEquation.Value == (int)Types.IsYesOrNo.Yes ? value >= fieldRange.Start : value > fieldRange.Start; if (result) { if (fieldRange.Ends.HasValue) { result = fieldRange.UpperLimitIfEquation.Value == (int)Types.IsYesOrNo.Yes ? value <= fieldRange.Ends : value < fieldRange.Ends; } } } else if (fieldRange.Ends.HasValue) { result = fieldRange.UpperLimitIfEquation.Value == (int)Types.IsYesOrNo.Yes ? value <= fieldRange.Ends : value < fieldRange.Ends; } return(result); }
/// <summary> /// 更新商品期货_保证金比例 /// </summary> /// <param name="model">商品期货_保证金比例实体</param> /// <param name="model2">商品期货_保证金比例实体</param> /// <returns></returns> public bool UpdateQHCFBailScaleValue(QH_CFBailScaleValue model, QH_CFBailScaleValue model2) { try { if (model.RelationScaleID != null && qH_CFBailScaleValueDAL.GetModel(model.RelationScaleID.Value) != null) { //关联记录存在,更新 qH_CFBailScaleValueDAL.Update(model2); } else { //关联记录不存在,新增记录 int rtn = qH_CFBailScaleValueDAL.Add(model2); if (rtn != AppGlobalVariable.INIT_INT) { model.RelationScaleID = rtn; } } return(qH_CFBailScaleValueDAL.Update(model)); } catch (Exception ex) { string errCode = "GL-6601"; string errMsg = "更新商品期货_保证金比例失败!"; VTException exception = new VTException(errCode, errMsg, ex); LogHelper.WriteError(exception.ToString(), exception.InnerException); return(false); } }
//================================ 事件 ================================ #region 添加商品期货_保证金窗体 AddCFBailScaleValueUI_Load /// <summary> ///添加商品期货_保证金窗体 AddCFBailScaleValueUI_Load /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AddCFBailScaleValueUI_Load(object sender, EventArgs e) { try { if (EditType == (int)UITypes.EditTypeEnum.AddUI) { m_QH_CFBailScaleValue = new QH_CFBailScaleValue(); } this.InitBindData(); if (EditType == (int)UITypes.EditTypeEnum.UpdateUI) { this.UpdateInitData(); //this.Text = "修改商品期货保证金"; } } catch (Exception ex) { string errCode = "GL-6400"; string errMsg = "添加商品期货_保证金窗体加载失败!"; VTException exception = new VTException(errCode, errMsg, ex); LogHelper.WriteError(exception.ToString(), exception.InnerException); return; } }
/// <summary> /// 获取需要更新的商品期货_保证金比例的实体 /// </summary> /// <param name="handle">行号</param> private void UpdateQHCFBailScaleValue(int handle) { try { if (handle < 0) { return; } //显示添加 商品期货_保证金比例窗体 AddCFBailScaleValueUI addCFBailScaleValueUI = new AddCFBailScaleValueUI(); addCFBailScaleValueUI.EditType = (int)UITypes.EditTypeEnum.UpdateUI; DataRow _dr = this.gdCFBailScaleValueSelect.GetDataRow(handle); int cFBailScaleValueID = Convert.ToInt32(_dr["CFBailScaleValueID"]); QH_CFBailScaleValue qH_CFBailScaleValue = FuturesManageCommon.GetQHCFBailScaleValueModel(cFBailScaleValueID); addCFBailScaleValueUI.QHCFBailScaleValue = qH_CFBailScaleValue; if (addCFBailScaleValueUI.ShowDialog(this) == DialogResult.OK) { this.QueryQHCFBailScaleValue(); this.gdCFBailScaleValueSelect.FocusedRowHandle = handle; } } catch (Exception ex) { string errCode = "GL-6443"; string errMsg = "获取需要更新的商品期货_保证金比例的实体失败!"; VTException exception = new VTException(errCode, errMsg, ex); LogHelper.WriteError(exception.ToString(), exception.InnerException); return; } }
/// <summary> /// 删除商品期货_保证金比例 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelete_Click(object sender, EventArgs e) { try { if (ShowMessageBox.ShowQuestion("确认删除吗?") == DialogResult.No) { return; } DataRow _dr = this.gdCFBailScaleValueSelect.GetDataRow(this.gdCFBailScaleValueSelect.FocusedRowHandle); if (_dr == null) { ShowMessageBox.ShowInformation("请选择数据!"); return; } if (!string.IsNullOrEmpty(Convert.ToString(_dr["CFBailScaleValueID"]))) { m_CFBailScaleValueID = Convert.ToInt32(_dr["CFBailScaleValueID"]); } else { m_CFBailScaleValueID = AppGlobalVariable.INIT_INT; } if (m_CFBailScaleValueID != AppGlobalVariable.INIT_INT) { QH_CFBailScaleValue qH_CFBailScaleVal = FuturesManageCommon.GetQHCFBailScaleValueModel(m_CFBailScaleValueID); //当子ID的数据存在时,则删除子数据,无论子数据是否删除成功,都继续执行删除当前的记录 if (qH_CFBailScaleVal.RelationScaleID != AppGlobalVariable.INIT_INT || string.IsNullOrEmpty(qH_CFBailScaleVal.RelationScaleID.Value.ToString())) { FuturesManageCommon.DeleteQHCFBailScaleValue(Convert.ToInt32(qH_CFBailScaleVal.RelationScaleID)); } m_Result = FuturesManageCommon.DeleteQHCFBailScaleValue(m_CFBailScaleValueID); } if (m_Result) { ShowMessageBox.ShowInformation("删除成功!"); m_CFBailScaleValueID = AppGlobalVariable.INIT_INT; } else { ShowMessageBox.ShowInformation("删除失败!"); } this.QueryQHCFBailScaleValue(); } catch (Exception ex) { string errCode = "GL-6446"; string errMsg = "删除商品期货_保证金比例失败!"; VTException exception = new VTException(errCode, errMsg, ex); LogHelper.WriteError(exception.ToString(), exception.InnerException); return; } }
/// <summary> /// 添加商品期货_保证金比例 /// </summary> /// <param name="model">商品期货_保证金比例实体</param> /// <param name="model2">商品期货_保证金比例实体</param> /// <returns></returns> public int AddQHCFBailScaleValue(QH_CFBailScaleValue model, QH_CFBailScaleValue model2) { try { //新增关联记录 int rlt = qH_CFBailScaleValueDAL.Add(model2); if (rlt != AppGlobalVariable.INIT_INT) { model.RelationScaleID = rlt; } return(qH_CFBailScaleValueDAL.Add(model)); } catch (Exception ex) { string errCode = "GL-6600"; string errMsg = "添加商品期货_保证金比例失败!"; VTException exception = new VTException(errCode, errMsg, ex); LogHelper.WriteError(exception.ToString(), exception.InnerException); return(AppGlobalVariable.INIT_INT); } }
/// <summary> /// 绑定保证金关系表数据 /// </summary> /// <param name="id"></param> private void BindRelationValues(int id) { QH_CFBailScaleValue model = FuturesManageCommon.GetQHCFBailScaleValueModel(id); if (model != null) { chkLastTrDay.Checked = true; //if (model.LowerLimitIfEquation.Value == (int)GTA.VTS.Common.CommonObject.Types.IsYesOrNo.Yes) //{ // //checkBox4.Checked = true; //} //else //{ // //checkBox4.Checked = false; //} if (model.UpperLimitIfEquation.Value == (int)GTA.VTS.Common.CommonObject.Types.IsYesOrNo.Yes) { checkBox5.Checked = true; } else { checkBox5.Checked = false; } //if (model.Start != null) //{ // //txtStart2.Text = model.Start.Value.ToString(); //} if (model.Ends != null) { txtEnds2.Text = model.Ends.Value.ToString(); } if (model.BailScale != null) { txtBailScale2.Text = model.BailScale.Value.ToString(); } m_CFBailScaleValueID2 = Convert.ToInt32(model.CFBailScaleValueID); } }
public void AssemblingFilterCFBailTest() { IList <QH_CFBailScaleValue> values = new List <QH_CFBailScaleValue>(); QH_CFBailScaleValue item1 = new QH_CFBailScaleValue(); item1.BailScale = 30; item1.BreedClassID = 66; item1.CFBailScaleValueID = 40; item1.DeliveryMonthType = 1; item1.Ends = 31; item1.LowerLimitIfEquation = 1; item1.PositionBailTypeID = 3; item1.RelationScaleID = 59; item1.Start = 1; item1.UpperLimitIfEquation = 1; values.Add(item1); QH_CFBailScaleValue item2 = new QH_CFBailScaleValue(); item2.BailScale = 40; item2.BreedClassID = 66; item2.CFBailScaleValueID = 59; item2.DeliveryMonthType = 1; item2.Ends = 2; item2.LowerLimitIfEquation = 1; item2.PositionBailTypeID = 3; item2.RelationScaleID = null; item2.Start = null; item2.UpperLimitIfEquation = 1; values.Add(item2); List <QH_CFBailScaleValue> expected = null; // TODO: 初始化为适当的值 List <QH_CFBailScaleValue> actual; //actual = FutureBailScaleService_Accessor.AssemblingFilterCFBail(values); //actual = FutureBailScaleService_Accessor.AssemblingFilterCFBail(values); //Assert.AreEqual(expected, actual); Assert.Inconclusive("验证此测试方法的正确性。"); }
/// <summary> /// 通过持仓和保证金控制类型来获取具体的保证金比例 /// </summary> /// <param name="values">保证金比例列表</param> /// <param name="findVal">类型值(持仓或者日期)</param> /// <param name="breedClassID">合约代码所属品种类型</param> /// <returns>保证金比例</returns> private static decimal GetScale(IList <QH_CFBailScaleValue> values, decimal findVal, int breedClassID) { QH_CFBailScaleValue scaleValue = null; //不用再过滤直接,因为之前的缓存已经作过处理 //List<QH_CFBailScaleValue> lists = AssemblingFilterCFBail(values); // foreach (QH_CFBailScaleValue value in lists) foreach (QH_CFBailScaleValue value in values) { if (CheckScaleFieldRange(findVal, value)) { scaleValue = value; break; } } QH_SIFBail sifBail = MCService.FuturesTradeRules.GetSIFBailByBreedClassID(breedClassID); if (sifBail == null) { LogHelper.WriteDebug("Debug_Test_Bail_05:无法获取最低交易保证金比例"); return(-1); } LogHelper.WriteDebug("Debug_Test_Bail_05:获取最低交易保证金比例" + sifBail.BailScale); if (scaleValue == null) { LogHelper.WriteDebug("Debug_Test_Bail_06:无法获取保证金比例区间范围值,返回最低保证金"); return(sifBail.BailScale); } if (scaleValue.BailScale.Value < sifBail.BailScale) { LogHelper.WriteDebug("Debug_Test_Bail_06:获取保证金比例区间范围值比最低保证金比例还低直接返回最低保证金比例"); } return(scaleValue.BailScale.Value); }
/// <summary> /// 更新商品期货_保证金比例 /// </summary> /// <param name="model">商品期货_保证金比例实体</param> /// <param name="model2">商品期货_保证金比例实体</param> /// <returns></returns> public static bool UpdateQHCFBailScaleValue(QH_CFBailScaleValue model, QH_CFBailScaleValue model2) { QH_CFBailScaleValueBLL qH_CFBailScaleValueBLL = new QH_CFBailScaleValueBLL(); return(qH_CFBailScaleValueBLL.UpdateQHCFBailScaleValue(model, model2)); }
/// <summary> /// 添加商品期货_保证金比例 /// </summary> /// <param name="model">商品期货_保证金比例实体</param> /// <param name="model2">商品期货_保证金比例实体</param> /// <returns></returns> public static int AddQHCFBailScaleValue(QH_CFBailScaleValue model, QH_CFBailScaleValue model2) { QH_CFBailScaleValueBLL qH_CFBailScaleValueBLL = new QH_CFBailScaleValueBLL(); return(qH_CFBailScaleValueBLL.AddQHCFBailScaleValue(model, model2)); }
/// <summary> /// 添加或修改商品期货_保证金比例 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnOK_Click(object sender, EventArgs e) { try { QH_CFBailScaleValue qH_CFBailScaleValue = new QH_CFBailScaleValue(); QH_CFBailScaleValue qH_CFBailScaleValue2 = new QH_CFBailScaleValue(); if (!string.IsNullOrEmpty(this.cmbBreedClassID.Text)) { qH_CFBailScaleValue.BreedClassID = ((UComboItem)this.cmbBreedClassID.SelectedItem).ValueIndex; qH_CFBailScaleValue2.BreedClassID = ((UComboItem)this.cmbBreedClassID.SelectedItem).ValueIndex; } else { ShowMessageBox.ShowInformation("请选择品种!"); this.cmbBreedClassID.Focus(); return; } if (!string.IsNullOrEmpty(this.txtStart.Text) && !string.IsNullOrEmpty(this.txtEnds.Text)) { if (InputTest.intTest(this.txtStart.Text) && InputTest.intTest(this.txtEnds.Text)) { if (Convert.ToInt32(this.txtStart.Text) < Convert.ToInt32(this.txtEnds.Text)) { qH_CFBailScaleValue.Start = Convert.ToInt32(this.txtStart.Text); } else { ShowMessageBox.ShowInformation("起始值不能大于或等于结束值!"); this.txtStart.Focus(); return; } if (Convert.ToInt32(this.txtEnds.Text) > Convert.ToInt32(this.txtStart.Text)) { qH_CFBailScaleValue.Ends = Convert.ToInt32(this.txtEnds.Text); } else { ShowMessageBox.ShowInformation("结束值不能小于或等于起始值!"); this.txtEnds.Focus(); return; } if (InputTest.intTest(this.txtEnds2.Text)) { qH_CFBailScaleValue2.Ends = Convert.ToInt32(this.txtEnds2.Text); } } else { ShowMessageBox.ShowInformation("请输入数字!"); this.txtStart.Focus(); this.txtEnds.Focus(); return; } } else { if (string.IsNullOrEmpty(this.txtStart.Text) && string.IsNullOrEmpty(this.txtEnds.Text)) { ShowMessageBox.ShowInformation("范围值不能为空!"); this.txtStart.Focus(); return; } if (!string.IsNullOrEmpty(this.txtStart.Text)) { if (InputTest.intTest(this.txtStart.Text)) { qH_CFBailScaleValue.Start = Convert.ToInt32(this.txtStart.Text); } else { ShowMessageBox.ShowInformation("请输入正整数字!"); this.txtStart.Focus(); return; } } if (!string.IsNullOrEmpty(this.txtEnds.Text)) { if (InputTest.intTest(this.txtEnds.Text)) { qH_CFBailScaleValue.Ends = Convert.ToInt32(this.txtEnds.Text); } else { ShowMessageBox.ShowInformation("请输入正整数字!"); this.txtEnds.Focus(); return; } if (InputTest.intTest(this.txtEnds2.Text)) { qH_CFBailScaleValue2.Ends = Convert.ToInt32(this.txtEnds2.Text); } } } if (!string.IsNullOrEmpty(this.txtBailScale.Text)) { if (InputTest.DecimalTest(this.txtBailScale.Text)) { qH_CFBailScaleValue.BailScale = Convert.ToDecimal(this.txtBailScale.Text); } else { ShowMessageBox.ShowInformation("请输入数字!"); this.txtBailScale.Focus(); return; } if (InputTest.DecimalTest(this.txtBailScale2.Text)) { qH_CFBailScaleValue2.BailScale = Convert.ToDecimal(this.txtBailScale2.Text); } } else { ShowMessageBox.ShowInformation("请输入保证金比例!"); this.txtBailScale.Focus(); return; } if (!string.IsNullOrEmpty(this.cmbDeliveryMonthTypeID.Text)) { qH_CFBailScaleValue.DeliveryMonthType = ((UComboItem)this.cmbDeliveryMonthTypeID.SelectedItem).ValueIndex; qH_CFBailScaleValue2.DeliveryMonthType = ((UComboItem)this.cmbDeliveryMonthTypeID.SelectedItem).ValueIndex; } if (checkBox1.Checked) { qH_CFBailScaleValue.LowerLimitIfEquation = (int)GTA.VTS.Common.CommonObject.Types.IsYesOrNo.Yes; } else { qH_CFBailScaleValue.LowerLimitIfEquation = (int)GTA.VTS.Common.CommonObject.Types.IsYesOrNo.No; } if (checkBox2.Checked) { qH_CFBailScaleValue.UpperLimitIfEquation = (int)GTA.VTS.Common.CommonObject.Types.IsYesOrNo.Yes; } else { qH_CFBailScaleValue.UpperLimitIfEquation = (int)GTA.VTS.Common.CommonObject.Types.IsYesOrNo.No; } if (checkBox5.Checked) { qH_CFBailScaleValue2.UpperLimitIfEquation = (int)GTA.VTS.Common.CommonObject.Types.IsYesOrNo.Yes; } else { qH_CFBailScaleValue2.UpperLimitIfEquation = (int)GTA.VTS.Common.CommonObject.Types.IsYesOrNo.No; } if (!string.IsNullOrEmpty(this.cmbPositionBailTypeID.Text)) { qH_CFBailScaleValue.PositionBailTypeID = ((UComboItem)this.cmbPositionBailTypeID.SelectedItem).ValueIndex; qH_CFBailScaleValue2.PositionBailTypeID = ((UComboItem)this.cmbPositionBailTypeID.SelectedItem).ValueIndex; } if (EditType == (int)UITypes.EditTypeEnum.AddUI) { int result; if (!chkLastTrDay.Checked) { result = FuturesManageCommon.AddQHCFBailScaleValue(qH_CFBailScaleValue); } else { result = FuturesManageCommon.AddQHCFBailScaleValue(qH_CFBailScaleValue, qH_CFBailScaleValue2); } if (result != AppGlobalVariable.INIT_INT) { FireSaved(this, new EventArgs()); ShowMessageBox.ShowInformation("添加成功!"); //this.ClearAll(); this.DialogResult = DialogResult.OK; this.Close(); } else { ShowMessageBox.ShowInformation("添加失败!"); } } else if (EditType == (int)UITypes.EditTypeEnum.UpdateUI) { if (m_CFBailScaleValueID != AppGlobalVariable.INIT_INT) { qH_CFBailScaleValue.CFBailScaleValueID = m_CFBailScaleValueID; } if (m_CFBailScaleValueID2 != AppGlobalVariable.INIT_INT) { qH_CFBailScaleValue2.CFBailScaleValueID = m_CFBailScaleValueID2; qH_CFBailScaleValue.RelationScaleID = m_CFBailScaleValueID2; } if (!chkLastTrDay.Checked) { //当现在修改后的保证金控制类型不等于原来的保证金控制类型:交易日 时,则把原来的子记录删除,并把 //父记录中子记录的ID变为NULL if (m_PositionBailTypeID == (int)GTA.VTS.Common.CommonObject.Types.QHPositionBailType.ByTradeDays) { if (((UComboItem)this.cmbPositionBailTypeID.SelectedItem).ValueIndex != m_PositionBailTypeID) { FuturesManageCommon.DeleteQHCFBailScaleValue(m_CFBailScaleValueID2); qH_CFBailScaleValue.RelationScaleID = null;//AppGlobalVariable.INIT_INT; } } m_Result = FuturesManageCommon.UpdateQHCFBailScaleValue(qH_CFBailScaleValue); } else { m_Result = FuturesManageCommon.UpdateQHCFBailScaleValue(qH_CFBailScaleValue, qH_CFBailScaleValue2); } if (m_Result) { ShowMessageBox.ShowInformation("修改成功!"); this.DialogResult = DialogResult.OK; this.Close(); } else { ShowMessageBox.ShowInformation("修改失败!"); } } } catch (Exception ex) { string errCode = "GL-6402"; string errMsg = "添加或修改商品期货_保证金比例失败!"; VTException exception = new VTException(errCode, errMsg, ex); LogHelper.WriteError(exception.ToString(), exception.InnerException); return; } }
/// <summary> /// 重新过滤和组装保证金数据(这里是为了查找相关的最后交易日前第几日的问题) /// </summary> /// <param name="values">原保证金比例列表</param> /// <returns></returns> private static List <QH_CFBailScaleValue> AssemblingFilterCFBail(IList <QH_CFBailScaleValue> values) { string errCode = "GT-8485"; string errMsg = "保证金比例数据设置有异常。"; List <QH_CFBailScaleValue> list = new List <QH_CFBailScaleValue>(); Dictionary <int, DateTime> modifyTime = new Dictionary <int, DateTime>(); // List<QH_CFBailScaleValue> models = new List<QH_CFBailScaleValue>(); //QH_CFBailScaleValue[] kd = new QH_CFBailScaleValue[values.Count]; //values.CopyTo(kd, 0); //models = kd.ToList<QH_CFBailScaleValue>(); try { foreach (var item in values) { QH_CFBailScaleValue retList = new QH_CFBailScaleValue(); #region 重新定义一对象记录 //retList = item;//对象引用不能这样附值会把缓存的数据修改 retList.BailScale = item.BailScale; retList.BreedClassID = item.BreedClassID; retList.CFBailScaleValueID = item.CFBailScaleValueID; retList.DeliveryMonthType = item.DeliveryMonthType; retList.Ends = item.Ends; retList.LowerLimitIfEquation = item.LowerLimitIfEquation; retList.PositionBailTypeID = item.PositionBailTypeID; retList.RelationScaleID = item.RelationScaleID; retList.Start = item.Start; retList.UpperLimitIfEquation = item.UpperLimitIfEquation; #endregion #region linq查询方法 查询相关记录 //查询是否在关联的保证金比例列表,有则要计算当前日志(即月份的交易日期) var q = from c in values where c.RelationScaleID == item.CFBailScaleValueID select c; #endregion //如果关联的日期和类型交易日的记录才要转换 if (q != null && q.Count <QH_CFBailScaleValue>() > 0 && item.PositionBailTypeID == (int)Types.QHPositionBailType.ByTradeDays) { #region //如果关联的日期和类型交易日的记录才要转换 int end = 0; //如果设置无有值则为非法记录,并且不可能小于零也不可以大于22,因为一个月最多的有效交易日也就是二十二天 if (!item.Ends.HasValue || item.Ends.Value >= 22 || item.Ends.Value <= 0) { throw new VTException(errCode, errMsg); } end = item.Ends.Value; //获取当月共几天 int days = 0; List <DateTime> timeList = Utils.GetCurrentMothDay(out days); //最后交易日 //之前设置为1,没有考虑到记录不是交割月时而不用计算这个最后交易日的 int lastTrdeday = 31; //当记录是交割月的记录时处理最后交易日的问题 if (item.DeliveryMonthType == (int)Types.QHCFPositionMonthType.OnDelivery) { lastTrdeday = MCService.GetLastTradingDayByBreedClassId(item.BreedClassID.Value); } //记录最后交易日之后的日期的所有日期 List <DateTime> lastDayed = new List <DateTime>(); foreach (var model in timeList) { if (model.Day > lastTrdeday) { lastDayed.Add(model); } } //删除所有最后交易日之后的日期 foreach (var dayed in lastDayed) { timeList.Remove(dayed); } int countTradeDay = timeList.Count; if (countTradeDay < end) { throw new VTException(errCode, errMsg); } //计算开始最后交易日的开始时间(最后交易日前几天的开始时间) DateTime startTime = timeList[countTradeDay - end]; //关联的日期的结束时间 DateTime endTime = timeList[countTradeDay - 1 - end]; retList.Start = startTime.Day; retList.Ends = days; //item.Start = startTime.Day; //item.Ends = days; //记录有关联日期的最后日期记录,因为最后日期是由关联记录的开始日期决定 foreach (var modi in q) { if (!modifyTime.ContainsKey(modi.CFBailScaleValueID)) { modifyTime.Add(modi.CFBailScaleValueID, endTime); } } #endregion } else if (item.PositionBailTypeID == (int)Types.QHPositionBailType.ByTradeDays) { #region 否则如果是按交易日的记录要重新计算日期转为自然日 if (!item.Start.HasValue || !item.Ends.HasValue) { errMsg = "开始日期或者结束日期不能没有数值,不合规的日期设置"; throw new VTException(errCode, errMsg); } if (item.Start.Value > item.Ends.Value) { errMsg = "开始日期比结束日期大,不合规的日期设置"; throw new VTException(errCode, errMsg); } int start, end = 0; end = item.Ends.Value; start = item.Start.Value; //获取当月共几天 int days = 0; List <DateTime> timeList = Utils.GetCurrentMothDay(out days); //最后交易日 //之前设置为1,没有考虑到记录不是交割月时而不用计算这个最后交易日的 int lastTrdeday = 31; //当记录是交割月的记录时处理最后交易日的问题 if (item.DeliveryMonthType == (int)Types.QHCFPositionMonthType.OnDelivery) { lastTrdeday = MCService.GetLastTradingDayByBreedClassId(item.BreedClassID.Value); } //记录最后交易日之后的日期的所有日期 List <DateTime> lastDayed = new List <DateTime>(); foreach (var model in timeList) { if (model.Day > lastTrdeday) { lastDayed.Add(model); } } //删除所有最后交易日之后的日期 foreach (var dayed in lastDayed) { timeList.Remove(dayed); } int countTradeDay = timeList.Count; //计算开始最后交易日的开始时间(最后交易日前几天的开始时间) DateTime startTime = DateTime.Now; //关联的日期的结束时间 DateTime endTime = DateTime.Now; //如果开始日期比当前所有交易日总数大那么开始日期直接以最后交易日为开始日 if (start > countTradeDay || start <= 0) { startTime = timeList[countTradeDay - 1]; } else { //if (start <= 0) //{ // start = 1; //} startTime = timeList[start - 1]; } retList.Start = startTime.Day; //当结束日期比当前月所有交易日还大时,直接以当前月所拥有的自然最后日替换 if (end > countTradeDay || end <= 0) { //endTime = timeList[countTradeDay - 1]; retList.Ends = days; } else { endTime = timeList[end - 1]; retList.Ends = endTime.Day; } #endregion } list.Add(retList); } #region //修改已经在关联的日期 //修改已经在关联的日期 foreach (var item in modifyTime) { //var q = from c in list // where // c.CFBailScaleValueID == item.Key // select c; foreach (var model in list) { if (model.CFBailScaleValueID == item.Key) { //如果开始日期为null即为第一日,不为空则原始的日期 if (!model.Start.HasValue) { model.Start = 1; } model.Ends = item.Value.Day; } } } #endregion #region 写日志 //日志字符串 string txt = "品种类型:{0},控制类型:{1},交割类型:{2},开始:{3},结束:{4},比例:{5}"; foreach (var model in list) { //写日志 string txtWriter = string.Format(txt, model.BreedClassID, model.PositionBailTypeID, model.DeliveryMonthType, model.Start, model.Ends, model.BailScale); LogHelper.WriteDebug(txtWriter); } #endregion } catch (Exception ex) { LogHelper.WriteError(ex.Message, ex); throw new VTException(errCode, errMsg); } return(list); }