//TODO:积分变更记录中没有appid?
        /// <summary>
        /// 修改积分
        /// </summary>
        /// <param name="args"></param>
        public PointTrackResult PointTrack(PointTrackArgs args)
        {
            PointTrackResult result = new PointTrackResult();

            if (args == null)
            {
                return(result);
            }

            if (args.Quantity == 0)
            {
                return(result);
            }

            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@domain", args.DomainId));
            parameterList.Add(new CommandParameter("@memberId", args.MemberId));
            parameterList.Add(new CommandParameter("@quantity", args.Quantity));
            parameterList.Add(new CommandParameter("@type", (int)args.Type));
            parameterList.Add(new CommandParameter("@tagName", args.TagName));
            parameterList.Add(new CommandParameter("@tagId", args.TagId));
            parameterList.Add(new CommandParameter("@operatorUser", args.OperatorUser));
            parameterList.Add(new CommandParameter("@remark", args.Remark));

            DataSet dsResult =
                _dataBase.ExecuteDataSet(CommandType.StoredProcedure, "TrackMemberPoint", parameterList, new string[] { "result" });

            //result.Reason = int.Parse(dsResult.Tables[0].Rows[0]["Result"].ToString());

            result.Success   = true;
            result.LeftPoint = int.Parse(dsResult.Tables[0].Rows[0]["Point"].ToString());

            return(result);
        }
        public ActionResult PointDecrement()
        {
            PointTrackArgs args = RequestArgs <PointTrackArgs>();

            if (args == null)
            {
                return(RespondResult(false, "参数无效。"));
            }

            args.DomainId     = DomainContext.Domain.Id;
            args.Type         = MemberPointTrackType.UserOperate;
            args.OperatorUser = MemberContext.User.Id;

            PointTrackResult pointTrackResult = _memberManager.PointTrack(args);

            #region 操作日志

            if (pointTrackResult.Success)
            {
                _operatedLogManager.Create(new OperatedLogEntity()
                {
                    Domain      = DomainContext.Domain.Id,
                    AppId       = DomainContext.AppId,
                    User        = MemberContext.User.Id,
                    IP          = Request.UserHostAddress,
                    Module      = EnumModule.Member,
                    Description = "消减用户积分"
                });
            }

            #endregion

            return(RespondDataResult(pointTrackResult));
        }
        internal PointTrackResult ShareCampaignToAppMessage(CampaignEntity campaign, Guid?memberId, string openId)
        {
            PointTrackResult result = new PointTrackResult();

            if (campaign == null || campaign.Status != EnumCampaignStatus.Ongoing)
            {
                return(result);
            }

            if (campaign.ShareAppMessagePoint <= 0)
            {
                return(result);
            }

            #region 判断有没有分享过

            ShareLogEntity log = ShareManager.GetShareLog(campaign.Id, openId);
            if (log == null)
            {
                log                 = new ShareLogEntity();
                log.Member          = memberId;
                log.OpenId          = openId;
                log.PageId          = campaign.Id;
                log.ShareAppMessage = true;
                ShareManager.Create(log);
            }
            else
            {
                if (log.ShareAppMessage && log.Member.HasValue)
                {
                    return(result);
                }

                if (log.ShareAppMessage && memberId.HasValue == false)
                {
                    return(result);
                }

                log.Member          = memberId;
                log.ShareAppMessage = true;
                ShareManager.Update(log);
            }

            #endregion

            if (memberId.HasValue)
            {
                PointTrackArgs args = new PointTrackArgs();
                args.DomainId = campaign.Domain;
                args.MemberId = memberId.Value;
                args.Quantity = campaign.ShareAppMessagePoint;
                args.Type     = MemberPointTrackType.Campaign;
                args.TagName  = campaign.Name;
                args.TagId    = campaign.Id;
                result        = MemberManager.PointTrack(args);
            }

            return(result);
        }
