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