/// <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); }