Пример #1
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);
        }