From 9562a1a3431974098e2f8fa966ec421711033add Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=AE=B6=E8=AE=AD?= Date: Thu, 10 Sep 2026 09:27:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E4=B8=89=E8=A7=92?= =?UTF-8?q?=E6=B4=B2=E6=94=B9=E6=9E=AA=E7=A0=81=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 DeltaGunCode 实体/Mapper/Service/Controller(分页列表、新增、更新、删除) - WebSecurityConfig 放行 /delta-gun-code/public/**,公开页免登录访问 - 附建表与菜单权限 SQL:sql/delta_gun_code.sql --- sql/delta_gun_code.sql | 56 +++++++ .../admin/config/WebSecurityConfig.java | 5 + .../controller/DeltaGunCodeController.java | 145 ++++++++++++++++++ .../freedom/admin/entity/DeltaGunCode.java | 94 ++++++++++++ .../admin/mapper/DeltaGunCodeMapper.java | 13 ++ .../admin/service/DeltaGunCodeService.java | 13 ++ .../service/impl/DeltaGunCodeServiceImpl.java | 19 +++ 7 files changed, 345 insertions(+) create mode 100644 sql/delta_gun_code.sql create mode 100644 src/main/java/com/freedom/admin/controller/DeltaGunCodeController.java create mode 100644 src/main/java/com/freedom/admin/entity/DeltaGunCode.java create mode 100644 src/main/java/com/freedom/admin/mapper/DeltaGunCodeMapper.java create mode 100644 src/main/java/com/freedom/admin/service/DeltaGunCodeService.java create mode 100644 src/main/java/com/freedom/admin/service/impl/DeltaGunCodeServiceImpl.java diff --git a/sql/delta_gun_code.sql b/sql/delta_gun_code.sql new file mode 100644 index 0000000..b46a762 --- /dev/null +++ b/sql/delta_gun_code.sql @@ -0,0 +1,56 @@ +-- ============================================================ +-- 三角洲行动 · 改枪码模块(delta_gun_code) +-- 数据库: freedom_db +-- 用途: 后台维护改枪码 + 无需鉴权的公开复制页面数据源 +-- 说明: 可重复执行(CREATE TABLE IF NOT EXISTS / 幂等 INSERT 判断) +-- 执行后需重新登录系统(或退出登录)刷新菜单缓存方可看到新菜单 +-- ============================================================ + +USE `freedom_db`; + +-- 1. 改枪码数据表 +CREATE TABLE IF NOT EXISTS `delta_gun_code` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` VARCHAR(100) NOT NULL COMMENT '配装名称', + `gun_name` VARCHAR(100) DEFAULT NULL COMMENT '枪械/载具名称', + `category` VARCHAR(50) DEFAULT NULL COMMENT '分类标签(主武器/副武器/载具配置等)', + `code` TEXT NOT NULL COMMENT '改枪码内容', + `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注说明', + `sort` INT DEFAULT 0 COMMENT '排序', + `status` TINYINT DEFAULT 1 COMMENT '状态:1显示 0隐藏', + `copy_count` INT DEFAULT 0 COMMENT '被复制次数', + `create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建者', + `create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新者', + `update_date` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` TINYINT DEFAULT 0 COMMENT '删除标记', + PRIMARY KEY (`id`), + KEY `idx_delta_code_status` (`status`, `del_flag`) +) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COMMENT='三角洲改枪码表'; + +-- 2. 菜单权限:一级菜单「三角洲」 +INSERT INTO `t_sys_permission` + (`parent_id`, `permission_code`, `permission_name`, `permission_desc`, `level`, `icon`, `url`, `component`, `sort`, `create_by`, `create_date`, `del_flag`) +SELECT 0, 'delta', '三角洲', '三角洲行动相关功能', 1, 'md-game-controller-a', '', '', 9, 'admin', NOW(), 0 +FROM DUAL +WHERE NOT EXISTS (SELECT 1 FROM `t_sys_permission` WHERE `permission_code` = 'delta' AND `del_flag` = 0); + +-- 3. 菜单权限:二级菜单「改枪码管理」 +SET @delta_parent_id = (SELECT `id` FROM `t_sys_permission` WHERE `permission_code` = 'delta' AND `del_flag` = 0 ORDER BY `id` LIMIT 1); + +INSERT INTO `t_sys_permission` + (`parent_id`, `permission_code`, `permission_name`, `permission_desc`, `level`, `icon`, `url`, `component`, `sort`, `create_by`, `create_date`, `del_flag`) +SELECT @delta_parent_id, 'delta:gun-code', '改枪码管理', '三角洲改枪码维护与分享', 2, 'md-code-working', '/delta/gun-code', '/delta/delta-gun-code', 1, 'admin', NOW(), 0 +FROM DUAL +WHERE NOT EXISTS (SELECT 1 FROM `t_sys_permission` WHERE `permission_code` = 'delta:gun-code' AND `del_flag` = 0); + +-- 4. 角色授权:给所有现有角色挂上新菜单(幂等) +INSERT INTO `t_sys_role_permission` (`role_id`, `permission_id`, `create_by`, `create_date`) +SELECT r.`id`, p.`id`, 'admin', NOW() +FROM `t_sys_role` r +JOIN `t_sys_permission` p ON p.`permission_code` IN ('delta', 'delta:gun-code') AND p.`del_flag` = 0 +WHERE r.`del_flag` = 0 + AND NOT EXISTS ( + SELECT 1 FROM `t_sys_role_permission` rp + WHERE rp.`role_id` = r.`id` AND rp.`permission_id` = p.`id` + ); diff --git a/src/main/java/com/freedom/admin/config/WebSecurityConfig.java b/src/main/java/com/freedom/admin/config/WebSecurityConfig.java index 6335aea..81f5905 100644 --- a/src/main/java/com/freedom/admin/config/WebSecurityConfig.java +++ b/src/main/java/com/freedom/admin/config/WebSecurityConfig.java @@ -76,6 +76,11 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .authorizeRequests()// 验证码允许匿名访问 .antMatchers("/email-sender/sendEmailVerificationCode","/sys-user/register") .anonymous() + // 三角洲改枪码:公开复制接口无需登录,后台管理接口需登录 + .antMatchers("/delta-gun-code/public/**") + .permitAll() + .antMatchers("/delta-gun-code/**") + .authenticated() .and() .formLogin() .loginProcessingUrl("/login") diff --git a/src/main/java/com/freedom/admin/controller/DeltaGunCodeController.java b/src/main/java/com/freedom/admin/controller/DeltaGunCodeController.java new file mode 100644 index 0000000..650f6fa --- /dev/null +++ b/src/main/java/com/freedom/admin/controller/DeltaGunCodeController.java @@ -0,0 +1,145 @@ +package com.freedom.admin.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.freedom.admin.base.BaseController; +import com.freedom.admin.common.Result; +import com.freedom.admin.entity.DeltaGunCode; +import com.freedom.admin.service.DeltaGunCodeService; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Date; +import java.util.List; + +/** + * 控制层-三角洲改枪码表 + * + * @author zhangjiaxun + * @description 后台维护改枪码 + 公开复制接口(无需登录) + */ +@RestController +@RequestMapping("delta-gun-code") +@Log4j2 +public class DeltaGunCodeController extends BaseController { + + @Autowired + private DeltaGunCodeService deltaGunCodeService; + + /** + * 后台管理-分页查询改枪码列表 + */ + @RequestMapping("findPageList") + public Result findPageList(long pageNum, long pageSize, DeltaGunCode deltaGunCode) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("del_flag", 0); + queryWrapper.like(StringUtils.isNotBlank(deltaGunCode.getName()), "name", deltaGunCode.getName()); + queryWrapper.like(StringUtils.isNotBlank(deltaGunCode.getGunName()), "gun_name", deltaGunCode.getGunName()); + queryWrapper.like(StringUtils.isNotBlank(deltaGunCode.getCategory()), "category", deltaGunCode.getCategory()); + queryWrapper.eq(deltaGunCode.getStatus() != null, "status", deltaGunCode.getStatus()); + queryWrapper.orderByAsc("sort").orderByDesc("id"); + Page page = deltaGunCodeService.page(new Page<>(pageNum, pageSize), queryWrapper); + return Result.ok().setData(page); + } + + /** + * 公开页面-查询所有启用的改枪码(无需登录) + */ + @RequestMapping("public/list") + public Result publicList() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("del_flag", 0); + queryWrapper.eq("status", 1); + queryWrapper.orderByAsc("sort").orderByDesc("id"); + List list = deltaGunCodeService.list(queryWrapper); + return Result.ok().setData(list); + } + + /** + * 公开页面-复制成功后增加复制次数(无需登录) + */ + @RequestMapping("public/addCopyCount") + public Result addCopyCount(Long id) { + if (id == null) { + return Result.error().message("参数缺失"); + } + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", id).eq("del_flag", 0) + .setSql("copy_count = copy_count + 1"); + deltaGunCodeService.update(updateWrapper); + return Result.ok(); + } + + /** + * 后台管理-新增改枪码 + */ + @RequestMapping("add") + public Result add(DeltaGunCode deltaGunCode) { + if (StringUtils.isBlank(deltaGunCode.getName())) { + return Result.error().message("配装名称不能为空"); + } + if (StringUtils.isBlank(deltaGunCode.getCode())) { + return Result.error().message("改枪码不能为空"); + } + try { + if (deltaGunCode.getStatus() == null) { + deltaGunCode.setStatus(1); + } + if (deltaGunCode.getSort() == null) { + deltaGunCode.setSort(0); + } + deltaGunCode.setCopyCount(0); + deltaGunCode.setCreateBy(getUsername()); + deltaGunCode.setCreateDate(new Date()); + boolean save = deltaGunCodeService.save(deltaGunCode); + return Result.ok().setData(save); + } catch (Exception e) { + log.error("新增改枪码失败", e); + return Result.error().message("新增失败"); + } + } + + /** + * 后台管理-更新改枪码 + */ + @RequestMapping("update") + public Result update(DeltaGunCode deltaGunCode) { + if (deltaGunCode.getId() == null) { + return Result.error().message("参数缺失"); + } + if (StringUtils.isBlank(deltaGunCode.getName())) { + return Result.error().message("配装名称不能为空"); + } + if (StringUtils.isBlank(deltaGunCode.getCode())) { + return Result.error().message("改枪码不能为空"); + } + try { + deltaGunCode.setUpdateBy(getUsername()); + deltaGunCode.setUpdateDate(new Date()); + boolean update = deltaGunCodeService.updateById(deltaGunCode); + return Result.ok().setData(update); + } catch (Exception e) { + log.error("更新改枪码失败", e); + return Result.error().message("更新失败"); + } + } + + /** + * 后台管理-删除改枪码(逻辑删除) + */ + @RequestMapping("remove") + public Result remove(DeltaGunCode deltaGunCode) { + try { + boolean remove = deltaGunCodeService.removeById(deltaGunCode.getId()); + return Result.ok().setData(remove); + } catch (Exception e) { + log.error("删除改枪码失败", e); + return Result.error().message("删除失败"); + } + } + +} diff --git a/src/main/java/com/freedom/admin/entity/DeltaGunCode.java b/src/main/java/com/freedom/admin/entity/DeltaGunCode.java new file mode 100644 index 0000000..7b18fd2 --- /dev/null +++ b/src/main/java/com/freedom/admin/entity/DeltaGunCode.java @@ -0,0 +1,94 @@ +package com.freedom.admin.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * delta_gun_code + * 三角洲行动-改枪码 + * + * @author zhangjiaxun + */ +@Data +@TableName("delta_gun_code") +public class DeltaGunCode implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 配装名称 + */ + private String name; + + /** + * 枪械/载具名称 + */ + private String gunName; + + /** + * 分类标签(如:主武器/副武器/载具配置) + */ + private String category; + + /** + * 改枪码内容 + */ + private String code; + + /** + * 备注说明 + */ + private String remark; + + /** + * 排序 + */ + private Integer sort; + + /** + * 状态:1显示 0隐藏 + */ + private Integer status; + + /** + * 被复制次数 + */ + private Integer copyCount; + + /** + * 创建者 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 更新者 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 删除标记 + */ + private Boolean delFlag; + +} diff --git a/src/main/java/com/freedom/admin/mapper/DeltaGunCodeMapper.java b/src/main/java/com/freedom/admin/mapper/DeltaGunCodeMapper.java new file mode 100644 index 0000000..8c007a7 --- /dev/null +++ b/src/main/java/com/freedom/admin/mapper/DeltaGunCodeMapper.java @@ -0,0 +1,13 @@ +package com.freedom.admin.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.freedom.admin.entity.DeltaGunCode; + +/** + * 数据访问层-三角洲改枪码表 + * + * @author zhangjiaxun + */ +public interface DeltaGunCodeMapper extends BaseMapper { + +} diff --git a/src/main/java/com/freedom/admin/service/DeltaGunCodeService.java b/src/main/java/com/freedom/admin/service/DeltaGunCodeService.java new file mode 100644 index 0000000..388892d --- /dev/null +++ b/src/main/java/com/freedom/admin/service/DeltaGunCodeService.java @@ -0,0 +1,13 @@ +package com.freedom.admin.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.freedom.admin.entity.DeltaGunCode; + +/** + * 业务层-三角洲改枪码表 + * + * @author zhangjiaxun + */ +public interface DeltaGunCodeService extends IService { + +} diff --git a/src/main/java/com/freedom/admin/service/impl/DeltaGunCodeServiceImpl.java b/src/main/java/com/freedom/admin/service/impl/DeltaGunCodeServiceImpl.java new file mode 100644 index 0000000..827cd8b --- /dev/null +++ b/src/main/java/com/freedom/admin/service/impl/DeltaGunCodeServiceImpl.java @@ -0,0 +1,19 @@ +package com.freedom.admin.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.freedom.admin.entity.DeltaGunCode; +import com.freedom.admin.mapper.DeltaGunCodeMapper; +import com.freedom.admin.service.DeltaGunCodeService; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Service; + +/** + * 业务层实现-三角洲改枪码表 + * + * @author zhangjiaxun + */ +@Service +@Log4j2 +public class DeltaGunCodeServiceImpl extends ServiceImpl implements DeltaGunCodeService { + +}