KKSU
2024-02-26 5fcbc587a07aefa3eb450e9ec83089f8c567df1c
抽奖
2 files modified
1 files added
282 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java 76 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/goods/tzInfo.html 190 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/system/indexData.html 16 ●●●●● patch | view | raw | blame | history
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");
    }
    /**
     * 商品-详情
src/main/resources/templates/febs/views/modules/goods/tzInfo.html
New file
@@ -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>
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 () {