public Campaign_MemberQRCodeBundle GetMemberQRCodeBundle(Guid id) { Campaign_MemberQRCodeBundle bundle = new Campaign_MemberQRCodeBundle(); bundle.Campaign = _campaignManager.GetCampaign(id); bundle.MemberQRCode = GetMemberQRCode(id); return(bundle); }
public string MemberQRCodeLanding(Guid campaignId, Guid qrCodeOwnMemberId, string visitorOpenId) { Campaign_MemberQRCodeBundle campaignBundle = GetMemberQRCodeBundle(campaignId); if (campaignBundle.Empty) { return(null); } if (String.IsNullOrEmpty(campaignBundle.MemberQRCode.LandingUrl)) { return(null); } //判断活动状态 EnumCampaignStatus?status = _campaignManager.GetStatus(campaignId); if (status == null || status.Value != EnumCampaignStatus.Ongoing) { //允许落地,但是不奖励了 return(campaignBundle.MemberQRCode.LandingUrl); } //如果同一个OpenId扫描过,则不奖励,但是日志还是会记录,用于统计 List <CommandParameter> logParameterList = new List <CommandParameter>(); logParameterList.Add(new CommandParameter("@campaignId", campaignId)); logParameterList.Add(new CommandParameter("@qrCodeOwnMember", qrCodeOwnMemberId)); logParameterList.Add(new CommandParameter("@visitorOpenId", visitorOpenId)); //同一个访问者扫了多少次 int sameVisitorCount = 0; _campaignManager.DataBase.ExecuteScalar <int>( "SELECT Count(1) FROM [Campaign_MemberQRCodeLandingLog] WHERE [CampaignId] = @campaignId AND [QRCodeOwnMember] = @qrCodeOwnMember AND [VisitorOpenId] = @visitorOpenId", logParameterList, (scalarValue) => { sameVisitorCount = scalarValue; }); #region 奖励积分 if (campaignBundle.MemberQRCode.LandingPoint > 0 && sameVisitorCount == 0) { //奖励积分 PointTrackArgs args = new PointTrackArgs(); args.DomainId = campaignBundle.Campaign.Domain; args.MemberId = qrCodeOwnMemberId; args.Quantity = campaignBundle.MemberQRCode.LandingPoint; args.Type = MemberPointTrackType.Campaign; args.TagName = campaignBundle.Campaign.Name; args.TagId = campaignId; _campaignManager.MemberManager.PointTrack(args); } #endregion #region 计数 //LandingCount 直接+1 LandingPersonCount 要判断人员是否重复 //查询已经有多少人扫过 List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@campaignId", campaignId)); parameterList.Add(new CommandParameter("@qrCodeOwnMember", qrCodeOwnMemberId)); if (sameVisitorCount == 0) { _campaignManager.DataBase.ExecuteNonQuery( "UPDATE [Campaign_MemberQRCodeItem] SET [LandingCount] = [LandingCount] + 1,[LandingPersonCount] = [LandingPersonCount] + 1 WHERE [CampaignId] = @campaignId AND [Member] = @qrCodeOwnMember ", parameterList); } else { _campaignManager.DataBase.ExecuteNonQuery( "UPDATE [Campaign_MemberQRCodeItem] SET [LandingCount] = [LandingCount] + 1 WHERE [CampaignId] = @campaignId AND [Member] = @qrCodeOwnMember ", parameterList); } #endregion //记录落地日志 Campaign_MemberQRCodeLandingLogEntity log = new Campaign_MemberQRCodeLandingLogEntity(); log.CampaignId = campaignId; log.Domain = campaignBundle.Campaign.Domain; log.QRCodeOwnMember = qrCodeOwnMemberId; log.VisitorOpenId = visitorOpenId; log.LandingTime = DateTime.Now; _campaignManager.DataBase.Insert(log); return(campaignBundle.MemberQRCode.LandingUrl); }