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