1.奖盘上的奖品在数据库配置
2.扫描用户出示的代表身份的二维码,点查询,查到用户的个人信息及他可以参与的抽奖活动。点击立即抽奖,奖盘开始转动,再次点击,转盘停止,抽奖完成。
@Transactional(readOnly = false)
public AjaxJson draw(String drawId, String userId) {
if (drawId == null || "".equals(drawId)) {
return AjaxJson.error("请重新扫码");
} else {
WxMoneyDrawPrize thanks = new WxMoneyDrawPrize();
Map<String, Object> result = new HashMap<>();
Map<String, String> wxUserInfo = new HashMap<>();
List<WxMoneyDrawPrize> prize = new ArrayList<>();
List<String> strings = new ArrayList<>();
strings.add("谢谢参与");
Map<String, Object> data = new HashMap<>();
if (data != null) {
WxMoneyDraw drawInfo = new WxMoneyDraw();
int count = 0;
if (count < drawInfo.getNumber()) {
List<WxMoneyDrawPrize> drawP = new ArrayList<>();
for (WxMoneyDrawPrize t : prize) {
if (t.getRemainNumber() > 0) {
drawP.add(t);
}
}
WxMoneyDrawResult drawResult = new WxMoneyDrawResult();
TWxUser wxUser = new TWxUser();
wxUser.setOpenId(wxUserInfo.get("openid"));
wxUser.setNickname(wxUserInfo.get("nikeName"));
wxUser.setRealName(wxUserInfo.get("userName"));
if (drawP != null && !drawP.isEmpty()) {
double pr = 0;
for (WxMoneyDrawPrize d : drawP) {
pr += Double.parseDouble(d.getPrizeOdds());
}
if (pr < 100) {
double nowPr = 100 - pr;
WxMoneyDrawPrize cyj = new WxMoneyDrawPrize();
cyj.setId("0");
cyj.setPrizeName("谢谢参与");
cyj.setPrizeOdds(String.valueOf(nowPr));
drawP.add(cyj);
}
WxMoneyDrawPrize tWxDrawPrize = startDraw(drawP);
int i = strings.indexOf(tWxDrawPrize.getPrizeName());
result.put("prizeName", tWxDrawPrize.getPrizeName());
result.put("prizeId", tWxDrawPrize.getId());
result.put("arrayNo", i);
strings.remove(tWxDrawPrize.getPrizeName());
result.put("array", strings);
if (!"0".equals(tWxDrawPrize.getId())
|| !"谢谢参与".equals(tWxDrawPrize.getPrizeName())) {
TWxUser u = new TWxUser();
u.setOpenId(wxUserInfo.get("openid"));
drawResult.setMember(u);
drawResult.setPrize(tWxDrawPrize);
drawResult.setDraw(new WxMoneyDraw(drawId));
drawResult.setResultDesc(tWxDrawPrize.getPrizeName());
drawResult.setIsWin(1);
drawResult.setIsAward(0);
} else {
drawResult.setPrize(thanks);
drawResult.setMember(wxUser);
drawResult.setDraw(new WxMoneyDraw(drawId));
drawResult.setResultDesc("谢谢参与");
drawResult.setIsWin(0);
drawResult.setIsAward(0);
}
drawResult.preInsert();
return AjaxJson.success().put("data", result);
} else {
drawResult.setMember(wxUser);
drawResult.setDraw(new WxMoneyDraw(drawId));
drawResult.setResultDesc("谢谢参与");
drawResult.setIsWin(0);
drawResult.setIsAward(0);
drawResult.preInsert();
int i = strings.indexOf(thanks.getPrizeName());
result.put("prizeName", thanks.getPrizeName());
result.put("prizeId", thanks.getId());
result.put("arrayNo", i);
strings.remove(thanks.getPrizeName());
result.put("array", strings);
return AjaxJson.success().put("data", result);
}
} else {
return AjaxJson.error("您的抽奖次数已经用尽!");
}
} else {
return AjaxJson.error("您今天无法参与抽奖!");
}
}
}
private WxMoneyDrawPrize startDraw(List<WxMoneyDrawPrize> drawP) {
double sumWeight = 0;
for (WxMoneyDrawPrize p : drawP) {
sumWeight += Double.parseDouble(p.getPrizeOdds());
}
double randomNumber = Math.random() * sumWeight;
double start = 0;
for (WxMoneyDrawPrize tWxDrawPrize : drawP) {
double odds = Double.parseDouble(tWxDrawPrize.getPrizeOdds());
if (odds > 0 && randomNumber >= start && randomNumber < (start + odds)) {
return tWxDrawPrize;
}
start += odds;
}
return null;
}
<template>
<div id="all" style="padding: 10px 0">
<div style="text-align: center">
<div class="wheel-container" @click="onClickLuckyWheel">
<LuckyWheel
ref="LuckyWheel"
width="600px"
height="600px"
:prizes="prizes"
:default-style="defaultStyle"
:blocks="blocks"
:buttons="buttons"
@end="endCallBack"
/>
</div>
</div>
<div style="text-align: center">
<div style="width: 50%; margin: 0 auto">
<el-input
id="openid"
v-model="scanCode"
placeholder="请扫码"
@keyup.enter.native="callq"
@keyup.space.native="onClickLuckyWheel"
/>
</div>
<div style="text-align: left">
<div
style="
width: 50%;
margin: 0 auto;
background-color: #fff;
font-size: 20px;
border-radius: 5px;
margin-top: 20px;
"
>
<div style="text-align: left; width: 200px; display: inline">
登记号:<span style="color: blue">{{ this.registerNo }}</span>
</div>
<div style="width: 200px; display: inline">
姓名:{{ this.userName }}
</div>
<el-button
style="
background-color: #ffa723;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
text-align: right;
"
@click="callq()"
>查询
</el-button>
</div>
</div>
</div>
</div>
</template>
<script>
import { Howl } from "howler";
export default {
mounted() {
document.getElementById("openid").focus();
},
created() {
this.loadData();
},
data() {
return {
userName: "",
prizeResult: null,
drawId: "",
userId: "",
openId: "",
registerNo: "",
scanCode: "",
state: 0,
prizes: [],
defaultStyle: {
fontColor: "#d64737",
fontSize: "30px",
},
blocks: [{ padding: "13px", background: "#d64737" }],
buttons: [
{ radius: "50px", background: "#d64737" },
{ radius: "45px", background: "#fff" },
{ radius: "41px", background: "#d64737", pointer: true },
{
radius: "35px",
background: "#ffdea0",
imgs: [
{
src: require("@/assets/img/button.png"),
width: "65%",
top: "-50%",
},
],
},
],
};
},
methods: {
play() {
var sound = new Howl({
src: ["./audio/drawSuccess.wav"],
});
sound.play();
},
loadData() {
this.$http({
url: "/activity/moneyActivity/getDrawPrize",
method: "GET",
}).then(({ data }) => {
if (data && data.success) {
const prizes = [];
let prizeData = data.prize;
prizeData.forEach((item, index) => {
prizes.push({
title: item,
background: index % 2 ? "#f9e3bb" : "#f8d384",
fonts: [{ text: item, top: "10%" }],
imgs: [
{
src: require(`@/assets/img/button.png`),
width: "30%",
top: "35%",
},
],
});
});
this.prizes = prizes;
}
});
},
callq() {
this.$http({
url: "/getActivity/activity/queryUserInfo",
method: "POST",
data: {
scanCode: this.scanCode,
},
}).then(({ data }) => {
if (data && data.success) {
const prizes = [];
let prizeData = data.prize;
this.drawId = data.drawId;
this.openId = data.openId;
this.userId = data.userId;
this.userName = data.userName;
this.registerNo = data.registerNo;
prizeData.forEach((item, index) => {
prizes.push({
title: item,
background: index % 2 ? "#f9e3bb" : "#f8d384",
fonts: [{ text: item, top: "10%" }],
imgs: [
{
src: require(`@/assets/img/button.png`),
width: "30%",
top: "35%",
},
],
});
});
this.prizes = prizes;
}
});
},
async onClickLuckyWheel() {
if (this.state == 0) {
this.state = 1;
const { data } = await this.$http({
url: "/award/award/drawTimes",
method: "POST",
data: {
drawId: this.drawId,
openId: this.openId,
},
});
if (
this.drawId == null ||
this.drawId == "" ||
this.drawId == undefined ||
this.openId == null ||
this.openId == "" ||
this.openId == undefined
) {
this.state = 0;
this.$message.error("请先扫码");
} else {
if (data.data) {
this.$refs.LuckyWheel.play();
} else {
this.state = 0;
this.$message.error("您的抽奖次数已用尽");
}
}
} else if (this.state == 1) {
this.state = 2;
const { data } = await this.$http({
url: "/award/award/startDraw",
method: "POST",
data: {
id: this.drawId,
userId: this.userId,
},
});
this.prizeResult = data.data.prizeName;
if (data.data.prizeName != "谢谢参与") {
this.play();
}
this.$refs.LuckyWheel.stop(data.data.arrayNo + 1);
this.state = 3;
}
},
endCallBack(prize) {
this.state = 0;
let mess = `恭喜你获得${this.prizeResult}`;
this.$alert(mess, "恭喜您", {
confirmButtonText: "确定",
callback: (action) => {
this.scanCode = "";
this.registerNo = "";
this.userName = "";
},
});
},
},
destroyed() {},
};
</script>
<style scoped>
.el-scrollbar {
overflow-x: hidden;
}
#all {
background-image: url("~@/assets/img/redPack.png");
background-repeat: no-repeat;
background-size: 100% 100%;
-moz-background-size: 100% 100%;
height: 800px;
}
.wheel-container {
display: inline-block;
}
.jp-content {
background-color: red;
}
</style>