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"></i> </div> <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> <i class="layui-icon"></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>