253 lines
12 KiB
C#
253 lines
12 KiB
C#
using BaseOUDAL;
|
|
using Qdp.Foundation.Implementations;
|
|
using YLErp.QdpModule;
|
|
|
|
namespace YLErp.Modules.DictionaryModule
|
|
{
|
|
public class DictionarySerivice
|
|
{
|
|
readonly ErpBaseContext basedb = new();
|
|
public DateTime GetForwardDateType(DateTime dateTime, int lastMonth, int lastDay, ForwardDateTypeEnum typeEnum, bool isbefore)
|
|
{
|
|
dateTime = dateTime.AddMonths(-lastMonth);
|
|
var t = typeEnum == 0 ? ("", new DateTime()) : GetWeekInfoByMonth(dateTime, lastMonth, lastDay);
|
|
var number = WeekStrToNumber(t.Item1);
|
|
switch (typeEnum)
|
|
{
|
|
case ForwardDateTypeEnum.交易日:
|
|
//取下一个月第一天
|
|
dateTime = new Date(dateTime.Year, dateTime.Month, 1);
|
|
dateTime = dateTime.AddMonths(1);
|
|
dateTime = QdpCalendarHelper.GetNonHoliday(dateTime);
|
|
for (var i = 0; i < lastDay; i++)//OTC-5942 上一个月倒数第一个交易日
|
|
{
|
|
dateTime = QdpCalendarHelper.GetNonHolidayDefore(dateTime.AddDays(-1));
|
|
}
|
|
break;
|
|
case ForwardDateTypeEnum.星期一:
|
|
dateTime = GetWeekDateTime(t.Item2.AddDays(number >= 1 ? 7 - number + 1 : 1 - number), isbefore);
|
|
break;
|
|
case ForwardDateTypeEnum.星期二:
|
|
dateTime = GetWeekDateTime(t.Item2.AddDays(number >= 2 ? 7 - number + 2 : 2 - number), isbefore);
|
|
break;
|
|
case ForwardDateTypeEnum.星期三:
|
|
dateTime = GetWeekDateTime(t.Item2.AddDays(number >= 3 ? 7 - number + 3 : 3 - number), isbefore);
|
|
break;
|
|
case ForwardDateTypeEnum.星期四:
|
|
dateTime = GetWeekDateTime(t.Item2.AddDays(number >= 4 ? 7 - number + 4 : 4 - number), isbefore);
|
|
break;
|
|
case ForwardDateTypeEnum.星期五:
|
|
dateTime = GetWeekDateTime(t.Item2.AddDays(number >= 5 ? 7 - number + 5 : 5 - number), isbefore);
|
|
break;
|
|
case ForwardDateTypeEnum.星期六:
|
|
dateTime = GetWeekDateTime(t.Item2.AddDays(number >= 6 ? 7 - number + 6 : 6 - number), isbefore);
|
|
break;
|
|
case ForwardDateTypeEnum.星期日:
|
|
dateTime = GetWeekDateTime(t.Item2.AddDays(number >= 7 ? 7 - number + 7 : 7 - number), isbefore);
|
|
break;
|
|
}
|
|
return dateTime;
|
|
}
|
|
public DateTime GetWeekDateTime(DateTime date, bool isAfter = true)
|
|
{
|
|
if (QdpCalendarHelper.IsHoliday(date))
|
|
{
|
|
date = date.AddDays(isAfter ? -1 : 1);
|
|
return GetWeekDateTime(date, isAfter);
|
|
}
|
|
else
|
|
{
|
|
return date;
|
|
}
|
|
}
|
|
public int WeekStrToNumber(string weekStr)
|
|
{
|
|
var number = 0;
|
|
switch (weekStr)
|
|
{
|
|
case "Monday":
|
|
number = 1;
|
|
break;
|
|
case "Tuesday":
|
|
number = 2;
|
|
break;
|
|
case "Wednesday":
|
|
number = 3;
|
|
break;
|
|
case "Thursday":
|
|
number = 4;
|
|
break;
|
|
case "Friday":
|
|
number = 5;
|
|
break;
|
|
case "Saturday":
|
|
number = 6;
|
|
break;
|
|
case "Sunday":
|
|
number = 7;
|
|
break;
|
|
}
|
|
return number;
|
|
}
|
|
public string NumberToWeekStr(int number)
|
|
{
|
|
var weekStr = "";
|
|
switch (number)
|
|
{
|
|
case (int)ForwardDateTypeEnum.交易日:
|
|
weekStr = "交易日";
|
|
break;
|
|
case (int)ForwardDateTypeEnum.星期一:
|
|
weekStr = "星期一";
|
|
break;
|
|
case (int)ForwardDateTypeEnum.星期二:
|
|
weekStr = "星期二";
|
|
break;
|
|
case (int)ForwardDateTypeEnum.星期三:
|
|
weekStr = "星期三";
|
|
break;
|
|
case (int)ForwardDateTypeEnum.星期四:
|
|
weekStr = "星期四";
|
|
break;
|
|
case (int)ForwardDateTypeEnum.星期五:
|
|
weekStr = "星期五";
|
|
break;
|
|
case (int)ForwardDateTypeEnum.星期六:
|
|
weekStr = "星期六";
|
|
break;
|
|
case (int)ForwardDateTypeEnum.星期日:
|
|
weekStr = "星期日";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return weekStr;
|
|
}
|
|
public (string, DateTime) GetWeekInfoByMonth(DateTime dateTime, int month, int lastDay)
|
|
{
|
|
if (month == 0)
|
|
{
|
|
var endWeekStr = dateTime.DayOfWeek.ToString();
|
|
var beforeWeekDay = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day);
|
|
beforeWeekDay = beforeWeekDay.AddDays(-(lastDay * 7));
|
|
return (endWeekStr, beforeWeekDay);
|
|
}
|
|
else
|
|
{
|
|
var monthEndDate = new DateTime(dateTime.Year, dateTime.Month, 1);
|
|
monthEndDate = monthEndDate.AddMonths(1).AddDays(-1);
|
|
//获取最后一天星期几
|
|
var endWeekStr = monthEndDate.DayOfWeek.ToString();
|
|
var beforeWeekDay = new DateTime(dateTime.Year, dateTime.Month, monthEndDate.Day);
|
|
beforeWeekDay = beforeWeekDay.AddDays(-(lastDay * 7));
|
|
return (endWeekStr, beforeWeekDay);
|
|
}
|
|
}
|
|
|
|
public Dictionary<string, string> GetForwardDateNameDic()
|
|
{
|
|
|
|
//标的交割月前 { 【】 }个月倒数第 { 【】 }个 { 交易日 / 星期【】}
|
|
var dicStr = new Dictionary<string, string>
|
|
{
|
|
{ "期权到期日", "期权到期日" },
|
|
{ "标的到期日", "标的到期日" }
|
|
};
|
|
var dictionaryModel = basedb.Dictionaries.FirstOrDefault(d => d.Name == "累计转远期到期日类型");
|
|
if (dictionaryModel != null)
|
|
{
|
|
var dictionaryItemModels = basedb.DictionaryItems.Where(l => l.DictId == dictionaryModel.Id).ToList();
|
|
if (dictionaryItemModels != null && dictionaryItemModels.Any())
|
|
{
|
|
foreach (var dictionaryItemModel in dictionaryItemModels)
|
|
{
|
|
var str = "";
|
|
if (int.Parse(dictionaryItemModel.Name) == 1)
|
|
{
|
|
//标的交割月在前一月 0代表交易日
|
|
if (dictionaryItemModel.ShortName.Split(',')[1] == "0")
|
|
{
|
|
//适应以前规则
|
|
str = string.Format("标的交割月前{0}{1}", NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.ShortName.Split(',')[0])), NumberToWeekStr(int.Parse(dictionaryItemModel.ShortName.Split(',')[1])));
|
|
}
|
|
else
|
|
{
|
|
str = string.Format("标的交割月前倒数第{0}个{1}{2}", NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.ShortName.Split(',')[0])), NumberToWeekStr(int.Parse(dictionaryItemModel.ShortName.Split(',')[1])), dictionaryItemModel.ShortName.Split(',')[2] == "0" ? "(向前调整)" : "(向后调整)");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (dictionaryItemModel.ShortName.Split(',')[1] == "0")
|
|
{
|
|
str = string.Format("标的交割月前{0}个月倒数第{1}个{2}", NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.Name)), NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.ShortName.Split(',')[0])), NumberToWeekStr(int.Parse(dictionaryItemModel.ShortName.Split(',')[1])));
|
|
}
|
|
else
|
|
{
|
|
str = string.Format("标的交割月前{0}个月倒数第{1}个{2}{3}", NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.Name)), NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.ShortName.Split(',')[0])), NumberToWeekStr(int.Parse(dictionaryItemModel.ShortName.Split(',')[1])), dictionaryItemModel.ShortName.Split(',')[2] == "0" ? "(向前调整)" : "(向后调整)");
|
|
}
|
|
}
|
|
dicStr.Add(str, str);
|
|
}
|
|
}
|
|
}
|
|
return dicStr;
|
|
}
|
|
public Dictionary<int, string> GetForwardDateDic()
|
|
{
|
|
var dictionaryModel = basedb.Dictionaries.FirstOrDefault(d => d.Name == "累计转远期到期日类型");
|
|
var dicStr = new Dictionary<int, string>();
|
|
if (dictionaryModel != null)
|
|
{
|
|
var dictionaryItemModels = basedb.DictionaryItems.Where(l => l.DictId == dictionaryModel.Id).ToList();
|
|
//标的交割月前 { 【】 }个月倒数第 { 【】 }个 { 交易日 / 星期【】}
|
|
if (dictionaryItemModels != null && dictionaryItemModels.Any())
|
|
{
|
|
foreach (var dictionaryItemModel in dictionaryItemModels)
|
|
{
|
|
var str = "";
|
|
|
|
if (int.Parse(dictionaryItemModel.Name) == 1)
|
|
{
|
|
//标的交割月在前一月 0代表交易日
|
|
if (dictionaryItemModel.ShortName.Split(',')[1] == "0")
|
|
{
|
|
//适应以前规则
|
|
str = string.Format("标的交割月前{0}{1}", NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.ShortName.Split(',')[0])), NumberToWeekStr(int.Parse(dictionaryItemModel.ShortName.Split(',')[1])));
|
|
}
|
|
else
|
|
{
|
|
str = string.Format("标的交割月前倒数第{0}个{1}{2}", NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.ShortName.Split(',')[0])), NumberToWeekStr(int.Parse(dictionaryItemModel.ShortName.Split(',')[1])), dictionaryItemModel.ShortName.Split(',')[2] == "0" ? "(向前调整)" : "(向后调整)");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//不在当月
|
|
if (dictionaryItemModel.ShortName.Split(',')[1] == "0")
|
|
{
|
|
str = string.Format("标的交割月前{0}个月倒数第{1}个{2}", NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.Name)), NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.ShortName.Split(',')[0])), NumberToWeekStr(int.Parse(dictionaryItemModel.ShortName.Split(',')[1])));
|
|
}
|
|
else
|
|
{
|
|
str = string.Format("标的交割月前{0}个月倒数第{1}个{2}{3}", NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.Name)), NumberHelper.CurrToChnInt(int.Parse(dictionaryItemModel.ShortName.Split(',')[0])), NumberToWeekStr(int.Parse(dictionaryItemModel.ShortName.Split(',')[1])), dictionaryItemModel.ShortName.Split(',')[2] == "0" ? "(向前调整)" : "(向后调整)");
|
|
}
|
|
}
|
|
dicStr.Add(dictionaryItemModel.Id, str);
|
|
}
|
|
}
|
|
}
|
|
return dicStr;
|
|
}
|
|
}
|
|
public enum ForwardDateTypeEnum
|
|
{
|
|
交易日 = 0,
|
|
星期一 = 1,
|
|
星期二 = 2,
|
|
星期三 = 3,
|
|
星期四 = 4,
|
|
星期五 = 5,
|
|
星期六 = 6,
|
|
星期日 = 7,
|
|
}
|
|
}
|