/// <summary> /// 修改审核状态 ,拒绝 /// </summary> /// <param name="args"></param> public NormalResult PictureVoteItemRejected(DomainContext domainContext, Campaign_PictureVoteItemRejectedArgs args) { List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@id", args.ItemId)); parameterList.Add(new CommandParameter("@approveStatus", EnumCampaignPictureVoteItemApproveStatus.Rejected)); parameterList.Add(new CommandParameter("@rejectedMessage", args.Message)); _campaignManager.DataBase.ExecuteNonQuery( "UPDATE [Campaign_PictureVoteItem] SET [ApproveStatus] = @approveStatus,[RejectedMessage] = @rejectedMessage WHERE [Id] = @id", parameterList); return(new NormalResult()); }
public int GetTotalCount(DomainContext domainContext) { List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@domainId", domainContext.Domain.Id)); parameterList.Add(new CommandParameter("@appId", domainContext.AppId)); int intCount = 0; _dataBase.ExecuteScalar <int>( "SELECT Count(1) FROM [ScenicQRCode] WHERE [Domain] = @domainId AND [AppId] = @appId", parameterList, (scalarValue) => { intCount = scalarValue; }); return(intCount); }
public void SaveAutoReplyOnMessage(DomainContext domainContext, AutoReplyOnMessageEntity args) { if (args == null) { return; } lock (domainContext) { _dataBase.Remove(args); _dataBase.Insert(args); _domainManager.UpdateLastUpdateTime(domainContext.Domain.Id); } }
private ButtonClick GetClickButton(JToken json, DomainContext domainContext) { ButtonClick button = new ButtonClick(); button.Name = json["name"].ToString(); string key = json["key"].ToString(); switch (json["clickType"].ToString()) { case "MemberQRCode": key = "MemberQRCode:" + key; break; } return(button); }
/// <summary> /// 获取购物车中的商品 种类 数量 /// </summary> /// <returns></returns> public int GetShoppingCartPointCommodityCount(DomainContext domainContext, Guid memberId) { List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@domainId", domainContext.Domain.Id)); parameterList.Add(new CommandParameter("@appId", domainContext.AppId)); parameterList.Add(new CommandParameter("@memberId", memberId)); int intCount = 0; _dataBase.ExecuteScalar <int>( "SELECT Count(1) FROM [PointCommodityShoppingCart] WHERE [Domain] = @domainId AND [AppId] = @appId AND [Member] = @memberId", parameterList, (scalarValue) => { intCount = scalarValue; }); return(intCount); }
public RecommendUrlEntity Get(DomainContext domainContext, Guid memberId) { List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@domainId", domainContext.Domain.Id)); parameterList.Add(new CommandParameter("@appId", domainContext.AppId)); parameterList.Add(new CommandParameter("@memberId", memberId)); List <RecommendUrlEntity> list = _dataBase.Select <RecommendUrlEntity>( "SELECT * FROM [RecommendUrl] WHERE [Domain] = @domainId AND [AppId] = @appId AND [Member] = @memberId", parameterList); if (list.Count > 0) { return(list[0]); } Guid id = Guid.NewGuid(); string url = "{0}Function/RecommendUrl/{1}?id={2}"; url = String.Format(url, _settingsManager.GetClientAddress(domainContext.AppId), domainContext.Domain.Id, id); string shortUrl = String.Empty; RequestApiResult <WeixinCreateShortUrlResult> getShortUrlResult = ShortUrlApiWrapper.GetShortUrl(domainContext, url); if (getShortUrlResult.Success) { shortUrl = getShortUrlResult.ApiResult.ShortUrl; } parameterList.Add(new CommandParameter("@id", id)); parameterList.Add(new CommandParameter("@url", url)); parameterList.Add(new CommandParameter("@shortUrl", shortUrl)); _dataBase.ExecuteNonQuery(CommandType.StoredProcedure, "CreateRecommendUrl", parameterList); RecommendUrlEntity recommendUrl = new RecommendUrlEntity() { Id = id, Domain = domainContext.Domain.Id, AppId = domainContext.AppId, Member = memberId, Url = url, ShortUrl = shortUrl }; return(recommendUrl); }
private ButtonView GetWxcCampaignButton(JToken json, DomainContext domainContext) { string clientAddress = _clientAddress.Replace("$APPID$", domainContext.AppId); EnumCampaignType type = (EnumCampaignType)Enum.Parse(typeof(EnumCampaignType), json["campaignType"].ToString()); ButtonView button = new ButtonView(); button.Name = json["name"].ToString(); //http://wx8c36b3c0000a0a49.wxc.shengxunwei.com/Campaign/PictureVote/2a58d820-de07-4c8f-80b9-b5cb5a1028b4?id=16bc2e8e-8dbd-405a-85cc-34fb1879fd8a string campaignUri = null; switch (type) { case EnumCampaignType.PictureVote: campaignUri = "PictureVote"; break; case EnumCampaignType.MemberQRCode: campaignUri = "MemberQRCode"; break; case EnumCampaignType.Lottery: campaignUri = "Lottery"; break; case EnumCampaignType.LuckyTicket: campaignUri = "LuckyTicket"; break; case EnumCampaignType.ShakingLottery: campaignUri = "ShakingLottery"; break; default: Debug.Assert(false, "未知的活动类型"); _log.Write("发布菜单时遇到未知的活动类型", type.ToString(), TraceEventType.Error); break; } button.Url = String.Format(clientAddress + "Campaign/{0}/{1}?campaignId={2}", campaignUri, domainContext.Domain.Id, json["campaign"].ToString()); return(button); }
/// <summary> /// 用户管理-获取用户列表 /// 未认证订阅号 未认证服务号 没有此权限 /// </summary> /// <param name="domainContext"></param> /// <param name="next_openid"></param> /// <returns></returns> public static RequestApiResult <WeixinGetUserListResult> GetUserList(DomainContext domainContext, string next_openid) { RequestApiResult <WeixinGetUserListResult> result; if (domainContext.Authorizer.AuthorizationType == EnumAuthorizationType.UnauthorizedService || domainContext.Authorizer.AuthorizationType == EnumAuthorizationType.UnauthorizedSubscription) { result = new RequestApiResult <WeixinGetUserListResult>(); result.ApiError = new WeixinApiErrorResult(); result.ApiError.ErrorCode = -1; result.ApiError.ErrorMessage = "未认证订阅号 及 未认证服务号 没有获取用户列表权限。"; return(result); } string accessToken = domainContext.AccessToken; result = UserApi.GetUserList(accessToken, next_openid); if (result.Success == false) { if (result.Retry) { if (result.ApiError.ErrorCode == 40001) { accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken); } result = UserApi.GetUserList(accessToken, next_openid); if (result.Success == false) { string logMessage = result.GetDetail() + Environment.NewLine + new StackTrace().ToString(); _log.Write("UserApi.GetUserList 失败", logMessage, TraceEventType.Warning); } } else { string logMessage = result.GetDetail() + Environment.NewLine + new StackTrace().ToString(); _log.Write("UserApi.GetUserList 失败", logMessage, TraceEventType.Warning); } } return(result); }
public string RemoveNormalMaterial(DomainContext domainContext, Guid id, string mediaId) { RequestApiResult requestApiResult = MaterialApiWrapper.RemoveMaterial(domainContext, mediaId); if (requestApiResult.Success == false) { return(requestApiResult.Message); } List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@id", id)); parameterList.Add(new CommandParameter("@mediaId", mediaId)); _dataBase.ExecuteNonQuery("DELETE FROM [NormalMaterial] WHERE [Id] = @id AND [MediaId] = @mediaId", parameterList); return(null); }
/// <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()); }
public NormalResult CreatePointCommodity(DomainContext domainContext, PointCommodityEntity pointCommodity) { if (pointCommodity == null) { Debug.Assert(false, "pointCommodity 为空"); return(new NormalResult("参数错误")); } //if (domainContext.Domain.Type == EnumDomainType.Free) //{ // //最大数量不允许超过10个 // if (GetTotalCount(domainContext) >= 10) // { // return new NormalResult("免费帐户创建积分商品最多不可超过10个。"); // } //} pointCommodity.CreateTime = DateTime.Now; pointCommodity.Sort = _domainManager.GetSort(pointCommodity.Domain, "PointCommodity"); _dataBase.Insert(pointCommodity); return(new NormalResult()); }
public string UpdateMemberGroup(DomainContext domainContext, MemberGroupEntity group) { if (group == null) { return("参数错误。"); } //先往微信后台更新,成功后写数据库 WeixinGroup apiArgs = new WeixinGroup(); apiArgs.Group.Id = group.GroupId; apiArgs.Group.Name = group.Name; RequestApiResult updateResult = GroupApiWrapper.Update(domainContext, apiArgs); if (updateResult.Success == false) { return(updateResult.Message); } _dataBase.Update(group); return(null); }
public MemberEntity AddMember(DomainContext domainContext, AddMemberArgs args) { if (args == null) { Debug.Assert(false, "AddMember args == null"); return(null); } MemberEntity member = new MemberEntity(); member.Domain = domainContext.Domain.Id; member.AppId = domainContext.AppId; member.OpenId = args.WeixinUser.OpenId; member.NickName = args.WeixinUser.Nickname; member.Sex = args.WeixinUser.Sex; member.City = args.WeixinUser.City; member.Country = args.WeixinUser.Country; member.Province = args.WeixinUser.Province; member.Language = args.WeixinUser.Language; member.Headimgurl = args.WeixinUser.Headimgurl; member.SubscribeTime = args.WeixinUser.SubscribeTime; member.Remark = args.WeixinUser.Remark; member.GroupId = args.WeixinUser.GroupId; member.TagList = args.WeixinUser.GetTagListString(); member.ScenicQRCodeId = args.ScenicQRCodeId; member.RefereeMemberId = args.RefereeMemberId; member.Attention = true; member.Point = domainContext.InitialMemberPoint; member.CardNumber = GetMemberCardNumber(domainContext.Domain.Id, domainContext.AppId); member.SyncFlag = args.SyncFlag; //TODO:初始积分要写记录表 _dataBase.Insert(member); return(member); }
public NormalResult RemoveMemberTag(DomainContext domainContext, Guid id) { NormalResult result = new NormalResult(false); MemberTagEntity memberTag = GetMemberTag(id); if (memberTag == null) { result.Message = "分组不存在。"; return(result); } //先往微信后台更新,成功后写数据库 RequestApiResult removeResult = TagsApiWrapper.Remove(domainContext, memberTag.TagId); if (removeResult.Success == false) { result.Message = removeResult.Message; return(result); } //移除此标签下的用户的这个标签 List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@domain", domainContext.Domain.Id)); parameterList.Add(new CommandParameter("@appId", domainContext.AppId)); parameterList.Add(new CommandParameter("@tagId", memberTag.TagId.ToString() + ",")); _dataBase.ExecuteNonQuery( "UPDATE [Member] SET [TagList] = REPLACE([TagList],@tagId,'') WHERE [Domain] = @domain AND [AppId] = @appId AND CHARINDEX(@tagId,[TagList]) > 0", parameterList); _dataBase.Remove(memberTag); result.Success = true; return(result); }
public string RemoveArticleMaterial(DomainContext domainContext, Guid id, string mediaId) { //未发布的素材无 mediaId if (String.IsNullOrEmpty(mediaId) == false) { RequestApiResult requestApiResult = MaterialApiWrapper.RemoveMaterial(domainContext, mediaId); if (requestApiResult.Success == false) { return(requestApiResult.Message); } } List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@id", id)); _dataBase.ExecuteNonQuery("DELETE FROM [ArticleMaterial] WHERE [Id] = @id", parameterList); _dataBase.ExecuteNonQuery("DELETE FROM [ArticleMaterialItem] WHERE [ArticleMaterial] = @id", parameterList); return(null); }
/// <summary> /// 发布指定的图文素材到微信后台 /// </summary> /// <param name="domainContext"></param> /// <param name="args"></param> /// <returns></returns> public PublishArticleMaterialResult PublishArticleMaterial(DomainContext domainContext, Guid id) { PublishArticleMaterialResult result = new PublishArticleMaterialResult(); ArticleMaterialEntity args = GetArticleMaterial(id); if (args == null || args.ArticleList == null) { result.Message = "参数错误。"; return(result); } if (args.WeixinStatus == 0) { //向微信后台发送 string addToWeixin = AddArticleMaterialToWeixin(domainContext, args); if (String.IsNullOrEmpty(addToWeixin)) { result.Success = true; result.MediaId = args.MediaId; } else { result.Message = addToWeixin; } } else if (args.WeixinStatus == 1) { //TODO:取回URL } else if (args.WeixinStatus == 2) { result.Message = "该图文消息已经发布过了。"; } return(result); }
public string CreateMemberGroup(DomainContext domainContext, MemberGroupEntity group) { if (group == null) { return("参数错误。"); } //先往微信后台添加,成功后写数据库 WeixinCreateGroupArgs apiArgs = new WeixinCreateGroupArgs(); apiArgs.Group.Name = group.Name; RequestApiResult <WeixinGroup> createResult = GroupApiWrapper.Create(domainContext, apiArgs); if (createResult.Success == false) { return(createResult.Message); } group.Domain = domainContext.Domain.Id; group.GroupId = createResult.ApiResult.Group.Id; _dataBase.Insert(group); return(null); }
/// <summary> /// 授权完成 /// </summary> /// <param name="domainContext"></param> protected virtual void OnDocking(DomainContext domainContext) { _logService.Write("DomainPool.OnDocking", JsonHelper.Serializer(domainContext.Domain), TraceEventType.Verbose); }
/// <summary> /// 获取客户端URL地址 /// http://$APPID$.wxc.shengxunwei.com/ /// </summary> /// <param name="domainContext"></param> /// <returns></returns> public string GetClientAddress(DomainContext domainContext) { return(_clientAddress.Replace("$APPID$", domainContext.AppId)); }
/// <summary> /// 发布图文消息到微信后台 /// </summary> /// <param name="domainContext"></param> /// <param name="args"></param> /// <returns></returns> private string AddArticleMaterialToWeixin(DomainContext domainContext, ArticleMaterialEntity args) { //向微信后台发送 WeixinAddArticleMaterialArgs weixinArgs = new WeixinAddArticleMaterialArgs(); weixinArgs.ArticleList = new List <WeixinArticleMaterial>(); for (int i = 0; i < args.ArticleList.Count; i++) { ArticleMaterialItemEntity item = args.ArticleList[i]; item.Index = i; //替换其中的图片地址为上传到微信服务器的地址 if (item.ImgMappingList != null) { foreach (var imgMappingItem in item.ImgMappingList) { if (String.IsNullOrEmpty(imgMappingItem.FileUrl) || String.IsNullOrEmpty(imgMappingItem.WeixinUrl)) { continue; } item.Content = item.Content.Replace(imgMappingItem.FileUrl, imgMappingItem.WeixinUrl); } } weixinArgs.ArticleList.Add(item); } RequestApiResult <WeixinAddArticleMaterialResult> addArticleMaterialResult = MaterialApiWrapper.AddArticleMaterial(domainContext, weixinArgs); if (addArticleMaterialResult.Success) { //得到图文素材的MediaId string mediaId = addArticleMaterialResult.ApiResult.MediaId; args.MediaId = mediaId; //更新图文素材表中的MediaId字段 List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@id", args.Id)); parameterList.Add(new CommandParameter("@mediaId", mediaId)); _dataBase.ExecuteNonQuery("UPDATE [ArticleMaterial] SET [MediaId] = @mediaId,[WeixinStatus] = 1 WHERE [Id] = @id", parameterList); //因为微信API在添加图文后不返回URL,所以需要通过获取素材接口再次获取以便得到URL //GetArticleMaterial RequestApiResult <WeixinArticleMaterialListItemContent> getArticleMaterialResult = MaterialApiWrapper.GetArticleMaterial(domainContext, mediaId); if (getArticleMaterialResult.Success) { for (int i = 0; i < getArticleMaterialResult.ApiResult.ItemList.Count; i++) { WeixinArticleMaterial item = getArticleMaterialResult.ApiResult.ItemList[i]; parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@articleMaterial", args.Id)); parameterList.Add(new CommandParameter("@index", i)); parameterList.Add(new CommandParameter("@url", item.Url)); _dataBase.ExecuteNonQuery("UPDATE [ArticleMaterialItem] SET [Url] = @url WHERE [ArticleMaterial] = @articleMaterial AND [Index] = @index", parameterList); } _dataBase.ExecuteNonQuery("UPDATE [ArticleMaterial] SET [WeixinStatus] = 2 WHERE [Id] = @articleMaterial", parameterList); } else { return(getArticleMaterialResult.Message); } } else { return(addArticleMaterialResult.Message); } return(null); }
/// <summary> /// 对于已经提交微信后台的图文素材,只能按篇更新现有文章 /// </summary> /// <param name="domainContext"></param> /// <param name="args"></param> /// <returns></returns> public string UpdateArticleMaterialItem(DomainContext domainContext, ArticleMaterialEntity args) { //受限于微信接口,更新图文素材只能删除原素材重新添加 //因为重新添加会导致media_id发生变化,所以本地在使用时,要用自己的ID并维护不变 //但是!如果把微信素材库的素材删除,会导致已经发送给关注者的连接失效,打不开 //所以这里只删除本地的,微信后台的保持不删除 //但是这种方式还有一个问题,就是修改是假修改,已经发给用户的素材事实上不会变化 //而在微信后台修改图文内容是可以实现真修改的。 //目前只能把本地保存和发布微信后台分开,一旦发布了微信后台,就不再允许添加删除文章 if (args == null || args.ArticleList == null) { return("参数错误"); } for (int i = 0; i < args.ArticleList.Count; i++) { ArticleMaterialItemEntity article = args.ArticleList[i]; article.Index = i; if (article.ImgMappingList != null) { article.ImgMapping = JsonHelper.Serializer(article.ImgMappingList); } _dataBase.Update(article); } //发布微信后台 for (int i = 0; i < args.ArticleList.Count; i++) { ArticleMaterialItemEntity article = args.ArticleList[i]; //替换其中的图片地址为上传到微信服务器的地址 if (article.ImgMappingList != null) { foreach (var imgMappingItem in article.ImgMappingList) { if (String.IsNullOrEmpty(imgMappingItem.FileUrl) || String.IsNullOrEmpty(imgMappingItem.WeixinUrl)) { continue; } article.Content = article.Content.Replace(imgMappingItem.FileUrl, imgMappingItem.WeixinUrl); } } WeixinUpdateArticleMaterialArgs weixinArgs = new WeixinUpdateArticleMaterialArgs(); weixinArgs.MediaId = args.MediaId; weixinArgs.Index = i; weixinArgs.Article = article; RequestApiResult updateArticleMaterialResult = MaterialApiWrapper.UpdateArticleMaterial(domainContext, weixinArgs); if (updateArticleMaterialResult.Success == false) { return(updateArticleMaterialResult.Message); } } return(null); }
public string SendGroupMessage(DomainContext domainContext, SendGroupMessageArgs args) { if (args == null) { return("参数错误。"); } GroupMessageEntity groupMessage = new GroupMessageEntity(); groupMessage.AppId = domainContext.AppId; if (args.GroupId >= 0) { groupMessage.IsToAll = false; groupMessage.GroupId = args.GroupId; } else { groupMessage.IsToAll = true; } groupMessage.Type = args.Type; groupMessage.Content = args.Content; groupMessage.Url = args.Url; groupMessage.Name = args.Name; groupMessage.MediaId = args.MediaId; groupMessage.ArticleId = args.ArticleId; WeixinGroupMessageSendAllArgs apiArgs = null; switch (groupMessage.Type) { case EnumGroupMessageType.Text: WeixinGroupMessageSendAllArgs_Text textMsg = new WeixinGroupMessageSendAllArgs_Text(); textMsg.Content.Content = groupMessage.Content; apiArgs = textMsg; break; case EnumGroupMessageType.Image: WeixinGroupMessageSendAllArgs_Image imageMsg = new WeixinGroupMessageSendAllArgs_Image(); imageMsg.Image.MediaId = groupMessage.MediaId; apiArgs = imageMsg; break; case EnumGroupMessageType.Article: string mediaId = _materialManager.GetArticleMaterialMediaId(args.ArticleId.Value); if (String.IsNullOrEmpty(mediaId) == false) { WeixinGroupMessageSendAllArgs_Mpnews articleMsg = new WeixinGroupMessageSendAllArgs_Mpnews(); articleMsg.Mpnews.MediaId = mediaId; apiArgs = articleMsg; } break; default: break; } if (apiArgs == null) { return("参数错误。"); } //先往微信后台添加,成功后写数据库 apiArgs.Filter.IsToAll = groupMessage.IsToAll; if (groupMessage.GroupId.HasValue && groupMessage.GroupId >= 0) { apiArgs.Filter.GroupId = groupMessage.GroupId.ToString(); } // apiArgs.MsgType RequestApiResult <WeixinGroupMessageSendAllResult> sendAllResult = GroupMessageApiWrapper.SendAll(domainContext, apiArgs); if (sendAllResult.Success == false) { return(sendAllResult.Message); } groupMessage.MsgId = sendAllResult.ApiResult.MsgId; groupMessage.MsgDataId = sendAllResult.ApiResult.MsgDataId; groupMessage.Domain = domainContext.Domain.Id; _dataBase.Insert(groupMessage); return(null); }
public static RequestApiResult <WeixinGetNormalMaterialListResult> GetNormalMaterialList(DomainContext domainContext, WeixinGetMaterialListArgs args) { string accessToken = domainContext.AccessToken; RequestApiResult <WeixinGetNormalMaterialListResult> result = MaterialApi.GetNormalMaterialList(accessToken, args); if (result.Success == false) { if (result.Retry) { if (result.ApiError.ErrorCode == 40001) { accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken); } result = MaterialApi.GetNormalMaterialList(accessToken, args); if (result.Success == false) { _log.Write("MaterialApi.GetNormalMaterialList 失败", result.GetDetail(), TraceEventType.Warning); } } else { _log.Write("MaterialApi.GetNormalMaterialList 失败", result.GetDetail(), TraceEventType.Warning); } } return(result); }
private ButtonView GetWxcFunctionButton(JToken json, DomainContext domainContext) { string clientAddress = _clientAddress.Replace("$APPID$", domainContext.AppId); ButtonView button = new ButtonView(); button.Name = json["name"].ToString(); string uri = null; switch (json["function"].ToString()) { case "portal": uri = "Home/Portal"; break; case "memberCenter": uri = "Home/MemberCenter"; break; case "pointCommodity": uri = "PointCommodity/PointCommodity"; break; case "pointCommodityOrderList": uri = "PointCommodity/OrderList"; break; case "pointAccount": uri = "Home/PointAccount"; break; case "cashAccount": uri = "Pay/CashAccountTrack"; break; case "oneDollarBuying": uri = "Campaign/OneDollarBuying"; break; case "personalInfo": uri = "Home/PersonalInfo"; break; case "movieTimes": uri = "Home/MovieTimes"; break; case "staff": uri = "Staff/Home/Portal"; break; default: Debug.Assert(false, "GetWxcFunctionButton:" + json["name"].ToString()); _log.Write("发布菜单时遇到未知的功能类型", json["function"].ToString(), TraceEventType.Error); break; } button.Url = clientAddress + uri + "/" + domainContext.Domain.Id; return(button); }
/// <summary> /// 解除授权 /// </summary> /// <param name="domainContext"></param> protected virtual void UnDocking(DomainContext domainContext) { }
/// <summary> /// 摇奖 /// </summary> /// <param name="campaignId"></param> /// <param name="memberId"></param> /// <param name="domain"></param> /// <returns></returns> public NormalResult <Campaign_ShakingLotteryGiftEntity> Shake(Guid campaignId, Guid?periodId, Guid memberId, DomainContext domain) { NormalResult <Campaign_ShakingLotteryGiftEntity> result = new NormalResult <Campaign_ShakingLotteryGiftEntity>(); CampaignEntity campaign = _campaignManager.GetCampaign(campaignId); if (campaign == null) { result.Message = "指定的活动不存在。"; result.Success = false; return(result); } //状态是否进行中 switch (campaign.Status) { case EnumCampaignStatus.Preparatory: result.Message = "活动尚未开始。"; result.Success = false; return(result); case EnumCampaignStatus.End: result.Message = "活动已结束。"; result.Success = false; return(result); } Campaign_ShakingLotteryEntity shakingLottery = Get(campaignId); if (shakingLottery == null) { result.Message = "指定的活动不存在。"; result.Success = false; return(result); } if (shakingLottery.Mode == EnumCampaign_ShakingLotteryMode.Period) { if (shakingLottery.Period.HasValue == false) { result.Message = "摇奖尚未开始~~"; result.Success = false; return(result); } //直接参与最新一期 periodId = shakingLottery.Period; } else { if (shakingLottery.Started == false) { result.Message = "摇奖尚未开始~~"; result.Success = false; return(result); } } //判断是否摇过了 int playedTimes = GetMemberPlayedTimes(campaignId, periodId, memberId); if (playedTimes >= shakingLottery.ChanceTimes) { if (shakingLottery.Mode == EnumCampaign_ShakingLotteryMode.Period) { result.Message = "您已经用本轮完全部参与机会~"; } else { result.Message = "您已经用完全部参与机会~"; } result.Success = false; return(result); } ////// Campaign_ShakingLotteryLogEntity log = new Campaign_ShakingLotteryLogEntity(); log.CampaignId = campaignId; log.Period = periodId; log.Domain = domain.Domain.Id; log.AppId = domain.AppId; log.Member = memberId; log.Time = DateTime.Now; //判断是否已经中奖了 if (GetMemberObtainedGiftList(campaignId, memberId).Count > 0) { //同一个摇奖活动,只允许中一个奖,但是还有次数或新的周期开始时 //还是允许他继续摇,假装还能参与 //result.Message = "您已中奖~"; //扣掉摇奖机会 log.Win = false; _campaignManager.DataBase.Insert(log); result.Message = "遗憾您没有摇中,请再接再厉~"; result.Success = false; return(result); } Campaign_ShakingLotteryGiftPool pool = GetGiftPool(campaignId, periodId); if (pool == null) { _campaignManager.Log.Write("没有取到 GiftPool", String.Format("campaignId:{0},periodId:{1}", campaignId, periodId), TraceEventType.Error); result.Message = "遗憾您没有摇中,请再接再厉~~"; result.Success = false; return(result); } Campaign_ShakingLotteryGiftEntity gift = pool.GetGift(); if (gift == null) { result.Message = "遗憾您没有摇中,请再接再厉!~"; result.Success = false; return(result); } log.Gift = gift.Id; if (gift.IsGift == false || gift.Stock <= 0) { log.Win = false; } else { //尝试扣减库存 List <CommandParameter> parameterList = new List <CommandParameter>(); parameterList.Add(new CommandParameter("@giftId", gift.Id)); DataSet dsResult = _campaignManager.DataBase.ExecuteDataSet(CommandType.StoredProcedure, "DecrementShakingLotteryGiftStock", parameterList, new string[] { "result" }); result.Reason = int.Parse(dsResult.Tables[0].Rows[0]["Result"].ToString()); if (result.Reason == 0) { log.Win = true; } else { log.Win = false; } if (result.Reason != 2) { gift.Stock = int.Parse(dsResult.Tables[0].Rows[0]["Stock"].ToString()); } } _campaignManager.DataBase.Insert(log); if (log.Win) { result.Data = gift; result.Success = true; return(result); } else { result.Message = "遗憾您没有摇中,请再接再厉~"; result.Success = false; return(result); } }
public static RequestApiResult <WeixinArticleMaterialListItemContent> GetArticleMaterial(DomainContext domainContext, string mediaId) { string accessToken = domainContext.AccessToken; RequestApiResult <WeixinArticleMaterialListItemContent> result = MaterialApi.GetArticleMaterial(accessToken, mediaId); if (result.Success == false) { if (result.Retry) { if (result.ApiError.ErrorCode == 40001) { accessToken = AccessTokenGetter.Refresh(domainContext.AppId, accessToken); } result = MaterialApi.GetArticleMaterial(accessToken, mediaId); if (result.Success == false) { _log.Write("MaterialApi.GetArticleMaterial 失败", result.GetDetail(), TraceEventType.Warning); } } else { _log.Write("MaterialApi.GetArticleMaterial 失败", result.GetDetail(), TraceEventType.Warning); } } return(result); }
/// <summary> /// 刷新了缓存中的Domain /// </summary> /// <param name="domainContext"></param> protected virtual void OnRefresh(DomainContext domainContext) { domainContext.Refresh(); }
public ApiResult SaveAndPublishMenu(string json, UserContext userContext, DomainContext domainContext) { MenuEntity menuEntity = new MenuEntity(); menuEntity.DomainId = userContext.User.Domain; menuEntity.Menu = json; _dataBase.Remove(menuEntity); _dataBase.Insert(menuEntity); ApiResult result = new ApiResult(); //未认证订阅号没有自定义菜单权限 if (domainContext.Authorizer == null || domainContext.Authorizer.AuthorizationType == EnumAuthorizationType.UnauthorizedSubscription) { result.Success = false; result.Message = "未认证订阅号没有自定义菜单权限。"; return(result); } List <ButtonBase> _buttonList = new List <ButtonBase>(); JObject jObject = JObject.Parse(json); #region 解析 JArray buttonArray = (JArray)jObject["button"]; foreach (var button in buttonArray) { if (button["sub_button"] == null || button["sub_button"].Count() == 0) { ButtonBase newButton = null; switch (button["type"].ToString()) { case "wxc_function": newButton = GetWxcFunctionButton(button, domainContext); break; case "click": newButton = GetClickButton(button, domainContext); break; case "view": newButton = JsonHelper.Deserialize <ButtonView>(button.ToString()); break; case "wxc_campaign": newButton = GetWxcCampaignButton(button, domainContext); break; case "wxc_information": newButton = GetWxcInformationButton(button, domainContext); break; case "wxc_customForm": newButton = GetWxcCustomFormButton(button, domainContext); break; case "mediaId": newButton = GetMediaIdButton(button); break; } _buttonList.Add(newButton); } else { ParentButton parentButton = JsonHelper.Deserialize <ParentButton>(button.ToString()); parentButton.SubButton = new List <ButtonBase>(); JArray subButtonArray = (JArray)button["sub_button"]; foreach (var subButton in subButtonArray) { ButtonBase newSubButton = null; switch (subButton["type"].ToString()) { case "wxc_function": newSubButton = GetWxcFunctionButton(subButton, domainContext); break; case "click": newSubButton = GetClickButton(subButton, domainContext); break; case "view": newSubButton = JsonHelper.Deserialize <ButtonView>(subButton.ToString()); break; case "wxc_campaign": newSubButton = GetWxcCampaignButton(subButton, domainContext); break; case "wxc_information": newSubButton = GetWxcInformationButton(subButton, domainContext); break; case "wxc_customForm": newSubButton = GetWxcCustomFormButton(subButton, domainContext); break; case "mediaId": newSubButton = GetMediaIdButton(subButton); break; } parentButton.SubButton.Add(newSubButton); } _buttonList.Add(parentButton); } } #endregion ButtonWrapper menu = new ButtonWrapper(); menu.Button = _buttonList; RequestApiResult apiResult = MenuApi.Create(menu, domainContext.AccessToken); result.Success = apiResult.Success; result.Message = apiResult.Message; return(result); }