Beispiel #1
0
 /// <summary>
 /// 接受新的升级订单--我报单
 /// </summary>
 public void AcceptNewUpdateOrder(int goodsCount, UpdateOrderType updateOrderType)
 {
     if (goodsCount == 0)
     {
         throw new Exception("没有升级订单");
     }
     if (_role == UserRole.Consumer)
     {
         //如果是普通会员则升级为Vip会员
         ApplyEvent(new UserRoleToPasserEvent());
     }
     if (_role == UserRole.Passer && updateOrderType == UpdateOrderType.VipPasserOrder)
     {
         //如果是经理升级单,升级到经理
         ApplyEvent(new UserRoleToVipPasserEvent());
     }
     if (_parentId != Guid.Empty)
     {
         //待分配的奖金-岗位补贴
         var leftAwardAmount = 100M * goodsCount;
         if (updateOrderType == UpdateOrderType.VipPasserOrder)
         {
             leftAwardAmount = 1000M * goodsCount;
         }
         ApplyEvent(new MyParentRecommandAPasserEvent(_parentId, _id, _role,
                                                      _id, _role, goodsCount, leftAwardAmount, 1, updateOrderType));
     }
 }
Beispiel #2
0
 public AcceptChildUpdateOrderCommand(Guid newVipId, UserRole newVipRole, int goodsCount, decimal leftAwardAmount, int level, UpdateOrderType updateOrderType)
 {
     NewVipId        = newVipId;
     NewVipRole      = newVipRole;
     GoodsCount      = goodsCount;
     LeftAwardAmount = leftAwardAmount;
     Level           = level;
     UpdateOrderType = updateOrderType;
 }
 public MyParentRecommandAPasserEvent(Guid parentId,
                                      Guid userId, UserRole userRole,
                                      Guid newVipId, UserRole newVipRole, int goodsCount, decimal leftAwardAmount, int level, UpdateOrderType updateOrderType = UpdateOrderType.VipOrder)
 {
     ParentId        = parentId;
     UserId          = userId;
     UserRole        = userRole;
     NewVipId        = newVipId;
     NewVipRole      = newVipRole;
     GoodsCount      = goodsCount;
     LeftAwardAmount = leftAwardAmount;
     Level           = level;
     UpdateOrderType = updateOrderType;
 }
