/// <summary>
        /// 门店内员工排名
        /// 排名规则:
        /// 1.取出打赏金额大于零的员工
        /// 2.比较打赏金额,(金额高的往前排)
        /// 3.金额相同,比较评价等级 (等级高的往前排)
        /// 4.如果还相同,比较打赏时间(时间靠前,往前排)
        /// </summary>
        /// <param name="pRequest"></param>
        /// <returns></returns>
        protected override GetTopRewardListRD ProcessRequest(DTO.Base.APIRequest <GetTopRewardListRP> pRequest)
        {
            var rd         = new GetTopRewardListRD();
            var customerId = CurrentUserInfo.ClientID;

            var trrBll  = new T_RewardRecordBLL(CurrentUserInfo);
            var userBll = new T_UserBLL(CurrentUserInfo);

            //获取员工列表(门店内)
            var userList = userBll.QueryByEntity(new T_UserEntity()
            {
                customer_id = customerId
            }, null);
            var userService = new cUserService(CurrentUserInfo);

            CurrentUserInfo.CurrentUserRole.UnitId = string.IsNullOrEmpty(CurrentUserInfo.CurrentUserRole.UnitId) ? "" : CurrentUserInfo.CurrentUserRole.UnitId;
            var para_unit_id = CurrentUserInfo.CurrentUserRole.UnitId;

            var maxRowCount   = Utils.GetIntVal(Request("limit"));
            var startRowIndex = Utils.GetIntVal(Request("start"));
            var rowCount      = maxRowCount > 0 ? maxRowCount : 999;   //每页行数
            var startIndex    = startRowIndex > 0 ? startRowIndex : 0; //当前页的起始行数

            var userdata = new JIT.CPOS.BS.Entity.User.UserInfo();

            if (string.IsNullOrEmpty(CurrentUserInfo.CurrentUserRole.UnitId))
            {
                userdata = userService.SearchUserListByUnitID(string.Empty, string.Empty, string.Empty, string.Empty,
                                                              rowCount, startIndex, CurrentUserInfo.CurrentUserRole.UnitId, para_unit_id, string.Empty, string.Empty);
            }
            else
            {
                userdata = userService.SearchUserListByUnitID(string.Empty, string.Empty, string.Empty, string.Empty,
                                                              rowCount, startIndex,
                                                              CurrentUserInfo.CurrentUserRole.UnitId, para_unit_id, string.Empty, string.Empty);
            }

            var orderBys = new OrderBy[1];

            orderBys[0] = new OrderBy()
            {
                FieldName = "CreateTime", Direction = OrderByDirections.Asc
            };
            var trrList = trrBll.QueryByEntity(new T_RewardRecordEntity()
            {
                PayStatus = 2, CustomerId = customerId
            }, orderBys);

            var oeBll  = new ObjectEvaluationBLL(CurrentUserInfo);
            var oeList = oeBll.QueryByEntity(new ObjectEvaluationEntity()
            {
                Type = 4, CustomerID = customerId
            }, null);
            var allOE = (from p in oeList.AsEnumerable()
                         group p by p.ObjectID into g
                         select new
            {
                g.Key,
                SumValue = g.Average(p => p.StarLevel)
            });

            var allRewards = (from p in trrList.AsEnumerable()
                              group p by p.RewardedOP into g
                              select new
            {
                g.Key,
                SumValue = g.Sum(p => p.RewardAmount)
            }).Where(g => g.SumValue > 0).OrderByDescending(g => g.SumValue);

            var rewardCount = allRewards.ToList().Count;

            //var top10Rewards = allRewards.Take(10);

            //金额相同,比较评价等级 (等级高的往前排)

            rd.RewardList = new List <RewardInfo>();
            rd.MyReward   = new RewardInfo();

            var index = 1;

            foreach (var item in allRewards)
            {
                var tmpRewardInfo = new RewardInfo();
                //var userinfo = userList.Where(t => t.user_id == item.Key).ToArray().FirstOrDefault();
                var userinfo = userdata.UserInfoList.Where(t => t.User_Id == item.Key).ToArray().FirstOrDefault();
                var oeinfo   = allOE.Where(t => t.Key == item.Key).ToArray().FirstOrDefault();
                if (userinfo != null)
                {
                    tmpRewardInfo = new RewardInfo()
                    {
                        UserID                                          = userinfo.User_Id,
                        UserName                                        = userinfo.User_Name,
                        UserPhoto                                       = userinfo.imageUrl,
                        StarLevel                                       = oeinfo != null?Convert.ToInt32(oeinfo.SumValue) : 0,
                                                           Rank         = index,
                                                           RewardIncome = item.SumValue
                    };
                    rd.RewardList.Add(tmpRewardInfo);
                    if (userinfo.User_Id == pRequest.UserID)
                    {
                        rd.MyReward = tmpRewardInfo;
                    }

                    index++;
                }
            }

            if (string.IsNullOrEmpty(rd.MyReward.UserID))//Top10之外
            {
                //var userinfo = userList.Where(t => t.user_id == pRequest.UserID).ToArray().FirstOrDefault();
                var     userinfo       = userdata.UserInfoList.Where(t => t.User_Id == pRequest.UserID).ToArray().FirstOrDefault();
                var     oeinfo         = allOE.Where(t => t.Key == pRequest.UserID).ToArray().FirstOrDefault();
                var     myReward       = allRewards.Where(t => t.Key == pRequest.UserID).FirstOrDefault();
                decimal?myRewardIncome = 0;
                if (myReward != null)
                {
                    myRewardIncome = myReward.SumValue != null ? myReward.SumValue : 0;
                    rewardCount    = allRewards.Where(g => g.SumValue > myReward.SumValue).ToList().Count;
                }
                var myStarLevel = oeinfo != null?Convert.ToInt32(oeinfo.SumValue) : 0;

                if (userinfo != null)
                {
                    rd.MyReward = new RewardInfo()
                    {
                        UserID       = userinfo.User_Id,
                        UserName     = userinfo.User_Name,
                        UserPhoto    = userinfo.imageUrl,
                        StarLevel    = myStarLevel,
                        Rank         = myRewardIncome > 0 ? rewardCount + 1 : 0,
                        RewardIncome = myRewardIncome
                    };
                }
            }

            return(rd);
        }
