/// <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;
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 /// <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);
 }
Esempio n. 4
0
        /// <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);
        }