using Furion.DependencyInjection; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Localization; using RoadFlow.Utility; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RoadFlow.Data { public class WorkDate: RoadFlowRepository, IWorkDate, ITransient { /// /// 得到一个时间加上几天之后的工作时间 /// /// 天数 /// 时间 /// public DateTime GetWorkDateTime(double days, DateTime? dt = null) { DateTime dateTime = dt != null && dt.HasValue ? dt.Value : Utility.DateExtensions.Now; var yearList = GetYearList(dateTime.Year); int max = (int)Math.Floor(days); for (int i = 0; i < max; i++) { if (yearList.Exists(p => p.WorkDay == dateTime.AddDays(i).Date && p.IsWork == 0)) { max++; } } return dateTime.AddDays(max + (days - Math.Floor(days))); } /// /// 得到一年所有工作日 /// /// public List GetYearList(int year) { string cacheKey = CACHEKEY + "_" + year.ToString(); object obj = _memoryCache.Get(cacheKey); if (null == obj) { List workDates = db.Queryable() .Where("YEAR(WorkDay)="+ year) .ToList(); _memoryCache.Set(CACHEKEY, workDates); return workDates; /* using (var db = new DataContext()) { string sql = db.IsOracle ? "SELECT * FROM RF_WorkDate WHERE TO_CHAR(WorkDay,'yyyy')=" + year : db.IsPostgreSql ? "select * from rf_workdate where extract(year from WorkDay)=" + year : "SELECT * FROM RF_WorkDate WHERE YEAR(WorkDay)=" + year; var workDates = db.Query(sql); _memoryCache.set(CACHEKEY, workDates); return workDates; }*/ } else { return (List)obj; } } } }