Exemple #2
0
        protected override GetConfigRD ProcessRequest(DTO.Base.APIRequest <GetConfigRP> pRequest)
        {
            var rd         = new GetConfigRD();
            var customerId = CurrentUserInfo.ClientID;
            var trrBll     = new T_RewardRecordBLL(CurrentUserInfo);//打赏记录
            var userBll    = new T_UserBLL(CurrentUserInfo);
            var cbsBll     = new CustomerBasicSettingBLL(CurrentUserInfo);
            var trcBll     = new T_RewardConfigBLL(CurrentUserInfo);
            var cbsEntity  = cbsBll.QueryByEntity(new CustomerBasicSettingEntity()
            {
                CustomerID = customerId
            }, null).FirstOrDefault();
            var trcEntitys = trcBll.QueryByEntity(new T_RewardConfigEntity()
            {
                CustomerId = customerId
            }, null);
            //获取员工
            var userInfo   = new T_UserEntity();
            var employeeId = pRequest.Parameters.EmployeeID;

            if (!string.IsNullOrEmpty(employeeId))
            {
                userInfo = userBll.QueryByEntity(new T_UserEntity()
                {
                    user_id = employeeId, customer_id = customerId
                }, null).FirstOrDefault();

                //员工头像
                var _ObjectImagesBLL = new ObjectImagesBLL(CurrentUserInfo);
                var userImg          = _ObjectImagesBLL.QueryByEntity(new ObjectImagesEntity()
                {
                    ObjectId = employeeId, CustomerId = customerId
                }, null).OrderByDescending(p => p.CreateTime).FirstOrDefault();

                //星级
                var oeBll  = new ObjectEvaluationBLL(CurrentUserInfo);
                var oeList = oeBll.QueryByEntity(new ObjectEvaluationEntity()
                {
                    ObjectID = employeeId, Type = 4, CustomerID = customerId
                }, null);
                var oeinfo = (from p in oeList.AsEnumerable()
                              group p by p.ObjectID into g
                              select new
                {
                    g.Key,
                    SumValue = g.Average(p => p.StarLevel)
                }).ToArray().FirstOrDefault();

                //打赏数据
                var rewardCount = trrBll.QueryByEntity(new T_RewardRecordEntity()
                {
                    RewardedOP = employeeId, PayStatus = 2, CustomerId = customerId
                }, null).Length;

                //员工信息
                rd.UserInfo = new List <UserInfo>();
                rd.UserInfo.Add(new UserInfo()
                {
                    UserName    = userInfo.user_name,
                    UserPhoto   = userImg != null ? userImg.ImageURL : string.Empty,
                    StarLevel   = oeinfo != null ? Convert.ToInt32(oeinfo.SumValue) : 0,
                    RewardCount = rewardCount
                });
            }

            //打赏类型
            if (cbsEntity != null)
            {
                switch (cbsEntity.SettingValue)
                {
                case "1":
                    rd.Type = 1;
                    break;

                case "2":
                    rd.Type = 2;
                    break;

                default:
                    rd.Type = 0;    //0或空(null)为两者
                    break;
                }
            }
            else
            {
                rd.Type = 0;//两者
            }

            //打赏金额列表
            rd.AmountList = new List <RewardAmountInfo>();
            foreach (var item in trcEntitys)
            {
                rd.AmountList.Add(new RewardAmountInfo()
                {
                    Amount = item.RewardAmount
                });
            }

            return(rd);
        }