用c#开发微信 (15) 微活动 1 大转盘
微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式。这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公众账号关注。对于企业来说,做微信推广重要的一个方面就是提高用户和公众账号之间的黏度,而微信大转盘就是其中最为常见的活动。
下面详细介绍:
一、使用
1. 新建一个大转盘的活动:
2. 奖项设置
3. 保存后,在微信里给公众号发一个“大转盘”的消息, 就会收到大转盘的内容
4. 点击进入大转盘活动,然后点击中间的 “点击抽奖”:
二、实现
1. 页面
1.1 前台代码
<% if (ErrLevel < 100){Response.Write(ErrorInfo);}else if (ErrLevel == 101){ //活动已结束,跳转到结束页面
%>
<script type="text/javascript">window.location.href = "end.aspx?wid="+<%=wid%>+"&aid="+<%=aid%>+"&openid="+<%=openid%>+";";
</script>
<%}else{ %>
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no;"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="format-detection" content="telephone=no"><meta name="description" content="微信"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="Expires" content="0"><title>幸运大转盘抽奖</title><script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js" type="text/javascript"></script><script type="text/javascript" src="../../scripts/jquery/jquery.query.js"></script><script src="../../scripts/jquery/alert.js" type="text/javascript"></script><link href="css/activity-style2.css" rel="stylesheet" type="text/css"><style>.activity-lottery-winning {background: url(images/beijing.gif) repeat scroll 0 0 #7E65AB;background-size: 120px auto;overflow: hidden;}</style>
</head>
<body class="activity-lottery-winning"><form id="form1" runat="server"><div class="main"><asp:HiddenField ID="hidStatus" runat="server" Value="" EnableViewState="false" /><asp:HiddenField ID="hidErrInfo" runat="server" EnableViewState="false" /><asp:HiddenField ID="hidAwardId" runat="server" EnableViewState="false" Value="0" /><div id="outercont"><div id="outer-cont"><div id="outer"><img src="data:images/zp<%=picIndex %>-.png"></div></div><div id="inner-cont"><div id="inner"><img src="data:images/activity-lottery-2.png"></div></div></div><div class="content"><div class="boxcontent boxwhite" id="zjl" style="display: none"><div class="box"><div class="title-orange"><span>恭喜你中奖了</span></div><div class="Detail"><p>你中了:<span class="red" id="prizetype"><asp:Literal ID="litzjlJP" runat="server" EnableViewState="false" Text=""></asp:Literal></span></p><p>兑奖SN码:<span class="red" id="sncode"><asp:Literal ID="litzjlSN" runat="server" EnableViewState="false" Text=""></asp:Literal></span></p><p class="red"><asp:Literal ID="litContentInfo" runat="server" EnableViewState="false"></asp:Literal></p><p><input name="" class="px" id="tel" value="" type="text" placeholder="用户请输入您的手机号"></p><asp:Literal ID="litPwd" runat="server" EnableViewState="false" Text=""></asp:Literal><p><input class="pxbtn" name="提 交" id="save-btn" type="button" value="用户提交"></p></div></div></div><div class="boxcontent boxwhite" id="result" style="display: none;"><div class="box"><div class="title-orange"><span>恭喜你中奖了</span></div><div class="Detail"><p>你中了:<span class="red" id="jiangping"><asp:Literal ID="litJp" runat="server" EnableViewState="false" Text=""></asp:Literal></span></p><p>兑奖sn码为:<span class="red" id="jpsn"><asp:Literal ID="litSNM" runat="server" EnableViewState="false"></asp:Literal></span></p><p class="red">你已经兑奖成功,本SN码自定作废!</p></div></div></div><div class="boxcontent boxwhite"><div class="box"><div class="title-red"><span>奖项设置:</span></div><div class="Detail"><asp:Literal ID="litOtherTip" runat="server" EnableViewState="false"></asp:Literal><asp:Literal ID="litJiangXing" runat="server" EnableViewState="false"></asp:Literal></div></div></div><div class="boxcontent boxwhite"><div class="box"><div class="title-red">活动说明:</div><div class="Detail"><p class="red">本次活动每天可以转<asp:Literal ID="litdaysTimes" runat="server" EnableViewState="false"></asp:Literal>次,总共可以转 <asp:Literal ID="littotTimes" runat="server" EnableViewState="false"></asp:Literal>次 你已经转了 <span id="zhuantimes"><asp:Literal ID="litHasUsedTimes" runat="server" EnableViewState="false"></asp:Literal></span> 次</p><p><asp:Literal ID="litRemark" runat="server" EnableViewState="false"></asp:Literal></p></div></div></div></div></div><script type="text/javascript">var thisurl= document.URL;var wid = <%=wid%>;var aid =<%=aid%>;var status = $("#hidStatus").val();var showInfo = $("#hidErrInfo").val();var openid ="<%=openid%>";var jxname="";var jpname="";var cjtip="";var zhuantimes=parseInt( $("#zhuantimes").text());var zjl = false;//没中奖为false中奖为true <% if (isZhJing){ %>$("#outercont").hide();$("#result").show();<%} %>if (status == "2") {$("#outercont").hide();}else if(status=="100"){$("#outercont").hide();$("#result").hide();$("#zjl").show();}$(function () {window.requestAnimFrame = (function () {return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||function (callback) {window.setTimeout(callback, 1000 / 60)}})();var totalDeg = 360 * 3 + 0;var steps = [];var lostDeg = [360];var prizeDeg = <%=shuzu%>;var prize, sncode;var count = 0;var now = 0;var a = 0.01;var outter, inner, timer, running = false;function countSteps() {var t = Math.sqrt(2 * totalDeg / a);var v = a * t;for (var i = 0; i < t; i++) {steps.push((2 * v * i - a * i * i) / 2)}steps.push(totalDeg)}function step() {// alert('rotate(' + steps[now++] + 'deg)');outter.style.webkitTransform = 'rotate(' + steps[now++] + 'deg)';outter.style.MozTransform = 'rotate(' + steps[now++] + 'deg)';if (now < steps.length) {running = true;requestAnimFrame(step)} else {running = false;setTimeout(function () {$("#zhuantimes").text(++zhuantimes);if (zjl) {$("#sncode").text(sncode);$("#jpsn").text(sncode);$("#jiangping").text(jxname+" "+jpname);$("#prizetype").text(jxname+" "+jpname);$("#zjl").slideToggle(500);$("#outercont").slideUp(500)} else{alert(cjtip);}},200)}}function start(deg) {deg = deg || lostDeg[parseInt(lostDeg.length * Math.random())];running = true;clearInterval(timer);totalDeg = 360 * 5 + deg;steps = [];now = 0;countSteps();requestAnimFrame(step)}window.start = start;outter = document.getElementById('outer');inner = document.getElementById('inner');i = 10;$("#inner").click(function () {if (status == "2") {alert(showInfo);}if (running) return;$.ajax({url: "dzpAct.ashx",dataType: "json",data: {openid: openid,myact: "choujiang",aid: aid,wid:wid,rad: Math.random()},beforeSend: function () {running = true;timer = setInterval(function () {i += 5;outter.style.webkitTransform = 'rotate(' + i + 'deg)';outter.style.MozTransform = 'rotate(' + i + 'deg)'},1)},success: function (data) {if (data.error == "sys" ||data.error == "nostart" ) {cjtip=data.content;count = 100;clearInterval(timer);return}else if(data.error=="notimes"){cjtip=data.content;start();}else if (data.error=="succ") {zjl=true;cjtip=data.content;prize = data.sortid;sncode = data.sn;jpname=data.jpname;jxname=data.jxname;$("#hidAwardId").val(data.uid);start(prizeDeg[data.sortid - 1])}else {cjtip=data.content;start()}running = false;count++},error: function () {prize = null;start();running = false;count++},timeout: 1000})})});$("#save-btn").bind("click",function () {var btn = $(this);var tel = $("#tel").val();var pwd = "";var hidAwardId = $("#hidAwardId").val();if ($("#parssword").length>0 && $.trim($("#parssword").val()) == "") {alert("请输入兑奖密码!");return}if ($.trim(tel) == "") {alert("请输入手机号!");return}if($("#parssword").length>0){pwd= $("#parssword").val();}var rad = Math.random();var submitData = {id: hidAwardId,aid: aid,pwd: pwd,snumber:$("#sncode").text(),tel: tel,rad: rad,openid:openid};$.post('dzpAct.ashx?myact=update', submitData,function (data) {if (data.success == "1") {alert("提交成功!");$("#result").slideToggle(500);$("#zjl").slideToggle(500);$("#outercont").slideUp(500);} else {alert(data.msg);}},"json") });</script><script type="text/javascript">document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {window.shareData = {"imgUrl": "","timeLineLink": thisurl + "&is_share=1","sendFriendLink": thisurl + "&is_share=1","weiboLink": thisurl + "&is_share=1","tTitle": "<%=dzpAction.actName%>","tContent": "请关注后,再来抽奖。<%=dzpAction.brief%>","fTitle": "请关注后,再来抽奖。<%=dzpAction.actName%>","fContent": "请关注后,再来抽奖。<%=dzpAction.brief%>","wContent": "请关注后,再来抽奖。<%=dzpAction.brief%>"};// 发送给好友WeixinJSBridge.on('menu:share:appmessage', function (argv) {WeixinJSBridge.invoke('sendAppMessage', {"img_url": window.shareData.imgUrl,"img_width": "640","img_height": "640","link": window.shareData.sendFriendLink,"desc": window.shareData.fContent,"title": window.shareData.fTitle}, function (res) {_report('send_msg', res.err_msg);})});// 分享到朋友圈WeixinJSBridge.on('menu:share:timeline', function (argv) {WeixinJSBridge.invoke('shareTimeline', {"img_url": window.shareData.imgUrl,"img_width": "640","img_height": "640","link": window.shareData.timeLineLink,"desc": window.shareData.tContent,"title": window.shareData.tTitle}, function (res) {_report('timeline', res.err_msg);});});// 分享到微博WeixinJSBridge.on('menu:share:weibo', function (argv) {WeixinJSBridge.invoke('shareWeibo', {"content": window.shareData.wContent,"url": window.shareData.weiboLink,}, function (res) {_report('weibo', res.err_msg);});});}, false)</script></form><div style="display: none">©微布斯科技提供 qq 121285904 www.webus.cn</div></body>
</html>
<% }%>
2.1 后台代码
/// <summary>
/// ErrLevel:100表示正确无误,1表示严重错误,2表示业务方面有问题;3直接跳转到结束页面
/// </summary>
public int ErrLevel = 100;
public string ErrorInfo = "";
public Model.wx_dzpActionInfo dzpAction;
public int picIndex = 0;
public int aid = 0;
public int wid = 0;
public bool isZhJing = false;
public string openid = "";
public string shuzu = "";
BLL.wx_dzpAwardUser ubll = new BLL.wx_dzpAwardUser();
BLL.wx_dzpUsersTemp utbll = new BLL.wx_dzpUsersTemp();
BLL.wx_dzpActionInfo actBll = new BLL.wx_dzpActionInfo();
BLL.wx_dzpAwardItem itemBll = new BLL.wx_dzpAwardItem();
protected void Page_Load(object sender, EventArgs e)
{
OnlyWeiXinLook();
aid = MyCommFun.RequestInt("aid", 0);
wid = MyCommFun.RequestInt("wid", 0);
openid = MyCommFun.RequestOpenid();
if (aid == 0 || wid == 0 || openid.Trim() == "")
{
ErrLevel = 1;
ErrorInfo = "访问参数错误!";
return;
}
BindData();
}
private void BindData()
{
dzpAction = actBll.GetModel(aid);
IList<Model.wx_dzpAwardItem> itemlist = itemBll.GetModelList("actId=" + aid);
if (dzpAction == null || itemlist == null || itemlist.Count <= 0)
{
ErrLevel = 1;
ErrorInfo = "未获得到数据";
return;
}
this.Title = dzpAction.actName;
if (dzpAction.endDate <= DateTime.Now)
{ //说明活动已经结束
ErrLevel = 101;
ErrorInfo = "活动已结束";
return;
}
StringBuilder sb = new StringBuilder("");
Model.wx_dzpAwardItem item = new Model.wx_dzpAwardItem();
int ttJpNum = 0;
shuzu = "[";
for (int i = 0; i < itemlist.Count; i++)
{
item = itemlist[i];
sb.Append("<p>" + item.jxName + ":" + item.jpName + " 数量:" + item.jpNum + "</p>");
ttJpNum += item.jpRealNum.Value;
picIndex++;
if (i < (itemlist.Count - 1))
{
shuzu += item.jiaodu_min + ",";
}
else
{
shuzu += item.jiaodu_min;
}
}
shuzu += "]";
litJiangXing.Text = sb.ToString();
litRemark.Text = dzpAction.brief;
litContentInfo.Text = dzpAction.contractInfo;
littotTimes.Text = dzpAction.personMaxTimes == null ? "0" : dzpAction.personMaxTimes.Value.ToString();
litdaysTimes.Text = dzpAction.dayMaxTimes == null ? "0" : dzpAction.dayMaxTimes.Value.ToString();
if (dzpAction.djPwd.Trim().Length > 0)
{
litPwd.Text = " <p> <input name=\"\" class=\"px\" id=\"parssword\" type=\"password\" value=\"\" placeholder=\"商家输入兑奖密码\"></p>";
}
if (dzpAction.beginDate > DateTime.Now)
{
hidStatus.Value = "-2";
ErrorInfo = hidErrInfo.Value = "活动尚未开始";
}
int hasCjTimes = utbll.getCJCiShu(aid, openid);//返回该用户的抽奖次数
this.litHasUsedTimes.Text = hasCjTimes.ToString();
int dayMaxTimes = dzpAction.dayMaxTimes == null ? 0 : dzpAction.dayMaxTimes.Value;
int perMaxTimes = dzpAction.personMaxTimes == null ? 0 : dzpAction.personMaxTimes.Value;
//判断是否中奖了
Model.wx_dzpAwardUser award = ubll.getZJinfoByOpenid(aid, openid);
if (award != null && award.id>0)
{ //您中奖了
if (award.uTel != null && award.uTel.ToString().Trim() != "")
{//已经中奖,并且提交了
litJp.Text = "[" + award.jxName + "] " + award.jpName;
litSNM.Text = award.sn;
isZhJing = true;
}
else
{ //已经中奖,但是未提交
hidStatus.Value = "100";
litzjlJP.Text = "[" + award.jxName + "] " + award.jpName;
litzjlSN.Text = award.sn;
hidAwardId.Value = award.id.ToString();
litJp.Text = "[" + award.jxName + "] " + award.jpName;
litSNM.Text = award.sn;
}
}
else
{
//判断每人最大抽奖次数,是否超过了
if (hasCjTimes >= dzpAction.personMaxTimes)
{
hidStatus.Value = "2";
//litOtherTip.Text = "<p class='red'>您已经抽了" + hasCjTimes + "次了。</p>";
}
if (isTodayOverSum(dayMaxTimes))
{
hidStatus.Value = "2";
// litOtherTip.Text = "<p class='red'>每人每天只有" + dayMaxTimes.ToString() + "次抽奖机会,您已经使用完了。</p>";
}
}
}
#region 方法
/// <summary>
/// 判断今天是否已经超出抽奖次数
/// todayTTTimes:能抽奖的总次数
/// </summary>
/// <param name="openid"></param>
/// <param name="todayTTTimes">每天的抽奖总次数</param>
/// <returns></returns>
private bool isTodayOverSum( int todayTTTimes)
{
if (todayTTTimes <= 0)
{
return true;
}
DateTime todaybegin = DateTime.Parse(DateTime.Now.ToShortDateString());
DateTime mingtianBegin = todaybegin.AddDays(1);
if (!utbll.ExistsOpenid(" actId=" + aid + " and openid='" + openid + "' and createDate>='" + todaybegin + "' and createDate<'" + mingtianBegin + "'"))
{
return false;
}
Model.wx_dzpUsersTemp model = utbll.getModelByAidOpenid(aid, openid);
if (model.times >= todayTTTimes)
{
return true;
}
else
{
return false;
}
}
#endregion
2. 实现逻辑
public class dzpAct : IHttpHandler
{
BLL.wx_dzpActionInfo actbll = new BLL.wx_dzpActionInfo();
BLL.wx_dzpAwardUser ubll = new BLL.wx_dzpAwardUser();
BLL.wx_dzpUsersTemp utbll = new BLL.wx_dzpUsersTemp();
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/json";
string _action = MyCommFun.QueryString("myact");
int aid = MyCommFun.RequestInt("aid");
string openid = MyCommFun.RequestOpenid(); //得到微信用户的openid
if (_action == "choujiang")
{
Dictionary<string, string> jsonDict = new Dictionary<string, string>();
try
{
//抽奖
Model.wx_dzpActionInfo dzpAction = new Model.wx_dzpActionInfo();
BLL.wx_dzpAwardItem itemBll = new BLL.wx_dzpAwardItem();
#region 判断
int wid = MyCommFun.RequestInt("wid");
if (aid == 0 || wid == 0 || openid.Trim() == "")
{
jsonDict.Add("error", "sys");
jsonDict.Add("content", "参数错误!");
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
dzpAction = actbll.GetModel(aid);
if (dzpAction == null)
{
jsonDict.Add("error", "sys");
jsonDict.Add("content", "参数错误!");
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
if (dzpAction.endDate <= DateTime.Now)
{ //说明活动已经结束
//非活动期间
jsonDict.Add("error", "end");
jsonDict.Add("content", "活动已结束");
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
else if (dzpAction.beginDate > DateTime.Now)
{
//活动未开始
//非活动期间
jsonDict.Add("error", "nostart");
jsonDict.Add("content", "活动未开始");
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
int dayMaxTimes = dzpAction.dayMaxTimes == null ? 0 : dzpAction.dayMaxTimes.Value;
int perMaxTimes = dzpAction.personMaxTimes == null ? 0 : dzpAction.personMaxTimes.Value;
//判断每人最大抽奖次数,是否超过了
if (personCJTimes(openid, aid) >= dzpAction.personMaxTimes)
{
jsonDict.Add("error", "notimes");
jsonDict.Add("content", "您已抽过奖了,欢迎下次再来!");
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
if (isTodayOverSum(aid, openid, dayMaxTimes))
{
jsonDict.Add("error", "notimes");
jsonDict.Add("content", "每人每天只有" + dayMaxTimes.ToString() + "次抽奖机会。");
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
Model.wx_dzpAwardUser award = ubll.getZJinfoByOpenid(aid, openid);
if (award != null)
{
//您中奖了
jsonDict.Add("error", "notimes");
jsonDict.Add("content", "您中奖了,欢迎下次再来!");
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
#endregion
#region 计算中奖信息
/// 处理是否中奖
/// hidStatus 状态为-1:不能抽奖,直接跳转到end.aspx页面;
/// 0:抽奖次数超过设置的最高次数;
/// 1:还可以继续抽奖;
/// 2:中奖了;
List<Model.wx_dzpAwardItem> itemlist = itemBll.GetModelList("actId=" + aid);//该活动的所有奖项信息
int ttJpNum = 0;
for (int i = 0; i < itemlist.Count; i++)
{
ttJpNum += itemlist[i].jpRealNum.Value;
}
IList<Model.wx_dzpAwardUser> auserlist = ubll.getHasZJList(aid);//已经中奖的人列表
int ZhongJiangNum = 0;
if (auserlist != null)
{
ZhongJiangNum = auserlist.Count; //已经中奖的人数
}
int syZjNum = ttJpNum - ZhongJiangNum; //剩余的奖品数量
if (syZjNum <= 0)
{ //说明已经没有奖品了
jsonDict.Add("error", "-1");
jsonDict.Add("content", dzpAction.cfcjhf);
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
dzpAction.personNum = MyCommFun.Obj2Int(dzpAction.personNum, 1);
dzpAction.personMaxTimes = MyCommFun.Obj2Int(dzpAction.personMaxTimes, 1);
int fenmo = dzpAction.personNum.Value * dzpAction.personMaxTimes.Value;
Random rd = new Random((int)DateTime.Now.Ticks);
int radNum = rd.Next(0, fenmo);//从0到fenmo里随机出一个值
if (radNum < syZjNum)
{
//中奖了,再从剩余奖品里抽取一个奖品
Model.wx_dzpAwardItem dajiang = getZJItem(itemlist, auserlist);
if (dajiang != null)
{
//这是中的中奖了
string snumber = Get_snumber(aid);
int uId = ubll.Add(aid, "", "", openid, dajiang.jxName, dajiang.jpName, snumber);
jsonDict.Add("error", "succ");
jsonDict.Add("content", "恭喜你中奖了!");
jsonDict.Add("sortid", dajiang.sort_id.Value.ToString());
jsonDict.Add("jxname", dajiang.jxName);
jsonDict.Add("jpname", dajiang.jpName);
jsonDict.Add("uid", uId.ToString());
jsonDict.Add("sn", snumber);
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
else
{
//奖品已经全部中完了
jsonDict.Add("error", "-1");
jsonDict.Add("content", dzpAction.cfcjhf);
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
}
else
{
//这个条件说明:未中奖
//抛出未中奖的数据
jsonDict.Add("error", "-1");
jsonDict.Add("content", dzpAction.cfcjhf);
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
#endregion
}
catch (Exception ex)
{
jsonDict.Add("error", "sys");
jsonDict.Add("content", "计算抽奖出现未知错误,请联系管理员!");
context.Response.Write(MyCommFun.getJsonStr(jsonDict));
return;
}
}
else if (_action == "update")
{
try
{
#region 提交手机
/// 提交手机号码
string tel = MyCommFun.QueryString("tel");
string pwd = MyCommFun.QueryString("pwd");
string snumber = MyCommFun.QueryString("snumber");
int id = MyCommFun.RequestInt("id");
if (aid == 0 || id == 0 || snumber == "" || tel == "")
{
context.Response.Write("{\"msg\":\"提交出现异常!!\",\"success\":\"0\"}");
return;
}
if ((pwd.Length>0) &&( !actbll.ExistsPwd(aid, pwd)))
{
context.Response.Write("{\"msg\":\"商家兑换密码错误!!\",\"success\":\"0\"}");
return;
}
BLL.wx_dzpAwardUser ubll = new BLL.wx_dzpAwardUser();
Model.wx_dzpAwardUser model = ubll.GetModel(id);
if (model == null)
{
context.Response.Write("{\"msg\":\"提交出现异常2!!\",\"success\":\"0\"}");
return;
}
model.uTel = tel;
if (pwd.Length > 0)
{
model.hasLingQu = true;
}
else
{
model.hasLingQu = false;
}
ubll.Update(model);
context.Response.Write("{\"msg\":\"提交成功!\",\"success\":\"1\"}");
return;
#endregion
}
catch
{
context.Response.Write("{\"msg\":\"提交出现异常!!\",\"success\":\"0\"}");
return;
}
}
}
#region 方法
/// <summary>
/// 取中奖的项目
/// </summary>
/// <param name="itemlist">所有的奖品信息</param>
/// <param name="haszjlist">已经中奖的列表</param>
/// <returns></returns>
private Model.wx_dzpAwardItem getZJItem(IList<Model.wx_dzpAwardItem> itemlist, IList<Model.wx_dzpAwardUser> haszjlist)
{
IList<Model.wx_dzpAwardItem> zjItemlist = new List<Model.wx_dzpAwardItem>();//剩余奖品列表
Model.wx_dzpAwardItem tmpItem = new Model.wx_dzpAwardItem();
Model.wx_dzpAwardItem stmpItem = new Model.wx_dzpAwardItem();
IList<Model.wx_dzpAwardUser> thiszjRs;
for (int i = 0; i < itemlist.Count; i++)
{
tmpItem = itemlist[i];
thiszjRs = (from user in haszjlist where user.jpName == tmpItem.jpName && user.jxName == tmpItem.jxName select user).ToArray<Model.wx_dzpAwardUser>();
int tmpSYNum = 0;
if (thiszjRs != null)
{
tmpSYNum = MyCommFun.Obj2Int(tmpItem.jpRealNum) - thiszjRs.Count;
}
if (tmpSYNum <= 0)
{
continue;
}
for (int j = 0; j < tmpSYNum; j++)
{
stmpItem = new Model.wx_dzpAwardItem();
stmpItem.jpName = tmpItem.jpName;
stmpItem.jxName = tmpItem.jxName;
stmpItem.sort_id = tmpItem.sort_id;
zjItemlist.Add(stmpItem);
}
}
Random rd = new Random((int)DateTime.Now.Ticks);
int jpIndex = rd.Next(0, zjItemlist.Count);//从0到zjItemlist.Count里随机出一个值
return zjItemlist[jpIndex];
}
/// <summary>
/// 判断该用户的抽奖次数
/// </summary>
/// <param name="openid"></param>
/// <returns></returns>
private int personCJTimes(string openid, int aid)
{
int times = 0;
times = utbll.GetRecordCount("actId=" + aid + " and openid='" + openid + "'");
return times;
}
/// <summary>
/// 判断今天是否已经超出抽奖次数
/// todayTTTimes:能抽奖的总次数
/// </summary>
/// <param name="openid"></param>
/// <param name="todayTTTimes">每天的抽奖总次数</param>
/// <returns></returns>
private bool isTodayOverSum(int aid, string openid, int todayTTTimes)
{
if (todayTTTimes <= 0)
{
return true;
}
Model.wx_dzpUsersTemp model = new Model.wx_dzpUsersTemp();
model.openid = openid;
DateTime todaybegin = DateTime.Parse(DateTime.Now.ToShortDateString());
DateTime mingtianBegin = todaybegin.AddDays(1);
if (!utbll.ExistsOpenid(" actId=" + aid + " and openid='" + openid + "' and createDate>='" + todaybegin + "' and createDate<'" + mingtianBegin + "'"))
{ //第一次,插入
model.times = 1;
model.createDate = DateTime.Now;
model.openid = openid;
model.actId = aid;
utbll.Add(model);
return false;
}
model = utbll.getModelByAidOpenid(aid, openid);
if (model.times >= todayTTTimes)
{
return true;
}
else
{
model.times += 1;
utbll.Update(model);
return false;
}
}
/// <summary>
/// 返回中奖序列号
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public string Get_snumber(int aid)
{
Random rd = new Random((int)DateTime.Now.Ticks);
int radNum = rd.Next(0, 9);//从0到9里随机出一个值
return "SNdzp" + aid + "_" + MyCommFun.ConvertDateTimeInt(DateTime.Now) + radNum;
}
#endregion
public bool IsReusable
{
get
{
return false;
}
}
}
用c#开发微信 系列汇总
用c#开发微信 (15) 微活动 1 大转盘相关推荐
- 用c#开发微信 (17) 微活动 3 投票活动 (文本投票)
前面介绍了微活动<大转盘> 和 <刮刮卡>,这次介绍下微投票,微投票分二种,一种是文本投票, 一种是图片投票. 下面介绍文本投票的详细步骤: 1. 新建文本投票活动 代码实现: ...
- 用c#开发微信 (16) 微活动 2 刮刮卡
微信营销是一种新型的营销模式,由于微信更重视用户之间的互动,故而这种营销推广不不能盲目地套用微博营销的单纯大量广告推送方式.这种方式在微信营销中的效果非常差,会令用户反感,继而取消去企业或商家的微信公 ...
- 微信小程序项目实例——幸运大转盘
微信小程序项目实例--幸运大转盘 文章目录 微信小程序项目实例--幸运大转盘 一.项目展示 二.抽奖页 三.领奖页 文末:项目代码 项目代码见文字底部,点赞关注有惊喜 一.项目展示 幸运大转盘是一个简 ...
- 用c#开发微信 (14) 微统计 - 阅读分享统计系统 4 部署测试 (最终效果图)
微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...
- 用c#开发微信 (13) 微统计 - 阅读分享统计系统 3 UI设计及后台处理
微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...
- html 转盘游戏开发,【scratch】简单的大转盘小游戏
彩色大转盘 大家是否在各种饭店.商家.网页上看到过大转盘的抽奖活动装置? 对就是这种!!!有各种奖品以及充斥着整个版面50%+的谢谢参与. 我们的小码农也做了一款简单的并且没有(大概)谢谢参与的大转盘 ...
- 用微信小程序编写抽奖大转盘
首先我们要先绘制出转盘布局,比如8项奖品转盘.基本布局思路: 1. 8个产品块采用相对或绝对定位,先将8个产品固定在转盘中心位置. 2. 每个产品块包括图片和文字,做好角度偏移,例如360°/8,第一 ...
- 用c#开发微信 系列汇总
网上开发微信开发的教程很多,但c#相对较少.这里列出了我所有c#开发微信的文章,方便自己随时查阅. 一.基础知识 用c#开发微信(1)服务号的服务器配置和企业号的回调模式 - url接入 (源码下载) ...
- 安卓作业----慕课移动应用开发作业15之模仿实现微信界面效果(二)
此篇综合运用自定义ActionBar.ContextMenu.PopupWindow.Fragment.ViewPager 以及RecyclerView等实现微信页面效果. 同时这也是中国大学慕课移动 ...
最新文章
- npm install mysql --save-dev
- Linux把文件移动到容器外,Docker容器与主机之间拷贝文件的方法
- MySQL指定存储引擎命令_MySQL常用指令(2)——存储引擎
- springBoot学习(二) 基础运行原理
- android 遮罩 进度条,bootstrap创建带遮罩层的进度条
- 【T+】取消记账提示入库失败,请至少选择两个字
- python实现小波降噪_15转载python实现小波分解【实测成功】
- 计算机win7系统还原,win7还原系统——win7系统还原出厂设置
- oracle年龄计算函数
- Tupper自我指涉公式:图象里竟然包含式子本身
- Gmail对比Outlook哪个更好
- matlab 关于interpreter的使用
- html svg图片不显示,html/css svg怎么显示不出来?
- js练习题:对象字面量的形式创建一个名字为可可的狗对象
- 计算机切屏的三种快捷键,小技巧:笔记本切换屏幕快捷键_计算机的基本知识_IT /计算机_信息...
- [NFC]NFC 客户 Support 流程
- Formality Error/Debug
- 【艺术探索笔记】第 5 章 理解 RemoteViews
- 笔记——51控制DS18B20温度控制篇章之终章温度报警
- Linux From Scratch v7.0中文版