Beispiel #4
0
        /// <summary>
        /// 接受被推荐人的升级订单 分发角色奖金
        /// </summary>
        /// <param name="goodsCount"></param>
        public void AcceptChildUpdateOrder(Guid newVipId, UserRole newVipRole, int goodsCount, decimal leftAwardAmount, int level, UpdateOrderType updateOrderType = UpdateOrderType.VipOrder)
        {
            if (goodsCount == 0)
            {
                throw new Exception("升级订单商品数量错误");
            }

            #region 用户推荐奖
            var leftAmount = leftAwardAmount;
            if (ConfigSettings.IsRecommandAward && leftAmount > 0)//是否开启推荐奖
            {
                var gratefulAward = 0M;
                if (_role != UserRole.Consumer && level == 1)
                {
                    //用户只要不是普通会员就拿直推奖
                    var directAward = Math.Round(ConfigSettings.DirectRecommandAward * goodsCount, 2);
                    if (updateOrderType == UpdateOrderType.VipPasserOrder)
                    {
                        directAward = Math.Round(ConfigSettings.DirectRecommandVipPasserAward * goodsCount, 2);
                    }
                    #region 感恩奖
                    if (_parentId != Guid.Empty)
                    {
                        //推荐人获取感恩奖金
                        var directGratefulAward = Math.Round(directAward * ConfigSettings.GratefulAwardPersent, 2);
                        gratefulAward += directGratefulAward;
                        //用户部分直推奖
                        var getAward = Math.Round((directAward - directGratefulAward), 2);
                        ApplyEvent(new UserDirectGetRecommandVipAwardEvent(_walletId, getAward));
                    }
                    else
                    {
                        //用户全部直推奖
                        ApplyEvent(new UserDirectGetRecommandVipAwardEvent(_walletId, directAward));
                    }
                    #endregion
                }
                if (_role == UserRole.VipPasser)//岗位补贴
                {
                    var perGoodsLeft = Math.Round(leftAwardAmount / goodsCount, 0);
                    if (perGoodsLeft == 100M || perGoodsLeft == 1000M)//每个报单商品剩余100元或者1000元说明,没有经理拿过该奖金,我就拿我的奖金
                    {
                        //我拿的岗位补贴金额
                        var award = ConfigSettings.VipPasserAward * goodsCount;
                        if (updateOrderType == UpdateOrderType.VipPasserOrder)
                        {
                            award = ConfigSettings.VipPasserAward2 * goodsCount;
                        }
                        #region 感恩奖
                        if (_parentId != Guid.Empty)
                        {
                            //推荐人获取感恩奖金
                            var vipPasserGratefulAward = Math.Round((award * ConfigSettings.GratefulAwardPersent), 2);
                            gratefulAward += vipPasserGratefulAward;
                            var getAward = Math.Round((award - vipPasserGratefulAward), 2);
                            ApplyEvent(new UserGetRecommandVipAwardEvent(_walletId, getAward));
                        }
                        else
                        {
                            //我拿50 用户间接推荐奖励,没有层数限制
                            ApplyEvent(new UserGetRecommandVipAwardEvent(_walletId, award));
                        }
                        #endregion
                        leftAmount -= award;
                    }
                }
                if (_role == UserRole.Director)//岗位补贴
                {
                    #region 感恩奖
                    if (_parentId != Guid.Empty)
                    {
                        //推荐人获取感恩奖金
                        var directorDratefulAward = Math.Round((leftAmount * ConfigSettings.GratefulAwardPersent), 2);
                        gratefulAward += directorDratefulAward;
                        var getAward = Math.Round((leftAmount - directorDratefulAward), 2);
                        ApplyEvent(new UserGetRecommandVipAwardEvent(_walletId, getAward));
                    }
                    else
                    {
                        //总监拿剩下的所有金额
                        ApplyEvent(new UserGetRecommandVipAwardEvent(_walletId, leftAmount));
                    }
                    #endregion
                    leftAmount = 0;
                }
                //感恩奖分配
                if (gratefulAward > 0)
                {
                    ApplyEvent(new MyParentCanGetGratefulAwardEvent(_parentId, gratefulAward, _info.Mobile + "的感恩奖"));
                }
            }
            #endregion

            #region 树的角色升级
            int myDirectRecommandPasserCount    = 0;
            int myRecommandPasserCount          = 0;
            var myDirectRecommandVipPasserCount = 0;
            var myRecommandVipPasserCount       = 0;

            foreach (var kvp in _myRecommends)
            {
                if (kvp.Value.Role == UserRole.Passer)
                {
                    myRecommandPasserCount++;
                    if (kvp.Value.Level == 1)
                    {
                        myDirectRecommandPasserCount++;
                    }
                }
                if (kvp.Value.Role == UserRole.VipPasser)
                {
                    myRecommandVipPasserCount++;
                    if (kvp.Value.Level == 1)
                    {
                        myDirectRecommandVipPasserCount++;
                    }
                }
            }
            //如果我是普通消费者并且有超过10个直推VIP  或者报单为经理升级单
            if (myDirectRecommandPasserCount >= 10 && myRecommandPasserCount >= 60 && _role == UserRole.Passer)
            {
                //我是VIP 直推10个VIP 团队60VIP 升级为经理
                ApplyEvent(new UserRoleToVipPasserEvent());
            }

            //我是经理 直推10个经理 团队10个经理 升级为总监
            if (myDirectRecommandVipPasserCount >= 10 && myRecommandVipPasserCount >= 60 && _role == UserRole.VipPasser)
            {
                ApplyEvent(new UserRoleToDirectorEvent());
            }

            #endregion

            //继续递归
            ApplyEvent(new MyParentRecommandAPasserEvent(_parentId, _id, _role,
                                                         newVipId, newVipRole, goodsCount, leftAmount, level + 1, updateOrderType));
        }
Beispiel #5
0
 public AcceptNewUpdateOrderCommand(int goodsCount, UpdateOrderType updateOrderType)
 {
     GoodsCount      = goodsCount;
     UpdateOrderType = updateOrderType;
 }