Пример #4
0
        /// <summary>
        /// 修改审核状态 ,通过
        /// </summary>
        /// <param name="args"></param>
        public NormalResult PictureVoteItemApprove(DomainContext domainContext, Campaign_PictureVoteItemApproveArgs args)
        {
            //判断是否达到最大可参与人数
            if (PictureVoteIsFullParticipant(args.CampaignId))
            {
                return(new NormalResult("该活动已达最大允许参与人数,如需调整允许参与的人数,请编辑此活动基本信息。"));
            }

            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@id", args.ItemId));
            parameterList.Add(new CommandParameter("@approveStatus", EnumCampaignPictureVoteItemApproveStatus.Approved));

            _campaignManager.DataBase.ExecuteNonQuery("UPDATE [Campaign_PictureVoteItem] SET [ApproveStatus] = @approveStatus WHERE [Id] = @id",
                                                      parameterList);

            //奖励参与者积分
            if (args.MemberId.HasValue)
            {
                Campaign_PictureVoteEntity campaignPictureVote = GetPictureVote(args.CampaignId);
                if (campaignPictureVote.ApprovedPoint > 0)
                {
                    CampaignEntity campaign = _campaignManager.GetCampaign(args.CampaignId);

                    PointTrackArgs pointTrackArgs = new PointTrackArgs();
                    pointTrackArgs.DomainId = campaign.Domain;
                    pointTrackArgs.MemberId = args.MemberId.Value;
                    pointTrackArgs.Quantity = campaignPictureVote.ApprovedPoint;
                    pointTrackArgs.Type     = MemberPointTrackType.Campaign;
                    pointTrackArgs.TagName  = campaign.Name;
                    pointTrackArgs.TagId    = campaign.Id;

                    _campaignManager.MemberManager.PointTrack(pointTrackArgs);
                }
            }

            return(new NormalResult());
        }
