Files
zszq-trs/YLErpDAL/Modules/DictionaryModule/DictionarySerivice.cs
T
2024-05-09 14:06:26 +08:00

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,
}
}