From 5fcbc587a07aefa3eb450e9ec83089f8c567df1c Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 26 Feb 2024 17:13:17 +0800
Subject: [PATCH] 抽奖
---
src/main/resources/templates/febs/views/modules/goods/tzInfo.html | 190 ++++++++++++++++++++++++++++++++++++++
src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java | 76 ++++++++++++++
src/main/resources/templates/febs/views/modules/system/indexData.html | 16 ---
3 files changed, 263 insertions(+), 19 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java
index bd2c279..bb65260 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java
@@ -2,15 +2,27 @@
import cc.mrbird.febs.common.controller.BaseController;
import cc.mrbird.febs.common.entity.FebsConstant;
+import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
+import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
+import cc.mrbird.febs.common.enumerates.OrderPayMethodEnum;
+import cc.mrbird.febs.common.utils.AppContants;
+import cc.mrbird.febs.common.utils.DateUtil;
import cc.mrbird.febs.common.utils.FebsUtil;
-import cc.mrbird.febs.mall.entity.MallGoods;
-import cc.mrbird.febs.mall.entity.TzInfo;
-import cc.mrbird.febs.mall.mapper.TzInfoMapper;
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.mapper.*;
+import cc.mrbird.febs.mall.service.AsyncCjService;
import cc.mrbird.febs.mall.service.IAdminMallGoodsService;
import cc.mrbird.febs.mall.service.IAdminMallMemberService;
+import cc.mrbird.febs.mall.service.IApiMallMemberService;
import cc.mrbird.febs.mall.vo.AdminMailGoodsDetailVo;
import cc.mrbird.febs.mall.vo.AdminMailGoodsUpdateVo;
+import cc.mrbird.febs.mall.vo.ApiKjInfoVo;
import cc.mrbird.febs.mall.vo.MallMemberVo;
+import cc.mrbird.febs.rabbit.producter.AgentProducer;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
@@ -19,6 +31,12 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
@Controller("goodsView")
@RequestMapping(FebsConstant.VIEW_PREFIX + "modules/goods")
@RequiredArgsConstructor
@@ -26,6 +44,58 @@
private final IAdminMallGoodsService mallGoodsService;
private final TzInfoMapper tzInfoMapper;
+ private final KjRecordMapper kjRecordMapper;
+ private final RedisUtils redisUtils;
+ private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
+
+ @GetMapping("tzInfo")
+ @RequiresPermissions("tzInfo:view")
+ public String tzInfo(Model model) {
+ ApiKjInfoVo apiKjInfoVo = new ApiKjInfoVo();
+ String kjNoOld = redisUtils.getString(AppContants.KJ_RECORD_NO_OLD);
+ String kjNumOld = redisUtils.getString(AppContants.KJ_RECORD_NUM_OLD);
+ if(StrUtil.isBlank(kjNoOld)){
+ KjRecord kjRecordOld = kjRecordMapper.selectOneByLimitZero(1,1);
+ if(ObjectUtil.isNotEmpty(kjRecordOld)){
+ apiKjInfoVo.setKjNoOld(kjRecordOld.getKjNo());
+ apiKjInfoVo.setKjNumOld(kjRecordOld.getKjNum());
+ }
+ }else{
+ apiKjInfoVo.setKjNoOld(kjNoOld);
+ apiKjInfoVo.setKjNumOld(kjNumOld);
+ }
+
+ String kjNo = redisUtils.getString(AppContants.KJ_RECORD_NO);
+ String createdTime = redisUtils.getString(AppContants.KJ_RECORD_TIME);
+ if(StrUtil.isBlank(kjNo)){
+ KjRecord kjRecord = kjRecordMapper.selectOneByLimitZero(0,1);
+ if(ObjectUtil.isNotEmpty(kjRecord)){
+ apiKjInfoVo.setKjNo(kjRecord.getKjNo());
+ apiKjInfoVo.setCreatedTime(kjRecord.getCreatedTime().toString());
+ }
+ }else{
+ apiKjInfoVo.setKjNo(kjNo);
+ try {
+ apiKjInfoVo.setCreatedTime(cc.mrbird.febs.common.utils.DateUtil.formatCstTime(createdTime, DateUtil.FULL_TIME_SPLIT_PATTERN));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ }
+
+ DataDictionaryCustom timeIntervalDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ DataDictionaryEnum.TIME_INTERVAL.getType(),
+ DataDictionaryEnum.TIME_INTERVAL.getCode()
+ );
+ apiKjInfoVo.setDjs(Integer.parseInt(timeIntervalDic.getValue()));
+
+ // 获取当前时间
+ LocalDateTime currentTime = LocalDateTime.now();
+ // 定义时间格式
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ apiKjInfoVo.setSystemTime(currentTime.format(formatter));
+ model.addAttribute("apiKjInfoVo", apiKjInfoVo);
+ return FebsUtil.view("modules/goods/tzInfo");
+ }
/**
* 商品-详情
diff --git a/src/main/resources/templates/febs/views/modules/goods/tzInfo.html b/src/main/resources/templates/febs/views/modules/goods/tzInfo.html
new file mode 100644
index 0000000..32fb707
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/goods/tzInfo.html
@@ -0,0 +1,190 @@
+<style>
+ #kj-data .welcome-info {
+ border: 1px solid #f1f1f1;
+ margin-bottom: .5rem;
+ padding: .5rem;
+ background: #FFFFFF;
+ }
+
+ #kj-data .welcome-info-wrapper {
+ padding: .2rem;
+ display: inline-block
+ }
+
+ #kj-data .welcome-info-wrapper .user-header {
+ display: inline-block;
+ vertical-align: middle
+ }
+
+ #kj-data .welcome-info-wrapper .user-header img {
+ width: 5rem;
+ margin: .5rem 1rem;
+ border-radius: 50%
+ }
+
+ #kj-data .welcome-info-wrapper .user-info {
+ display: inline-block;
+ vertical-align: middle
+ }
+
+ #kj-data .welcome-info-wrapper .user-info .random-message {
+ font-size: 1rem;
+ margin-bottom: .2rem;
+ max-width: 21rem
+ }
+
+ #kj-data .welcome-info-wrapper .user-info .user-dept, #kj-data .welcome-info-wrapper .user-info .user-login-info {
+ color: rgba(0, 0, 0, 0.45);
+ }
+
+ #kj-data .login-count-table {
+ width: 100%;
+ margin: 1rem;
+ }
+
+ #kj-data .login-count-table .count {
+ padding-top: .8rem;
+ font-size: 1rem;
+ font-weight: 600;
+ color: #1890ff
+ }
+
+ #kj-data .project-table {
+ padding: .5rem;
+ border: 1px solid #f1f1f1;
+ width: 100%
+ }
+
+ #kj-data .project-table-td {
+ padding: .5rem 0.7rem;
+ border: 1px solid #f1f1f1;
+ }
+
+ #kj-data .project-table-td a {
+ color: #42b983;
+ font-size: .9rem;
+ font-weight: 600;
+ }
+
+ #kj-data .project-desc {
+ color: rgba(0, 0, 0, 0.45);
+ }
+ /*.layui-card:last-child{*/
+ /* background: #F8F8F8;*/
+ /*}*/
+ .box{
+ background: #FFFFFF;
+ padding: 50px 50px;
+ border-radius: 4px;
+ }
+ .box .name{
+ font-size: 14px;
+ color: #333333;
+ }
+ .box .num{
+ font-size: 24px;
+ color: #1890ff;
+ font-weight: bold;
+ margin-top: 20px;
+ word-break: break-all;
+ }
+</style>
+<div class="layui-fluid layui-anim febs-anim-up" id="kj-data" lay-title="开奖信息">
+ <div class="layui-card-body layui-anim layui-anim-fadein">
+ <blockquote class="layui-elem-quote blue-border">上一期开奖</blockquote>
+ <div class="layui-row">
+ <div class="layui-row layui-col-space15">
+ <div class="layui-col-md3">
+ <div class="layui-panel">
+ <div class="box">
+ <p class="name">上一期期号</p>
+ <p class="num"><span id="kjNoOld"></span></p>
+ </div>
+ </div>
+ </div>
+ <div class="layui-col-md3">
+ <div class="layui-panel">
+ <div class="box">
+ <p class="name">上一期开奖号码</p>
+ <p class="num" ><span id="kjNumOld"></span></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <blockquote class="layui-elem-quote blue-border">本期开奖</blockquote>
+ <div class="layui-row">
+ <div class="layui-row layui-col-space15">
+ <div class="layui-col-md3">
+ <div class="layui-panel">
+ <div class="box">
+ <p class="name">倒计时开始时间</p>
+ <p class="num"><span id="createdTime"></span></p>
+ </div>
+ </div>
+ </div>
+ <div class="layui-col-md3">
+ <div class="layui-panel">
+ <div class="box">
+ <p class="name">倒计时(分钟)</p>
+ <p class="num"><span id="djs"></span></p>
+ </div>
+ </div>
+ </div>
+ <div class="layui-col-md3">
+ <div class="layui-panel">
+ <div class="box">
+ <p class="name">倒计时</p>
+ <p class="num"><span id="countdown"></span></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</div>
+<script data-th-inline="javascript" type="text/javascript">
+ layui.use(['febs', 'jquery'], function () {
+ var $ = layui.jquery,
+ $view = $('#kj-data'),
+ apiKjInfoVo = [[${apiKjInfoVo}]];
+ initIndexData();
+ function initIndexData() {
+ $view.find('#kjNoOld').text(apiKjInfoVo.kjNoOld).end()
+ .find('#kjNumOld').text(apiKjInfoVo.kjNumOld).end()
+ .find('#kjNo').text(apiKjInfoVo.kjNo).end()
+ .find('#createdTime').text(apiKjInfoVo.createdTime).end()
+ .find('#systemTime').text(apiKjInfoVo.systemTime).end()
+ .find('#djs').text(apiKjInfoVo.djs).end();
+ }
+ // 设置结束时间(示例为2024年2月26日18:00:00)
+ var endTime = new Date(apiKjInfoVo.createdTime).getTime() + apiKjInfoVo.djs * 60 * 1000;
+ // 获取当前时间
+ var now = new Date(apiKjInfoVo.systemTime).getTime();
+ // 计算剩余时间
+ function countDown() {
+ var distance = endTime - now;
+ // 计算剩余的小时、分钟和秒数
+ var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ var seconds = Math.floor((distance % (1000 * 60)) / 1000);
+ if (distance > 0 && distance < 1 * 60 * 1000) {
+ // 倒计时结束,显示相应信息
+ document.getElementById('countdown').innerHTML = '停止投注,等待开奖中,'+minutes + ':' + seconds ;
+ }else if(distance <= 0){
+ // 倒计时结束,显示相应信息
+ document.getElementById('countdown').innerHTML = '正在开奖';
+ location.reload(); // 刷新页面
+ return;
+ }else{
+ // 更新倒计时显示
+ document.getElementById('countdown').innerHTML = minutes + ':' + seconds;
+ }
+ // 每秒更新一次倒计时
+ now = now + 1000;
+ }
+ // 使用setInterval定时更新倒计时
+ setInterval(countDown, 1000);
+ });
+</script>
diff --git a/src/main/resources/templates/febs/views/modules/system/indexData.html b/src/main/resources/templates/febs/views/modules/system/indexData.html
index c0c1dd9..24b0c11 100644
--- a/src/main/resources/templates/febs/views/modules/system/indexData.html
+++ b/src/main/resources/templates/febs/views/modules/system/indexData.html
@@ -287,22 +287,6 @@
</div>
</div>
</div>
-
-<!-- <div class="layui-card-body layui-anim layui-anim-fadein">-->
-<!-- <div class="layui-row">-->
-<!-- <div class="m-title">积分池</div>-->
-<!-- <div class="layui-row layui-col-space15">-->
-<!-- <div class="layui-col-md3">-->
-<!-- <div class="layui-panel">-->
-<!-- <div class="box">-->
-<!-- <p class="name">剩余积分</p>-->
-<!-- <p class="num"><span id="scorePool"></span></p>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
</div>
<script data-th-inline="javascript" type="text/javascript">
layui.use(['febs', 'jquery'], function () {
--
Gitblit v1.9.1