Пример #5
0
        protected override string Handle(ReceivingXMLMessage_SubscribeEventMessage message, ClientDomainContext domainContext)
        {
            //用户管理-获取用户基本信息
            //未认证订阅号 未认证服务号 没有此权限

            RequestApiResult <WeixinUser> getUserInfoResult =
                UserApiWrapper.GetUserInfo(domainContext, message.FromUserName);

            if (getUserInfoResult.Success == false)
            {
                return(String.Empty);
            }

            if (getUserInfoResult.ApiResult.Subscribe == 0)
            {
                return(String.Empty);
            }

            #region 判断是否是扫描带参数二维码事件

            //扫描带参数二维码事件
            string strScenicQRCodeId = String.Empty;
            if (String.IsNullOrEmpty(message.EventKey) == false)
            {
                //用户未关注时,进行关注后的事件推送
                if (message.EventKey.StartsWith("qrscene_"))
                {
                    strScenicQRCodeId = message.EventKey.Remove(0, "qrscene_".Length);
                }
            }

            //获取场景二维码Id
            Guid?scenicQRCodeId = null;
            ScenicQRCodeLandingLogEntity scenicQRCodeLandingLog = null;
            if (String.IsNullOrEmpty(strScenicQRCodeId) == false)
            {
                Guid scenicQRCodeId2;
                if (Guid.TryParse(strScenicQRCodeId, out scenicQRCodeId2))
                {
                    scenicQRCodeId = scenicQRCodeId2;

                    scenicQRCodeLandingLog               = new ScenicQRCodeLandingLogEntity();
                    scenicQRCodeLandingLog.Domain        = domainContext.Domain.Id;
                    scenicQRCodeLandingLog.QRCodeId      = scenicQRCodeId.Value;
                    scenicQRCodeLandingLog.VisitorOpenId = message.FromUserName;
                    scenicQRCodeLandingLog.LandingTime   = DateTime.Now;
                }
            }

            #endregion

            #region 判断是否是通过RecomendUrl引流关注的

            Guid?refereeMemberId = null;
            //如果有场景二维码ID就不用判断RecomendUrl了
            if (String.IsNullOrEmpty(strScenicQRCodeId))
            {
                RecommendUrlLogEntity recomendUrlLog = _recommendUrlManager.GetLogByOpenId(getUserInfoResult.ApiResult.OpenId);
                if (recomendUrlLog != null)
                {
                    refereeMemberId = recomendUrlLog.UrlOwnMember;
                }
            }

            #endregion

            //根据OpenId获取用户信息
            MemberEntity member = _memberManager.GetMemberByOpenId(domainContext.Domain.Id, domainContext.AppId, getUserInfoResult.ApiResult.OpenId);

            AddMemberArgs args = new AddMemberArgs();
            args.WeixinUser      = getUserInfoResult.ApiResult;
            args.ScenicQRCodeId  = scenicQRCodeId;
            args.RefereeMemberId = refereeMemberId;

            if (member == null)
            {
                //添加新用户
                member = _memberManager.AddMember(domainContext, args);

                //更新场景二维码计数
                if (scenicQRCodeId.HasValue)
                {
                    _scenicQRCodeManager.IncrementAttentionPerson(scenicQRCodeId.Value, scenicQRCodeLandingLog);
                }

                //如果通过RecomendUrl引流关注的,奖励积分
                if (refereeMemberId.HasValue && domainContext.RecommendUrlSettings != null &&
                    domainContext.RecommendUrlSettings.AttentionPoint > 0)
                {
                    PointTrackArgs pointTrackArgs = new PointTrackArgs();
                    pointTrackArgs.DomainId = domainContext.Domain.Id;
                    pointTrackArgs.MemberId = refereeMemberId.Value;
                    pointTrackArgs.Quantity = domainContext.RecommendUrlSettings.AttentionPoint;
                    pointTrackArgs.Type     = MemberPointTrackType.RecommendUrl;
                    pointTrackArgs.TagName  = member.NickName;
                    pointTrackArgs.TagId    = member.Id;
                    _memberManager.PointTrack(pointTrackArgs);
                }

                //判断是否有二级上线,对其奖励积分
                if (refereeMemberId.HasValue && domainContext.RecommendUrlSettings != null &&
                    domainContext.RecommendUrlSettings.Level2AttentionPoint > 0)
                {
                    RefereeUplineWrapper refereeUplineWrapper =
                        _recommendUrlManager.GetRefereeUplineList(domainContext.Domain.Id, domainContext.AppId, refereeMemberId.Value);
                    if (refereeUplineWrapper.Upline != null)
                    {
                        PointTrackArgs pointTrackArgs = new PointTrackArgs();
                        pointTrackArgs.DomainId = domainContext.Domain.Id;
                        pointTrackArgs.MemberId = refereeUplineWrapper.Upline.MemberId;
                        pointTrackArgs.Quantity = domainContext.RecommendUrlSettings.Level2AttentionPoint;
                        pointTrackArgs.Type     = MemberPointTrackType.RecommendUrl;
                        pointTrackArgs.TagName  = member.NickName;
                        pointTrackArgs.TagId    = member.Id;
                        _memberManager.PointTrack(pointTrackArgs);
                    }
                }
            }
            else
            {
                //更新当前用户信息
                _memberManager.UpdateMember(member, args);

                //更新场景二维码计数
                if (scenicQRCodeId.HasValue)
                {
                    _scenicQRCodeManager.IncrementLanding(scenicQRCodeId.Value, scenicQRCodeLandingLog);
                }
            }

            #region 关注时的自动回复

            if (domainContext.AutoReplyOnSubscribe != null &&
                String.IsNullOrEmpty(domainContext.AutoReplyOnSubscribe.Content) == false)
            {
                ResponsiveXMLMessageBase replyMessage =
                    AutoReplyHelper.GetXMLMessage(domainContext, message.FromUserName, domainContext.AutoReplyOnSubscribe);

                if (replyMessage != null)
                {
                    return(XMLMessageHelper.XmlSerialize(replyMessage));
                }
                else
                {
                    return(String.Empty);
                }
            }
            else
            {
                return(String.Empty);
            }

            #endregion
        }
        public ShareResult ShareAppMessage(Guid pageId, Guid?memberId, string openId)
        {
            ShareResult result = new ShareResult();

            AdvancedArticleEntity advancedArticle = GetAdvancedArticle(pageId);

            if (advancedArticle == null)
            {
                return(result);
            }

            #region 判断有没有分享过

            ShareLogEntity log = _shareManager.GetShareLog(pageId, openId);
            if (log == null)
            {
                log                 = new ShareLogEntity();
                log.Member          = memberId;
                log.OpenId          = openId;
                log.PageId          = pageId;
                log.ShareAppMessage = true;
                _shareManager.Create(log);
            }
            else
            {
                if (log.ShareAppMessage && log.Member.HasValue)
                {
                    return(result);
                }

                if (log.ShareAppMessage && memberId.HasValue == false)
                {
                    return(result);
                }

                log.Member          = memberId;
                log.ShareAppMessage = true;
                _shareManager.Update(log);
            }

            #endregion

            if (advancedArticle.ShareAppMessagePoint <= 0)
            {
                return(result);
            }

            if (memberId.HasValue)
            {
                PointTrackArgs args = new PointTrackArgs();
                args.DomainId = advancedArticle.Domain;
                args.MemberId = memberId.Value;
                args.Quantity = advancedArticle.ShareAppMessagePoint;
                args.Type     = MemberPointTrackType.Share;
                args.TagName  = advancedArticle.Title;
                args.TagId    = advancedArticle.Id;

                PointTrackResult pointTrackResult = _memberManager.PointTrack(args);
                if (pointTrackResult.Success == false)
                {
                    return(result);
                }

                result.Point = advancedArticle.ShareAppMessagePoint;
            }

            return(result);
        }
Пример #7
0
        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);
        }