/// <summary> /// 获取当前时间范围 /// </summary> /// <param name="date">当前日期</param> /// <param name="range">日期范围</param> /// <param name="startDate">输出开始日期</param> /// <param name="endDate">输出结束日期</param> public static void GetDateRange(DateTime date, DateRangeEnum range, out DateTime startDate, out DateTime endDate) { switch (range) { case DateRangeEnum.Week: startDate = date.AddDays(-(int)date.DayOfWeek).Date; endDate = date.AddDays(6 - (int)date.DayOfWeek + 1).Date.AddSeconds(-1); break; case DateRangeEnum.Month: startDate = new DateTime(date.Year, date.Month, 1); endDate = startDate.AddMonths(1).Date.AddSeconds(-1); break; case DateRangeEnum.Quarter: if (date.Month <= 3) { startDate = new DateTime(date.Year, 1, 1); } else if (date.Month <= 6) { startDate = new DateTime(date.Year, 4, 1); } else if (date.Month <= 9) { startDate = new DateTime(date.Year, 7, 1); } else { startDate = new DateTime(date.Year, 10, 1); } endDate = startDate.AddMonths(3).AddSeconds(-1); break; case DateRangeEnum.HalfYear: if (date.Month <= 6) { startDate = new DateTime(date.Year, 1, 1); } else { startDate = new DateTime(date.Year, 7, 1); } endDate = startDate.AddMonths(6).AddSeconds(-1); break; case DateRangeEnum.Year: startDate = new DateTime(date.Year, 1, 1); endDate = startDate.AddYears(1).AddSeconds(-1); break; default: startDate = DateTime.MinValue; endDate = DateTime.MinValue; break; } }
public static bool CheckDateRange(DateRangeEnum dateRange, string startDate, string endDate, out DateTime dateS, out DateTime dateE) { dateS = default; dateE = default; switch (dateRange) { case DateRangeEnum.Today: Today(out dateS, out dateE); break; case DateRangeEnum.Yesterday: Yesterday(out dateS, out dateE); break; case DateRangeEnum.ThisWeek: DateTime.Now.GetDaysOfWeek(out dateS, out dateE); break; case DateRangeEnum.LastWeek: DateTime.Now.AddDays(-7).GetDaysOfWeek(out dateS, out dateE); break; case DateRangeEnum.ThisMonth: var dateMonthE = DateTime.Parse(DateTime.Now.AddMonths(1).ToString("yyyy-MM-01")).AddSeconds(-1); dateS = DateTime.Parse($"{DateTime.Now.ToString("yyyy-MM-01")} 00:00:00.000"); dateE = DateTime.Parse($"{dateMonthE.ToString("yyyy-MM-dd")} 23:59:59.999"); break; case DateRangeEnum.LastMonth: var dateLastMonthE = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddSeconds(-1); dateS = DateTime.Parse($"{DateTime.Now.AddMonths(-1).ToString("yyyy-MM-01")} 00:00:00.000"); dateE = DateTime.Parse($"{dateLastMonthE.ToString("yyyy-MM-dd")} 23:59:59.999"); break; default: if (!(startDate.IsStartDate(out dateS) && endDate.IsEndDate(out dateE))) { return(false); } break; } return(true); }
/// <summary> /// 获取当前的时间范围 /// </summary> /// <param name="range"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> public static void GetDateRange(DateRangeEnum range, out DateTime startDate, out DateTime endDate) { GetDateRange(DateTime.Now, range, out startDate, out endDate); }
/// <summary> /// 获取排行表。我的排行从扩展属性dataExt获取 /// </summary> /// <param name="statItemType">统计项</param> /// <param name="dateRange">日期范围</param> /// <param name="startDate">开始日期,仅当dateRange为0时才生效(即其他)</param> /// <param name="endDate">结束日期,仅当dateRange为0时才生效(即其他)</param> /// <returns></returns> public ExtList <RankItemDto> GetWorkRank(StatItemTypeEnum statItemType, DateRangeEnum dateRange, string startDate, string endDate) { if (!QueryDto.CheckDateRange(dateRange, startDate, endDate, out var dateS, out var dateE)) { return(app.ThrowException <ExtList <RankItemDto> >("日期范围无效", AppExceptionType.ParameterError)); } var query = statItemType switch { StatItemTypeEnum.InputHouse => GetHouseQuery(true, dateS, dateE), StatItemTypeEnum.MlsHouse => GetMLSHouseQuery(true, dateS, dateE), StatItemTypeEnum.InputDemnd => GetDemandQuery(true, dateS, dateE), StatItemTypeEnum.Telephone => GetContactTelephoneQuery(true, dateS, dateE), StatItemTypeEnum.CallMe => GetContactCallMeQuery(true, dateS, dateE), StatItemTypeEnum.Contact => GetContactTelephoneQuery(true, dateS, dateE),// 联络默认就是去电 StatItemTypeEnum.Brower => GetBrowerQuery(true, dateS, dateE), StatItemTypeEnum.Share => GetShareQuery(true, dateS, dateE), StatItemTypeEnum.Concerned => GetConcernedQuery(true, dateS, dateE), StatItemTypeEnum.VisitUser => GetVisitUserQuery(true, dateS, dateE), }; if (query == null) { return(app.ThrowException <ExtList <RankItemDto> >("功能暂未实现")); } Lib.StopwatchLog.RecordElapsedMilliseconds("query"); var list = new ExtList <RankItemDto>(); Dictionary <long, UserInfo> userPhoneNumberList = db.CurrentCorpUserPhoneNumberList; if (statItemType == StatItemTypeEnum.CallMe) { list.AddRange(query.OrderByDescending(o => o.Value).Select(x => new RankItemDto { Value = x.Value, User = new UserInfo { UserId = long.Parse(x.Code) } })); } else { list.AddRange(query.OrderByDescending(o => o.Value).Select(x => new RankItemDto { Value = x.Value, User = new UserInfo { UserId = (int)x.ID } })); } Lib.StopwatchLog.RecordElapsedMilliseconds("list"); var userInfoList = db.CurrentCorpUserInfoList; var index = 1; foreach (var item in list) { item.RankIndex = index++; if (statItemType == StatItemTypeEnum.CallMe) { item.User = userPhoneNumberList[item.User.UserId]; } else { item.User = userInfoList.GetValueOrDefault((int)item.User.UserId, item.User); } } var rankUserIdList = list.Select(x => x.User.UserId).ToList(); var nonRankUserList = userInfoList.Where(x => !rankUserIdList.Contains(x.Key)).ToList(); foreach (var user in nonRankUserList) { list.Add(new RankItemDto() { RankIndex = index++, User = user.Value, Value = 0 }); } Lib.StopwatchLog.RecordElapsedMilliseconds("userinfo"); // 我的排行 list.DataExt = list.FirstOrDefault(x => x.User.UserId == app.User.UserID) ?? new RankItemDto() { User = userInfoList.GetValueOrDefault(app.User.UserID, new UserInfo() { UserId = app.User.UserID, UserName = app.User.UserName, AvatarUrl = app.User.AvatarUrl }) }; Lib.StopwatchLog.WriteLog(); return(list); }