Пример #1
0
        /// <summary>
        /// 获得积分
        /// </summary>
        /// <remarks>请在Transaction中使用</remarks>
        /// <returns></returns>
        public async Task GainAsync(long MemberId, EmMemberPointType MemberPointType,
                                    int Points, EmMemberPointBusType BusType, long BusId, string BusDesc, long?OperatorId)
        {
            using (var dapper = DapperFactory.CreateWithTrans())
            {
                try
                {
                    await _GainAsync(dapper, MemberId, MemberPointType, Points, BusType, BusId, BusDesc, OperatorId);

                    dapper.Commit();
                }
                catch (Exception)
                {
                    dapper.Rollback();
                    throw;
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 调整积分
        /// </summary>
        public async Task AdjustAsync(long[] MemberId, EmMemberPointType MemberPointType,
                                      int Points, EmMemberPointBusType BusType, long BusId, string BusDesc, long?OperatorId)
        {
            if (MemberId == null || MemberId.Length == 0)
            {
                throw new VinoArgNullException("请选择会员!");
            }
            if (Points == 0)
            {
                throw new VinoArgNullException("调整积分不能为0!");
            }
            if (Points < -9999 || Points > 9999)
            {
                throw new VinoArgNullException("调整积分超出范围!");
            }

            using (var dapper = DapperFactory.CreateWithTrans())
            {
                try
                {
                    if (Points > 0)
                    {
                        foreach (var id in MemberId)
                        {
                            await _GainAsync(dapper, id, MemberPointType, Points, BusType, BusId, BusDesc, OperatorId);
                        }
                    }
                    else
                    {
                        foreach (var id in MemberId)
                        {
                            await _ConsumeAsync(dapper, id, MemberPointType, Math.Abs(Points), BusType, BusId, BusDesc, OperatorId);
                        }
                    }
                    dapper.Commit();
                }
                catch (Exception)
                {
                    dapper.Rollback();
                    throw;
                }
            }
        }
Пример #3
0
        private async Task _GainAsync(IDapper dapper, long MemberId, EmMemberPointType MemberPointType,
                                      int Points, EmMemberPointBusType BusType, long BusId, string BusDesc, long?OperatorId)
        {
            if (Points <= 0)
            {
                throw new VinoArgNullException("积分值必须大于0!");
            }
            if (Points > 9999)
            {
                throw new VinoArgNullException("调整积分超出范围!");
            }

            //取得会员数据
            var member = await dapper.QueryOneAsync <Member>(new { Id = MemberId });

            if (member == null)
            {
                throw new VinoArgNullException("无法取得会员数据!");
            }

            //取得会员积分数据
            var memberPoint = await dapper.QueryOneAsync <MemberPoint>(new { MemberId = MemberId, Type = MemberPointType, IsDeleted = false });

            if (memberPoint == null)
            {
                //创建新会员积分数据
                memberPoint = new MemberPoint
                {
                    Id            = ID.NewID(),
                    MemberId      = MemberId,
                    Type          = MemberPointType,
                    Points        = Points,
                    ExpiredPoints = 0,
                    UsablePoints  = Points,
                    UsedPoints    = 0,
                    IsDeleted     = false,
                    CreateTime    = DateTime.Now
                };
                await dapper.InsertAsync(memberPoint);
            }
            else
            {
                //积分计算
                var data = new
                {
                    UsablePoints = memberPoint.UsablePoints + Points,
                    Points       = memberPoint.Points + Points
                };

                await dapper.UpdateAsync <MemberPoint>(data, new { Id = memberPoint.Id });
            }

            //log
            MemberPointRecord record = new MemberPointRecord
            {
                Id            = ID.NewID(),
                MemberPointId = memberPoint.Id,
                MemberId      = MemberId,
                ChangeType    = EmMemberPointChangeType.Gain,
                Points        = Points,
                BusType       = BusType,
                BusId         = BusId,
                BusDesc       = BusDesc,
                OperatorId    = OperatorId,
                IsDeleted     = false,
                CreateTime    = DateTime.Now
            };
            await dapper.InsertAsync(record);
        }