KKSU
2024-07-05 98401eca7432757eac3be490f94ab6953f4a5ce1
后台
10 files modified
2 files added
271 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsCategoryController.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsCategoryController.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/RegisterDto.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCategoryMapper.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IAdminMallGoodsCategoryService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsCategoryService.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AdminGameRoomVo.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java 16 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallGoodsCategoryMapper.xml 15 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/product/gameRoomList.html 171 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsCategoryController.java
@@ -4,6 +4,7 @@
import cc.mrbird.febs.common.controller.BaseController;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.mall.entity.GameRoom;
import cc.mrbird.febs.mall.entity.MallGoodsCategory;
import cc.mrbird.febs.mall.service.IAdminMallGoodsCategoryService;
import cc.mrbird.febs.mall.service.IApiMallGoodsCategoryService;
@@ -30,6 +31,14 @@
    private final IApiMallGoodsCategoryService mallGoodsCategoryService;
    /**
     */
    @GetMapping("gameRoomList")
    public FebsResponse gameRoomList(GameRoom gameRoom, QueryRequest request) {
        Map<String, Object> data = getDataTable(goodsCategoryService.gameRoomList(gameRoom, request));
        return new FebsResponse().success().data(data);
    }
    /**
     * 商品分类列表
     * @param mallGoodsCategory
     * @param request
src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsCategoryController.java
@@ -57,4 +57,16 @@
        model.addAttribute("goodsCategoryVo", data);
        return FebsUtil.view("modules/product/categoryUpdate");
    }
    /**
     * 商品分类列表
     * @return
     */
    @GetMapping("gameRoomList")
    @RequiresPermissions("gameRoomList:view")
    public String gameRoomList() {
        return FebsUtil.view("modules/product/gameRoomList");
    }
}
src/main/java/cc/mrbird/febs/mall/dto/RegisterDto.java
@@ -22,6 +22,10 @@
    @ApiModelProperty(value = "登录密码", example = "123456")
    private String password;
    @NotBlank(message = "登录密码不能为空")
    @ApiModelProperty(value = "登录密码", example = "123456")
    private String passwordAgain;
    @NotBlank(message = "邀请码不能为空")
    @ApiModelProperty(value = "邀请码")
    private String inviteId;
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCategoryMapper.java
@@ -1,6 +1,8 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.GameRoom;
import cc.mrbird.febs.mall.entity.MallGoodsCategory;
import cc.mrbird.febs.mall.vo.AdminGameRoomVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsCategoryTreeVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsCategoryVo;
import cc.mrbird.febs.mall.vo.MallGoodsCategoryVo;
@@ -32,4 +34,6 @@
    List<MallGoodsCategory> selectChildCategaryById(@Param("id")Long id);
    List<AdminMallGoodsCategoryTreeVo> getAllCategorys();
    IPage<AdminGameRoomVo> selectListInPage(Page<AdminGameRoomVo> page, @Param("record")GameRoom gameRoom);
}
src/main/java/cc/mrbird/febs/mall/service/IAdminMallGoodsCategoryService.java
@@ -2,7 +2,9 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.mall.entity.GameRoom;
import cc.mrbird.febs.mall.entity.MallGoodsCategory;
import cc.mrbird.febs.mall.vo.AdminGameRoomVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsCategoryTreeVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsCategoryVo;
import cc.mrbird.febs.system.entity.Role;
@@ -28,4 +30,6 @@
    FebsResponse delCategary(Long id);
    List<AdminMallGoodsCategoryTreeVo> getAllCategorys();
    IPage<AdminGameRoomVo> gameRoomList(GameRoom gameRoom, QueryRequest request);
}
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsCategoryService.java
@@ -2,11 +2,14 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.mall.entity.GameRoom;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.entity.MallGoodsCategory;
import cc.mrbird.febs.mall.mapper.GameRoomMapper;
import cc.mrbird.febs.mall.mapper.MallGoodsCategoryMapper;
import cc.mrbird.febs.mall.mapper.MallGoodsMapper;
import cc.mrbird.febs.mall.service.IAdminMallGoodsCategoryService;
import cc.mrbird.febs.mall.vo.AdminGameRoomVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsCategoryTreeVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsCategoryVo;
import cn.hutool.core.collection.CollUtil;
@@ -29,7 +32,6 @@
public class AdminMallGoodsCategoryService extends ServiceImpl<MallGoodsCategoryMapper, MallGoodsCategory> implements IAdminMallGoodsCategoryService {
    private final MallGoodsCategoryMapper mallGoodsCategoryMapper;
    private final MallGoodsMapper mallGoodsMapper;
    @Override
@@ -40,6 +42,13 @@
    }
    @Override
    public IPage<AdminGameRoomVo> gameRoomList(GameRoom gameRoom, QueryRequest request) {
        Page<AdminGameRoomVo> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<AdminGameRoomVo> adminGameRoomVoIPage = mallGoodsCategoryMapper.selectListInPage(page, gameRoom);
        return adminGameRoomVoIPage;
    }
    @Override
    public FebsResponse addCategory(MallGoodsCategory mallGoodsCategory) {
        String name = mallGoodsCategory.getName();
        if(StrUtil.isEmpty(name)){
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -94,6 +94,12 @@
         * 生成用户信息
         * 返回账号和密钥给前端
         */
        String passwordAgain = registerDto.getPasswordAgain();
        String password = registerDto.getPassword();
        if(!passwordAgain.equals(password)){
            throw new FebsException("两次密码不一致。");
        }
        String accountLogin = registerDto.getAccountLogin();
        boolean isValid = validateAccount(accountLogin);
        if(!isValid){
src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java
@@ -691,7 +691,7 @@
                mallMoneyFlowService.addMoneyFlow(
                        gameChild.getMemberId(),
                        BigDecimal.ZERO,
                        amount.negate(),
                        GameFlowTypeEnum.PLAYER_PERK.getValue(),
                        MallUtils.getOrderNum("ZJ"),
                        StrUtil.format(
src/main/java/cc/mrbird/febs/mall/vo/AdminGameRoomVo.java
New file
@@ -0,0 +1,17 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(value = "AdminGameRoomVo", description = "信息返回类")
public class AdminGameRoomVo {
    private Integer roomType;//房间类型 1-初级房2-土豪房3-尊爵房
    private String password;//房间密码(房间唯一编码,自动生成)
    private Long ownerMemberId;//房主用户表ID
    private String roomOwner;//房主用户表ID
    private Integer state;//房间状态0-未开始1-正常2-结束
    private Integer gameTime;//游戏时长
}
src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java
@@ -76,15 +76,23 @@
    }
    public static void main(String[] args) {
        RSA rsa = new RSA(null, AppContants.PUBLIC_KEY);
        String token = rsa.encryptBase64("45" + "_" + System.currentTimeMillis(), KeyType.PublicKey);
        System.out.println(token);
//        RSA rsa = new RSA(null, AppContants.PUBLIC_KEY);
//        String token = rsa.encryptBase64("45" + "_" + System.currentTimeMillis(), KeyType.PublicKey);
//        System.out.println(token);
        String token = "kbswT3NAxqcXWcW9gVR6c/hXIFVWRIfaMq99HAiZ/IKPkoHaTlFBbLtFMTMmvUdbm45VtjOnubAMHFhQTz8GoyjhjB7bdDGWFfpe4DcGCKEMf6bWuRqopOeVF8Pst6UTwTZCvPDnbka5wbGggqNvwcSQQT2okjRe+nfU+A5EAfY=";
        RSA rsas = new RSA(AppContants.PRIVATE_KEY, null);
        String[] tokens = StrUtil.split(rsas.decryptStr(token, KeyType.PrivateKey), "_");
        System.out.println(tokens);
        System.out.println(tokens[0]);
        System.out.println(tokens[1]);
        long currentTime = System.currentTimeMillis();
        boolean b = currentTime - Long.parseLong(tokens[1]) <= 10000;
        System.out.println(b);
    }
    private Boolean verifyTokenExpired(Long time) {
src/main/resources/mapper/modules/MallGoodsCategoryMapper.xml
@@ -16,6 +16,21 @@
        order by m.parent_id asc
    </select>
    <select id="selectListInPage" resultType="cc.mrbird.febs.mall.vo.AdminGameRoomVo">
        SELECT
            a.*
        FROM game_room a
        left join mall_member b on a.parent_id = b.id
        <where>
            <if test="record != null" >
                <if test="record.name!=null and record.name!=''">
                    and m.name like concat('%',  #{record.name},'%')
                </if>
            </if>
        </where>
        order by m.parent_id asc
    </select>
    <select id="selectCategoryByName" resultType="cc.mrbird.febs.mall.entity.MallGoodsCategory">
        SELECT * FROM mall_goods_category m where m.name = #{name}
    </select>
src/main/resources/templates/febs/views/modules/product/gameRoomList.html
New file
@@ -0,0 +1,171 @@
<div class="layui-fluid layui-anim febs-anim" id="febs-game-room" lay-title="游戏房间">
    <div class="layui-row febs-container">
        <div class="layui-col-md12">
            <div class="layui-card">
                <div class="layui-card-body febs-table-full">
                    <form class="layui-form layui-table-form" lay-filter="user-table-form">
                        <div class="layui-row">
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">名称:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="名称" name="name" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="add">
                                    新增
                                </div>
                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
                                    <i class="layui-icon">&#xe848;</i>
                                </div>
                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
                                    <i class="layui-icon">&#xe79b;</i>
                                </div>
                            </div>
                        </div>
                    </form>
                    <table lay-filter="gameRoomTable" lay-data="{id: 'gameRoomTable'}"></table>
                    <style type="text/css">
                        .layui-table-cell{
                            text-align:center;
                            height: auto;
                            white-space: normal;
                        }
                        .layui-table img{
                            max-width:100px
                        }
                    </style>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- 表格操作栏 start -->
<script type="text/html" id="tableCategoryBar-option">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-normal layui-btn-xs" type="button" shiro:hasPermission="categoryBar:update" lay-event="see">编辑</button>
        <button class="layui-btn layui-btn-normal layui-btn-xs" type="button" shiro:hasPermission="categoryBar:delete" lay-event="delCategary">删除</button>
    </div>
</script>
<!-- 表格操作栏 end -->
<script data-th-inline="none" type="text/javascript">
    // 引入组件并初始化
    layui.use([ 'jquery', 'form', 'table', 'febs'], function () {
        var $ = layui.jquery,
            febs = layui.febs,
            form = layui.form,
            table = layui.table,
            $view = $('#febs-game-room'),
            $query = $view.find('#query'),
            $add = $view.find('#add'),
            $reset = $view.find('#reset'),
            $searchForm = $view.find('form'),
            sortObject = {field: 'phone', type: null},
            tableIns;
        //结合表格操作栏是否有内容,来控制数据列是否显示
        let tableCategoryBarOption = $.trim($("#tableCategoryBar-option").html())==="" ? true : false;
        form.render();
        // 表格初始化
        initTable();
        // 初始化表格操作栏各个按钮功能
        table.on('tool(gameRoomTable)', function (obj) {
            var data = obj.data,
                layEvent = obj.event;
            if (layEvent === 'see') {
                febs.modal.open('编辑', 'modules/product/categoryUpdate/' + data.id, {
                    btn: ['提交', '取消'],
                    yes: function (index, layero) {
                        $('#categary-update').find('#submit').trigger('click');
                    },
                    btn2: function () {
                        layer.closeAll();
                    }
                });
            }
            if (layEvent === 'delCategary') {
                febs.modal.confirm('删除', '确认删除?', function () {
                    delCategary(data.id);
                });
            }
            if (layEvent === 'seeImges') {
                var t = $view.find('#seeImges'+data.id+'');
                //页面层
                layer.open({
                    type: 1,
                    title: "图片",
                    skin: 'layui-layer-rim', //加上边框
                    area: ['80%', '80%'], //宽高
                    shadeClose: true, //开启遮罩关闭
                    end: function (index, layero) {
                        return false;
                    },
                    content: '<div style="text-align:center"><img src="' + $(t).attr('src') + '" /></div>'
                });
            }
        });
        function delCategary(id) {
            febs.get(ctx + 'admin/goodsCategory/delCategary/' + id, null, function () {
                febs.alert.success('操作成功');
                $query.click();
            });
        }
        // 查询按钮
        $query.on('click', function () {
            var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
            tableIns.reload({where: params, page: {curr: 1}});
        });
        // 刷新按钮
        $reset.on('click', function () {
            $searchForm[0].reset();
            sortObject.type = 'null';
            tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
        });
        $add.on('click', function () {
            febs.modal.open('新增', 'modules/product/categoryAdd/', {
                btn: ['提交', '取消'],
                yes: function (index, layero) {
                    $('#categary-add').find('#submit').trigger('click');
                },
                btn2: function () {
                    layer.closeAll();
                }
            });
        });
        function initTable() {
            tableIns = febs.table.init({
                elem: $view.find('table'),
                id: 'gameRoomTable',
                url: ctx + 'admin/goodsCategory/categoryList',
                cols: [[
                    {field: 'name', title: '名称', minWidth: 150,align:'left'},
                    {field: 'parentName', title: '父级名称', minWidth: 150,align:'left'},
                    {field: 'image', title: '图片',
                        templet: function (d) {
                            return '<a lay-event="seeImges"><img id="seeImges'+d.id+'" src="'+d.image+'" alt=""></a>';
                        }, minWidth: 100,align:'center'},
                    {title: '操作', minWidth: 200 ,toolbar: '#tableCategoryBar-option',hide:tableCategoryBarOption}
                ]]
            });
        }
        // 获取查询参数
        function getQueryParams() {
            return {
                name: $searchForm.find('input[name="name"]').val().trim(),
            };
        }
    })
</script>